├── .gitignore ├── LICENSE.md ├── README.md ├── args.gn ├── args.list ├── build.env ├── chromium.gyp_env ├── depot_tools.zip ├── docs ├── NOTES.md ├── args.gn.bak ├── win2K.md └── windows_build_instructions.md ├── infra ├── Extensions │ └── external_extensions.json ├── PepperFlash │ ├── manifest.json │ └── pepflashplayer.dll ├── default_apps │ ├── docs.crx │ ├── drive.crx │ ├── external_extensions.json │ ├── gmail.crx │ └── youtube.crx └── swiftshader │ └── 3.3.0.1 │ ├── libEGL.dll │ ├── libGLESv2.dll │ ├── manifest.fingerprint │ └── manifest.json ├── logos ├── chromium_xp.png ├── promo.png ├── xp_banner.svg └── xp_flag.png └── src ├── DEPS ├── build ├── common.gypi ├── config │ ├── compiler │ │ └── BUILD.gn │ └── win │ │ ├── BUILD.gn │ │ └── visual_studio_version.gni ├── toolchain │ └── win │ │ └── setup_toolchain.py └── vs_toolchain.py ├── chrome ├── VERSION ├── app │ └── delay_load_hook_win.cc ├── browser │ ├── permissions │ │ └── permission_uma_util.cc │ └── ui │ │ ├── browser_ui_prefs.cc │ │ └── startup │ │ ├── google_api_keys_infobar_delegate.cc │ │ └── obsolete_system_infobar_delegate.cc ├── installer │ └── mini_installer │ │ └── chrome.release └── tools │ └── build │ └── win │ └── create_installer_archive.py ├── components ├── drive │ └── job_scheduler.cc └── search_engines │ └── prepopulated_engines.json ├── third_party └── ffmpeg │ ├── ffmpeg_generated.gni │ └── ffmpeg_generated.gypi └── win8 └── metro_driver └── resources ├── Logo.png └── SmallLogo.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | API_KEYS.txt 3 | *.zip 4 | !depot_tools.zip 5 | *.apk 6 | /release/ 7 | mini_installer.exe -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2023, Alexander David Frick 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #   Chromium XP   2 | 3 | Builds of [Chromium](https://www.chromium.org/) for [Windows XP](https://en.wikipedia.org/wiki/Windows_XP), [Server 2003](https://en.wikipedia.org/wiki/Windows_Server_2003), and [Windows 2000](https://en.wikipedia.org/wiki/Windows_2000) (see win 2K caveats [Here](https://github.com/Alex313031/chromium-xp/blob/main/docs/win2K.md)) 4 | 5 | - Based on [M49.0.2623.112](https://chromium.googlesource.com/chromium/src/+/refs/tags/49.0.2623.112) 6 | - Compiler Optimized 7 | - Includes Codecs 8 | 9 | I will be attempting to fix some things, backport some stuff, and use compiler optimizations 10 | from [Thorium](https://thorium.rocks/), except no AVX (will be using [SSE2](https://en.wikipedia.org/wiki/SSE2#CPU_support) as the baseline). 11 | 12 | ---------------------------- 13 | 14 | Chromium is an open-source browser project that aims to build a safer, faster, 15 | and more stable way for all users to experience the web. 16 | 17 | The project's web site is https://www.chromium.org. 18 | 19 | To check out the source code locally, don't use `git clone`! Instead, 20 | follow [the instructions on how to get the code](https://web.archive.org/web/20160414155322/https://www.chromium.org/developers/how-tos/get-the-code). 21 | 22 | Documentation in the source is rooted in [docs](https://source.chromium.org/chromium/chromium/src/+/refs/tags/49.0.2623.112:docs/). 23 | 24 | Learn how to [Get Around the Chromium Source Code Directory Structure 25 | ](https://web.archive.org/web/20181112101626/https://www.chromium.org/developers/how-tos/getting-around-the-chrome-source-code/). 26 | 27 | For historical reasons, there are some small top level directories. Now the 28 | guidance is that new top level directories are for product (e.g. Chrome, 29 | Android WebView, Ash). Even if these products have multiple executables, the 30 | code should be in subdirectories of the product. 31 | 32 | If you found a bug upstream, please file it at https://crbug.com/new. 33 | If you found a bug in this fork, please file it [Here](https://github.com/Alex313031/chromium-xp/issues). 34 | -------------------------------------------------------------------------------- /args.gn: -------------------------------------------------------------------------------- 1 | google_api_key = "AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw" 2 | google_default_client_id = "77185425430.apps.googleusercontent.com" 3 | google_default_client_secret = "OTJgUOQcT7lO7GsGZq2G4IlT" 4 | target_cpu = "x86" 5 | is_official_build = true 6 | is_debug = false 7 | dcheck_always_on = false 8 | is_component_build = false 9 | # remove_webcore_debug_symbols = true 10 | symbol_level = 0 11 | fieldtrial_testing_like_official_build = true 12 | enable_google_now = true 13 | enable_hotwording = false 14 | enable_iterator_debugging = false 15 | enable_nacl = true 16 | ffmpeg_branding = "Chrome" 17 | proprietary_codecs = true 18 | enable_widevine = true 19 | enable_hevc_demuxing = true 20 | enable_ac3_eac3_audio_demuxing = true 21 | enable_mse_mpeg2ts_stream_parser = true 22 | enable_widevine = true 23 | enable_webrtc = true 24 | # rtc_use_h264 = true 25 | rtc_use_lto = true 26 | use_openh264 = true 27 | enable_hangout_services_extension = true 28 | # full_wpo_on_official = false 29 | chrome_pgo_phase = 0 30 | 31 | 32 | -------------------------------------------------------------------------------- /args.list: -------------------------------------------------------------------------------- 1 | aec_debug_dump Default = false 2 | //third_party/webrtc/modules/audio_processing/BUILD.gn:15 3 | Outputs some low-level debug files. 4 | 5 | aec_untrusted_delay_for_testing Default = false 6 | //third_party/webrtc/modules/audio_processing/BUILD.gn:20 7 | Disables the usual mode where we trust the reported system delay 8 | values the AEC receives. The corresponding define is set appropriately 9 | in the code, but it can be force-enabled here for testing. 10 | 11 | android_full_debug Default = false 12 | //build/config/compiler/BUILD.gn:29 13 | Normally, Android builds are lightly optimized, even for debug builds, to 14 | keep binary size down. Setting this flag to true disables such optimization 15 | 16 | android_java_ui Default = false 17 | //chrome/common/features.gni:15 18 | Whether the Java UI is being used (Java infobars and popups, Java native 19 | settings and first run experience, sign-in etc.). 20 | Default to true if compiling for android, but allow this being overriden 21 | through the environment. 22 | 23 | binutils_path Default = "../../third_party/binutils/Linux_x64/Release/bin" 24 | //build/config/compiler/BUILD.gn:36 25 | 26 | blink_asserts_off_in_release Default = false 27 | //third_party/WebKit/Source/config.gni:25 28 | If true, force blink asserts to be off in a release build. When false, 29 | blink asserts in release build may be controlled by DCHECK_ALWAYS_ON. 30 | 31 | blink_gc_plugin Default = true 32 | //third_party/WebKit/Source/config.gni:21 33 | Set to true to enable the clang plugin that checks the usage of the Blink 34 | garbage-collection infrastructure during compilation. 35 | 36 | build_with_libjingle Default = true 37 | //third_party/webrtc/build/webrtc.gni:14 38 | 39 | build_with_mozilla Default = false 40 | //third_party/webrtc/build/webrtc.gni:51 41 | Enable to use the Mozilla internal settings. 42 | 43 | chrome_pgo_phase Default = 0 44 | //chrome/BUILD.gn:29 45 | Specify the current PGO phase, only used for the Windows MSVS build. Here's 46 | the different values that can be used: 47 | 0 : Means that PGO is turned off. 48 | 1 : Used during the PGI (instrumentation) phase. 49 | 2 : Used during the PGO (optimization) phase. 50 | 51 | TODO(sebmarchand): Add support for the PGU (update) phase. 52 | 53 | cld2_table_size Default = 2 54 | //third_party/cld_2/BUILD.gn:11 55 | 56 | content_shell_product_name Default = "Content Shell" 57 | //content/shell/BUILD.gn:16 58 | 59 | content_shell_version Default = "99.77.34.5" 60 | //content/shell/BUILD.gn:17 61 | 62 | current_cpu Default = "" 63 | (Internally set) 64 | 65 | current_os Default = "" 66 | (Internally set) 67 | 68 | custom_toolchain Default = "" 69 | //build/config/BUILDCONFIG.gn:130 70 | Allows the path to a custom target toolchain to be injected as a single 71 | argument, and set as the default toolchain. 72 | 73 | dcheck_always_on Default = false 74 | //build/config/BUILD.gn:38 75 | Set to true to enable dcheck in Release builds. 76 | 77 | debug_devtools Default = false 78 | //build/config/features.gni:51 79 | If debug_devtools is set to true, JavaScript files for DevTools are stored 80 | as is and loaded from disk. Otherwise, a concatenated file is stored in 81 | resources.pak. It is still possible to load JS files from disk by passing 82 | --debug-devtools cmdline switch. 83 | 84 | disable_display Default = false 85 | //build/config/chromecast_build.gni:14 86 | Set this true for an audio-only Chromecast build. 87 | 88 | disable_file_support Default = false 89 | //net/BUILD.gn:46 90 | Disables support for file URLs. File URL support requires use of icu. 91 | 92 | disable_ftp_support Default = false 93 | //net/BUILD.gn:54 94 | 95 | dont_embed_build_metadata Default = true 96 | //build/config/BUILD.gn:35 97 | Set to true to not store any build metadata, e.g. ifdef out all __DATE__ 98 | and __TIME__. Set to 0 to reenable the use of these macros in the code 99 | base. See http://crbug.com/314403. 100 | 101 | Continue to embed build meta data in Official builds, basically the 102 | time it was built. 103 | TODO(maruel): This decision should be revisited because having an 104 | official deterministic build has high value too but MSVC toolset can't 105 | generate anything deterministic with WPO enabled AFAIK. 106 | 107 | enable_ac3_eac3_audio_demuxing Default = false 108 | //media/media_options.gni:55 109 | Enables AC3/EAC3 audio demuxing. This is enabled only on Chromecast, since 110 | it only provides demuxing, and is only useful for AC3/EAC3 audio 111 | pass-through to HDMI sink on Chromecast. 112 | 113 | enable_app_list Default = true 114 | //build/config/features.gni:79 115 | 116 | enable_autofill_dialog Default = true 117 | //build/config/features.gni:83 118 | 119 | enable_background Default = true 120 | //build/config/features.gni:69 121 | Enables support for background apps. 122 | 123 | enable_bidirectional_stream Default = false 124 | //net/BUILD.gn:49 125 | Enables BidirectionalStream; Used in cronet, disabled by default. 126 | 127 | enable_browser_cdms Default = false 128 | //build/config/features.gni:94 129 | Enables browser side Content Decryption Modules. Required for embedders 130 | (e.g. Android and ChromeCast) that use a browser side CDM. 131 | 132 | enable_captive_portal_detection Default = true 133 | //build/config/features.gni:71 134 | 135 | enable_configuration_policy Default = true 136 | //build/config/features.gni:66 137 | 138 | enable_debugallocation Default = true 139 | //base/allocator/BUILD.gn:16 140 | Provide a way to force disable debugallocation in Debug builds, 141 | e.g. for profiling (it's more rare to profile Debug builds, 142 | but people sometimes need to do that). 143 | 144 | enable_extensions Default = true 145 | //build/config/features.gni:28 146 | 147 | enable_full_stack_frames_for_profiling Default = false 148 | //build/config/compiler/BUILD.gn:44 149 | Compile in such a way as to make it possible for the profiler to unwind full 150 | stack frames. Setting this flag has a large effect on the performance of the 151 | generated code than just setting profiling, but gives the profiler more 152 | information to analyze. 153 | Requires profiling to be set to true. 154 | 155 | enable_google_now Default = true 156 | //chrome/common/features.gni:9 157 | 158 | enable_hangout_services_extension Default = false 159 | //build/config/features.gni:98 160 | Hangout services is an extension that adds extra features to Hangouts. 161 | For official GYP builds, this flag is set. 162 | 163 | enable_hevc_demuxing Default = false 164 | //media/media_options.gni:61 165 | Enable HEVC/H265 demuxing. Actual decoding must be provided by the 166 | platform. Enable by default for Chromecast. 167 | 168 | enable_hotwording Default = false 169 | //chrome/browser/BUILD.gn:28 170 | 'Ok Google' hotwording is disabled by default. Set to true to enable. (This 171 | will download a closed-source NaCl module at startup.) Chrome-branded 172 | ChromeOS builds have this enabled by default. 173 | 174 | enable_internal_app_remoting_targets Default = false 175 | //remoting/remoting_options.gni:13 176 | Set this to enable building internal AppRemoting apps. 177 | 178 | enable_iterator_debugging Default = true 179 | //build/config/BUILD.gn:24 180 | When set (the default) enables C++ iterator debugging in debug builds. 181 | Iterator debugging is always off in release builds (technically, this flag 182 | affects the "debug" config, which is always available but applied by 183 | default only in debug builds). 184 | 185 | Iterator debugging is generally useful for catching bugs. But it can 186 | introduce extra locking to check the state of an iterator against the state 187 | of the current object. For iterator- and thread-heavy code, this can 188 | significantly slow execution. 189 | 190 | enable_kasko Default = false 191 | //third_party/kasko/BUILD.gn:10 192 | Enable the Kasko crash reporter. Enabled by default on syzyasan build. 193 | 194 | enable_kasko_hang_reports Default = false 195 | //third_party/kasko/BUILD.gn:13 196 | Enable the reporting of browser hangs with Kasko. 197 | 198 | enable_mdns Default = true 199 | //build/config/features.gni:26 200 | Multicast DNS. 201 | 202 | enable_media_router Default = true 203 | //build/config/features.gni:58 204 | Enables the Media Router. 205 | 206 | enable_mojo_media Default = "none" 207 | //media/media_options.gni:69 208 | Experiment to enable mojo media application: http://crbug.com/431776 209 | Valid options are: 210 | - "none": Do not use mojo media application. 211 | - "browser": Use mojo media application hosted in the browser process. 212 | - "gpu": Use mojo media application hosted in the gpu process. 213 | - "utility": Use mojo media application hosted in the utility process. 214 | 215 | enable_mse_mpeg2ts_stream_parser Default = false 216 | //media/media_options.gni:57 217 | 218 | enable_nacl Default = true 219 | //build/config/features.gni:37 220 | Enables Native Client support. 221 | TODO(GYP): Get NaCl linking on other platforms. 222 | Also, see if we can always get rid of enable_nacl_untrusted and 223 | enable_pnacl and always build them if enable_nacl is true. 224 | Eventually we want this to be just the first line. 225 | 226 | enable_nacl_untrusted Default = "" 227 | //build/config/features.gni:44 228 | These default to the non-Boolean "" so that code below can default 229 | them to the explicitly-set value of enable_nacl, whereas initializing 230 | them here uses the default value of enable_nacl above and ignores any 231 | args.gn setting. 232 | 233 | enable_nocompile_tests Default = false 234 | //build/nocompile.gni:62 235 | TODO(crbug.com/105388): Disabled until http://crbug.com/105388 is resolved. 236 | 237 | enable_oilpan Default = false 238 | //third_party/WebKit/public/features.gni:7 239 | Enables the Oilpan garbage-collection infrastructure. 240 | 241 | enable_one_click_signin Default = true 242 | //build/config/features.gni:85 243 | 244 | enable_pdf Default = true 245 | //build/config/features.gni:30 246 | 247 | enable_plugin_installation Default = true 248 | //build/config/features.gni:77 249 | 250 | enable_plugins Default = true 251 | //build/config/features.gni:29 252 | 253 | enable_pnacl Default = "" 254 | //build/config/features.gni:45 255 | 256 | enable_profiling Default = false 257 | //build/config/compiler/compiler.gni:20 258 | Compile in such a way as to enable profiling of the generated code. For 259 | example, don't omit the frame pointer and leave in symbols. 260 | 261 | enable_remoting Default = true 262 | //build/config/features.gni:87 263 | 264 | enable_remoting_jscompile Default = false 265 | //remoting/remoting_options.gni:10 266 | Set this to run the jscompile checks after building the webapp. 267 | 268 | enable_resource_whitelist_generation Default = false 269 | //tools/grit/grit_rule.gni:88 270 | Enables used resource whitelist generation. 271 | 272 | enable_session_service Default = true 273 | //build/config/features.gni:75 274 | Enables use of the session service, which is enabled by default. 275 | Android stores them separately on the Java side. 276 | 277 | enable_supervised_users Default = true 278 | //build/config/features.gni:81 279 | 280 | enable_topchrome_md Default = true 281 | //build/config/ui.gni:52 282 | Indicates if material design elements in the top chrome of the browser are 283 | enabled. 284 | 285 | enable_video_hole Default = false 286 | //build/config/features.gni:90 287 | Enable hole punching for the protected video. 288 | 289 | enable_wayland_server Default = false 290 | //build/config/ui.gni:55 291 | Indicates if Wayland display server support is enabled. 292 | 293 | enable_webrtc Default = true 294 | //build/config/features.gni:55 295 | Enables WebRTC. 296 | TODO(GYP) make mac work. 297 | 298 | enable_websockets Default = true 299 | //net/BUILD.gn:53 300 | WebSockets and socket stream code are not used on iOS and are optional in 301 | cronet. 302 | 303 | enable_widevine Default = false 304 | //third_party/widevine/cdm/widevine.gni:7 305 | Allow widevinecdmadapter to be built in Chromium. 306 | 307 | enable_wifi_display Default = false 308 | //build/config/features.gni:120 309 | Enables Wi-Fi Display functionality 310 | 311 | ffmpeg_branding Default = "Chromium" 312 | //third_party/ffmpeg/ffmpeg_options.gni:29 313 | Controls whether we build the Chromium or Google Chrome version of FFmpeg. 314 | The Google Chrome version contains additional codecs. Typical values are 315 | Chromium, Chrome, ChromiumOS, and ChromeOS. 316 | 317 | fieldtrial_testing_like_official_build Default = false 318 | //build/config/features.gni:115 319 | Set to true make a build that disables activation of field trial tests 320 | specified in testing/variations/fieldtrial_testing_config_*.json. 321 | Note: this setting is ignored if is_chrome_branded. 322 | 323 | gold_path Default = false 324 | //build/config/compiler/BUILD.gn:53 325 | When we are going to use gold we need to find it. 326 | This is initialized below, after use_gold might have been overridden. 327 | 328 | goma_dir Default = "C:\goma\goma-win" 329 | //build/toolchain/goma.gni:17 330 | Absolute directory containing the Goma source code. 331 | 332 | google_api_key Default = "" 333 | //google_apis/BUILD.gn:45 334 | Set these to bake the specified API keys and OAuth client 335 | IDs/secrets into your build. 336 | 337 | If you create a build without values baked in, you can instead 338 | set environment variables to provide the keys at runtime (see 339 | src/google_apis/google_api_keys.h for details). Features that 340 | require server-side APIs may fail to work if no keys are 341 | provided. 342 | 343 | Note that if you are building an official build or if 344 | use_official_google_api_keys has been set to trie (explicitly or 345 | implicitly), these values will be ignored and the official 346 | keys will be used instead. 347 | 348 | google_default_client_id Default = "" 349 | //google_apis/BUILD.gn:48 350 | See google_api_key. 351 | 352 | google_default_client_secret Default = "" 353 | //google_apis/BUILD.gn:51 354 | See google_api_key. 355 | 356 | host_cpu Default = "x64" 357 | (Internally set) 358 | 359 | host_os Default = "win" 360 | (Internally set) 361 | 362 | host_toolchain Default = "" 363 | //build/config/BUILDCONFIG.gn:134 364 | This should not normally be set as a build argument. It's here so that 365 | every toolchain can pass through the "global" value via toolchain_args(). 366 | 367 | icu_use_data_file Default = true 368 | //third_party/icu/config.gni:15 369 | Tells icu to load an external data file rather than rely on the icudata 370 | being linked directly into the binary. 371 | 372 | This flag is a bit confusing. As of this writing, icu.gyp set the value to 373 | 0 but common.gypi sets the value to 1 for most platforms (and the 1 takes 374 | precedence). 375 | 376 | TODO(GYP) We'll probably need to enhance this logic to set the value to 377 | true or false in similar circumstances. 378 | 379 | internal_gles2_conform_tests Default = false 380 | //gpu/gles2_conform_support/BUILD.gn:7 381 | Set to true to compile with the OpenGL ES 2.0 conformance tests. 382 | 383 | ios_use_webrtc Default = false 384 | //build_overrides/webrtc.gni:19 385 | TODO(dpranke): This is a hack needed to get iOS to build w/ a 386 | patched version of WebRTC so that we can access the xmllite 387 | library. Remove this once we've figured out how to get WebRTC building 388 | properly. 389 | 390 | is_asan Default = false 391 | //build/config/sanitizers/sanitizers.gni:7 392 | Compile for Address Sanitizer to find memory bugs. 393 | 394 | is_cast_desktop_build Default = false 395 | //build/config/chromecast_build.gni:26 396 | True if Chromecast build is targeted for linux desktop. This type of build 397 | is useful for testing and development, but currently supports only a subset 398 | of Cast functionality. Though this defaults to true for x86 Linux devices, 399 | this should be overriden manually for an embedded x86 build. 400 | TODO(slan): Remove instances of this when x86 is a fully supported platform. 401 | 402 | is_cfi Default = false 403 | //build/config/sanitizers/sanitizers.gni:42 404 | Compile with Control Flow Integrity to protect virtual calls and casts. 405 | See http://clang.llvm.org/docs/ControlFlowIntegrity.html 406 | 407 | is_chrome_branded Default = false 408 | //build/config/chrome_build.gni:14 409 | Select the desired branding flavor. False means normal Chromium branding, 410 | true means official Google Chrome branding (requires extra Google-internal 411 | resources). 412 | 413 | is_chromecast Default = false 414 | //build/config/chromecast_build.gni:11 415 | Set this true for a Chromecast build. Chromecast builds are supported on 416 | Linux and Android. 417 | 418 | is_clang Default = false 419 | //build/config/BUILDCONFIG.gn:125 420 | Set to true when compiling with the Clang compiler. Typically this is used 421 | to configure warnings. 422 | 423 | is_component_build Default = false 424 | //build/config/BUILDCONFIG.gn:115 425 | Component build. 426 | 427 | is_component_ffmpeg Default = false 428 | //third_party/ffmpeg/ffmpeg_options.gni:36 429 | Set true to build ffmpeg as a shared library. NOTE: this means we should 430 | always consult is_component_ffmpeg instead of is_component_build for 431 | ffmpeg targets. This helps linux chromium packagers that swap out our 432 | ffmpeg.so with their own. See discussion here 433 | https://groups.google.com/a/chromium.org/forum/#!msg/chromium-packagers/R5rcZXWxBEQ/B6k0zzmJbvcJ 434 | 435 | is_debug Default = true 436 | //build/config/BUILDCONFIG.gn:118 437 | Debug build. 438 | 439 | is_desktop_linux Default = false 440 | //build/config/BUILDCONFIG.gn:121 441 | Whether we're a traditional desktop unix. 442 | 443 | is_headless Default = false 444 | //build/config/headless_build.gni:7 445 | Configure the build for headless mode. See crbug.com/546953. 446 | 447 | is_lsan Default = false 448 | //build/config/sanitizers/sanitizers.gni:10 449 | Compile for Leak Sanitizer to find leaks. 450 | 451 | is_msan Default = false 452 | //build/config/sanitizers/sanitizers.gni:13 453 | Compile for Memory Sanitizer to find uninitialized reads. 454 | 455 | is_multi_dll_chrome Default = true 456 | //build/config/chrome_build.gni:18 457 | Break chrome.dll into multple pieces based on process type. Only available 458 | on Windows. 459 | 460 | is_nacl_glibc Default = false 461 | //build/config/nacl/config.gni:11 462 | Native Client supports both Newlib and Glibc C libraries where Newlib 463 | is assumed to be the default one; use this to determine whether Glibc 464 | is being used instead. 465 | 466 | is_official_build Default = false 467 | //build/config/chrome_build.gni:9 468 | Selects the desired build flavor. Official builds get additional 469 | processing to prepare for release. Normally you will want to develop and 470 | test with this flag off. 471 | 472 | is_openbsd Default = false 473 | //media/media_options.gni:72 474 | TODO(GYP): This should be a platform define. 475 | 476 | is_syzyasan Default = false 477 | //build/config/sanitizers/sanitizers.gni:38 478 | Enable building with SyzyAsan which can find certain types of memory 479 | errors. Only works on Windows. See 480 | https://code.google.com/p/sawbuck/wiki/SyzyASanHowTo 481 | 482 | is_tsan Default = false 483 | //build/config/sanitizers/sanitizers.gni:16 484 | Compile for Thread Sanitizer to find threading bugs. 485 | 486 | is_ubsan Default = false 487 | //build/config/sanitizers/sanitizers.gni:20 488 | Compile for Undefined Behaviour Sanitizer to find various types of 489 | undefined behaviour (excludes vptr checks). 490 | 491 | is_ubsan_vptr Default = false 492 | //build/config/sanitizers/sanitizers.gni:23 493 | Compile for Undefined Behaviour Sanitizer's vptr checks. 494 | 495 | is_win_fastlink Default = false 496 | //build/config/win/visual_studio_version.gni:24 497 | 498 | link_pulseaudio Default = false 499 | //media/media_options.gni:13 500 | Allows distributions to link pulseaudio directly (DT_NEEDED) instead of 501 | using dlopen. This helps with automated detection of ABI mismatches and 502 | prevents silent errors. 503 | 504 | linux_use_bundled_binutils Default = false 505 | //build/config/compiler/BUILD.gn:35 506 | Whether to use the binary binutils checked into third_party/binutils. 507 | These are not multi-arch so cannot be used except on x86 and x86-64 (the 508 | only two architectures that are currently checked in). Turn this off when 509 | you are using a custom toolchain and need to control -B in cflags. 510 | 511 | mac_views_browser Default = false 512 | //build/config/ui.gni:39 513 | Whether the entire browser uses toolkit-views on Mac instead of Cocoa. 514 | 515 | media_use_ffmpeg Default = true 516 | //media/media_options.gni:18 517 | Enable usage of FFmpeg within the media library. Used for most software 518 | based decoding, demuxing, and sometimes optimized FFTs. If disabled, 519 | implementors must provide their own demuxers and decoders. 520 | 521 | media_use_libvpx Default = true 522 | //media/media_options.gni:22 523 | Enable usage of libvpx within the media library. Used for software based 524 | decoding of VP9 and VP8A type content. 525 | 526 | msan_track_origins Default = 2 527 | //build/config/sanitizers/sanitizers.gni:28 528 | Track where uninitialized memory originates from. From fastest to slowest: 529 | 0 - no tracking, 1 - track only the initial allocation site, 2 - track the 530 | chain of stores leading from allocation site to use site. 531 | 532 | msvs_xtree_patched Default = false 533 | //build/config/compiler/BUILD.gn:71 534 | Whether the VS xtree header has been patched to disable warning 4702. If 535 | it has, then we don't need to disable 4702 (unreachable code warning). 536 | The patch is preapplied to the internal toolchain and hence all bots. 537 | 538 | openmax_big_float_fft Default = true 539 | //third_party/openmax_dl/dl/BUILD.gn:10 540 | Override this value to build with small float FFT tables 541 | 542 | ozone_auto_platforms Default = true 543 | //ui/ozone/ozone.gni:9 544 | Select platforms automatically. Turn this off for manual control. 545 | 546 | ozone_platform Default = "headless" 547 | //ui/ozone/ozone.gni:34 548 | Use headless as the default platform. 549 | 550 | ozone_platform_caca Default = false 551 | //ui/ozone/ozone.gni:24 552 | Enable individual platforms. 553 | 554 | ozone_platform_cast Default = false 555 | //ui/ozone/ozone.gni:25 556 | 557 | ozone_platform_egltest Default = true 558 | //ui/ozone/ozone.gni:61 559 | Build all platforms whose deps are in install-build-deps.sh. 560 | Only these platforms will be compile tested by buildbots. 561 | 562 | ozone_platform_gbm Default = false 563 | //ui/ozone/ozone.gni:27 564 | 565 | ozone_platform_headless Default = true 566 | //ui/ozone/ozone.gni:35 567 | 568 | ozone_platform_ozonex Default = false 569 | //ui/ozone/ozone.gni:28 570 | 571 | ozone_platform_x11 Default = false 572 | //ui/ozone/ozone.gni:30 573 | 574 | pdf_enable_v8 Default = true 575 | //third_party/pdfium/pdfium.gni:13 576 | Build PDFium either with or without v8 support. 577 | 578 | pdf_enable_xfa Default = false 579 | //third_party/pdfium/pdfium.gni:16 580 | Build PDFium either with or without XFA Forms support. 581 | 582 | pdf_use_skia Default = false 583 | //third_party/pdfium/pdfium.gni:19 584 | Build PDFium against skia (experimental) rather than agg. 585 | 586 | pdfium_bundle_freetype Default = true 587 | //third_party/pdfium/pdfium.gni:10 588 | On Android there's no system FreeType. On Windows and Mac, only a few 589 | methods are used from it. 590 | 591 | pkg_config Default = "" 592 | //build/config/linux/pkg_config.gni:33 593 | A pkg-config wrapper to call instead of trying to find and call the right 594 | pkg-config directly. Wrappers like this are common in cross-compilation 595 | environments. 596 | Leaving it blank defaults to searching PATH for 'pkg-config' and relying on 597 | the sysroot mechanism to find the right .pc files. 598 | 599 | proprietary_codecs Default = false 600 | //build/config/features.gni:64 601 | Enables proprietary codecs and demuxers; e.g. H264, MOV, AAC, and MP3. 602 | Android OS includes support for proprietary codecs regardless of building 603 | Chromium or Google Chrome. We also ship Google Chrome and Chromecast with 604 | proprietary codecs. 605 | 606 | repack_whitelist Default = "" 607 | //tools/grit/repack.gni:8 608 | Absolute path to a resource whitelist (generated using 609 | //tools/resources/find_used_resources.py). 610 | 611 | root_extra_deps Default = [] 612 | //BUILD.gn:27 613 | A list of extra dependencies to add to the root target. This allows a 614 | checkout to add additional targets without explicitly changing any checked- 615 | in files. 616 | 617 | rtc_build_expat Default = true 618 | //third_party/webrtc/build/webrtc.gni:38 619 | Disable these to not build components which can be externally provided. 620 | 621 | rtc_build_json Default = true 622 | //third_party/webrtc/build/webrtc.gni:39 623 | 624 | rtc_build_libjpeg Default = true 625 | //third_party/webrtc/build/webrtc.gni:40 626 | 627 | rtc_build_libvpx Default = true 628 | //third_party/webrtc/build/webrtc.gni:41 629 | 630 | rtc_build_libyuv Default = true 631 | //third_party/webrtc/build/webrtc.gni:42 632 | 633 | rtc_build_openmax_dl Default = true 634 | //third_party/webrtc/build/webrtc.gni:43 635 | 636 | rtc_build_opus Default = true 637 | //third_party/webrtc/build/webrtc.gni:44 638 | 639 | rtc_build_ssl Default = true 640 | //third_party/webrtc/build/webrtc.gni:45 641 | 642 | rtc_build_with_neon Default = false 643 | //third_party/webrtc/build/webrtc.gni:87 644 | 645 | rtc_enable_android_opensl Default = false 646 | //third_party/webrtc/build/webrtc.gni:53 647 | 648 | rtc_enable_data_logging Default = false 649 | //third_party/webrtc/build/webrtc.gni:32 650 | Enable data logging. Produces text files with data logged within engines 651 | which can be easily parsed for offline processing. 652 | 653 | rtc_enable_protobuf Default = true 654 | //third_party/webrtc/build/webrtc.gni:35 655 | Enables the use of protocol buffers for debug recordings. 656 | 657 | rtc_have_dbus_glib Default = false 658 | //third_party/webrtc/build/webrtc.gni:48 659 | Disable by default. 660 | 661 | rtc_include_opus Default = true 662 | //third_party/webrtc/build/webrtc.gni:17 663 | Disable this to avoid building the Opus audio codec. 664 | 665 | rtc_include_tests Default = false 666 | //third_party/webrtc/build/webrtc.gni:61 667 | 668 | rtc_jsoncpp_root Default = "//third_party/jsoncpp/source/include" 669 | //third_party/webrtc/build/webrtc.gni:21 670 | Used to specify an external Jsoncpp include path when not compiling the 671 | library that comes with WebRTC (i.e. rtc_build_json == 0). 672 | 673 | rtc_prefer_fixed_point Default = false 674 | //third_party/webrtc/build/webrtc.gni:28 675 | Selects fixed-point code where possible. 676 | 677 | rtc_restrict_logging Default = true 678 | //third_party/webrtc/build/webrtc.gni:62 679 | 680 | rtc_ssl_root Default = "" 681 | //third_party/webrtc/build/webrtc.gni:25 682 | Used to specify an external OpenSSL include path when not compiling the 683 | library that comes with WebRTC (i.e. rtc_build_ssl == 0). 684 | 685 | rtc_use_lto Default = false 686 | //third_party/webrtc/build/webrtc.gni:58 687 | Link-Time Optimizations. 688 | Executes code generation at link-time instead of compile-time. 689 | https://gcc.gnu.org/wiki/LinkTimeOptimization 690 | 691 | rtc_use_objc_h264 Default = false 692 | //third_party/webrtc/build/webrtc.gni:92 693 | Enable this to use HW H.264 encoder/decoder on iOS PeerConnections. 694 | Enabling this may break interop with Android clients that support H264. 695 | 696 | rtc_use_openmax_dl Default = true 697 | //third_party/webrtc/build/webrtc.gni:80 698 | 699 | safe_browsing_mode Default = 1 700 | //build/config/features.gni:109 701 | 702 | symbol_level Default = -1 703 | //build/config/compiler/compiler.gni:16 704 | How many symbols to include in the build. This affects the performance of 705 | the build since the symbols are large and dealing with them is slow. 706 | 2 means regular build with symbols. 707 | 1 means minimal symbols, usually enough for backtraces only. 708 | 0 means no symbols. 709 | -1 means auto-set according to debug/release and platform. 710 | 711 | system_libdir Default = "lib" 712 | //build/config/linux/pkg_config.gni:44 713 | CrOS systemroots place pkgconfig files at /usr/share/pkgconfig 714 | and one of /usr/lib/pkgconfig or /usr/lib64/pkgconfig 715 | depending on whether the systemroot is for a 32 or 64 bit architecture. 716 | 717 | When build under GYP, CrOS board builds specify the 'system_libdir' variable 718 | as part of the GYP_DEFINES provided by the CrOS emerge build or simple 719 | chrome build scheme. This variable permits controlling this for GN builds 720 | in similar fashion by setting the `system_libdir` variable in the build's 721 | args.gn file to 'lib' or 'lib64' as appropriate for the target architecture. 722 | 723 | syzygy_optimize Default = false 724 | //chrome/tools/build/win/syzygy/BUILD.gn:13 725 | 726 | target_cpu Default = "" 727 | (Internally set) 728 | 729 | target_os Default = "" 730 | (Internally set) 731 | 732 | target_sysroot Default = "" 733 | //build/config/sysroot.gni:13 734 | The absolute path of the sysroot that is applied when compiling using 735 | the target toolchain. 736 | 737 | toolkit_views Default = true 738 | //build/config/ui.gni:36 739 | 740 | treat_warnings_as_errors Default = true 741 | //build/config/compiler/BUILD.gn:25 742 | Default to warnings as errors for default workflow, where we catch 743 | warnings with known toolchains. Allow overriding this e.g. for Chromium 744 | builds on Linux that could use a different version of the compiler. 745 | 746 | use_allocator Default = "none" 747 | //build/config/allocator.gni:16 748 | Memory allocator to use. Set to "none" to use default allocator. 749 | 750 | use_alsa Default = true 751 | //media/media_options.gni:43 752 | 753 | use_ash Default = true 754 | //build/config/ui.gni:23 755 | Indicates if Ash is enabled. Ash is the Aura Shell which provides a 756 | desktop-like environment for Aura. Requires use_aura = true 757 | 758 | use_aura Default = true 759 | //build/config/ui.gni:32 760 | Indicates if Aura is enabled. Aura is a low-level windowing library, sort 761 | of a replacement for GDI or GTK. 762 | 763 | use_ccache Default = false 764 | //build/toolchain/ccache.gni:24 765 | Set to true to enable ccache. Probably doesn't work on windows. 766 | 767 | use_cfi_diag Default = false 768 | //build/config/sanitizers/sanitizers.gni:46 769 | By default, Control Flow Integrity will crash the program if it detects a 770 | violation. Set this to true to print detailed diagnostics instead. 771 | 772 | use_cras Default = false 773 | //media/media_options.gni:31 774 | Override to dynamically link the cras (ChromeOS audio) library. 775 | 776 | use_cups Default = false 777 | //build/config/features.gni:117 778 | 779 | use_custom_libcxx Default = false 780 | //build/config/sanitizers/sanitizers.gni:65 781 | 782 | use_debug_fission Default = "default" 783 | //build/config/compiler/BUILD.gn:65 784 | use_debug_fission: whether to use split DWARF debug info 785 | files. This can reduce link time significantly, but is incompatible 786 | with some utilities such as icecc and ccache. Requires gold and 787 | gcc >= 4.8 or clang. 788 | http://gcc.gnu.org/wiki/DebugFission 789 | 790 | This is a placeholder value indicating that the code below should set 791 | the default. This is necessary to delay the evaluation of the default 792 | value expression until after its input values such as use_gold have 793 | been set, e.g. by a toolchain_args() block. 794 | 795 | use_drfuzz Default = false 796 | //build/config/sanitizers/sanitizers.gni:54 797 | Compile for fuzzing with Dr. Fuzz 798 | See http://www.chromium.org/developers/testing/dr-fuzz 799 | 800 | use_evdev_gestures Default = false 801 | //ui/events/ozone/BUILD.gn:11 802 | Support ChromeOS touchpad gestures with ozone. 803 | 804 | use_glib Default = false 805 | //build/config/ui.gni:48 806 | Whether we should use glib, a low level C utility library. 807 | 808 | use_gold Default = false 809 | //build/config/compiler/BUILD.gn:49 810 | TODO(GYP): We should be using 64-bit gold for linking on both 64-bit Linux 811 | and 32-bit linux; 32-bit Gold runs out of address-space on 32-bit builds. 812 | However, something isn't quite working right on the 32-bit builds. 813 | 814 | use_goma Default = false 815 | //build/toolchain/goma.gni:12 816 | Set to true to enable distributed compilation using Goma. 817 | 818 | use_gtk3 Default = false 819 | //build/config/ui.gni:42 820 | Whether we should use GTKv3 instead of GTKv2. 821 | 822 | use_libfuzzer Default = false 823 | //build/config/sanitizers/sanitizers.gni:50 824 | Compile for fuzzing with LLVM LibFuzzer. 825 | See http://www.chromium.org/developers/testing/libfuzzer 826 | 827 | use_libjpeg_turbo Default = true 828 | //third_party/BUILD.gn:15 829 | Uses libjpeg_turbo as the jpeg implementation. Has no effect if 830 | use_system_libjpeg is set. 831 | 832 | use_libpci Default = true 833 | //gpu/config/BUILD.gn:10 834 | Use the PCI lib to collect GPU information on Linux. 835 | 836 | use_low_memory_buffer Default = false 837 | //media/media_options.gni:50 838 | Use low-memory buffers on non-Android builds of Chromecast. 839 | 840 | use_official_google_api_keys Default = "" 841 | //google_apis/BUILD.gn:30 842 | You can set the variable 'use_official_google_api_keys' to true 843 | to use the Google-internal file containing official API keys 844 | for Google Chrome even in a developer build. Setting this 845 | variable explicitly to true will cause your build to fail if the 846 | internal file is missing. 847 | 848 | The variable is documented here, but not handled in this file; 849 | see //google_apis/determine_use_official_keys.gypi for the 850 | implementation. 851 | 852 | Set the variable to false to not use the internal file, even when 853 | it exists in your checkout. 854 | 855 | Leave it unset or set to "" to have the variable 856 | implicitly set to true if you have 857 | src/google_apis/internal/google_chrome_api_keys.h in your 858 | checkout, and implicitly set to false if not. 859 | 860 | Note that official builds always behave as if the variable 861 | was explicitly set to true, i.e. they always use official keys, 862 | and will fail to build if the internal file is missing. 863 | 864 | use_openh264 Default = false 865 | //third_party/openh264/openh264_args.gni:11 866 | Enable this to build OpenH264 (for encoding, not decoding). 867 | CHECK THE OPENH264 LICENSE/PATENT BEFORE BUILDING, see 868 | http://www.openh264.org/. 869 | 870 | use_openssl Default = true 871 | //build/config/crypto.gni:17 872 | Use OpenSSL instead of NSS. This is used for all platforms but iOS. (See 873 | http://crbug.com/338886). 874 | 875 | use_ozone Default = false 876 | //build/config/ui.gni:28 877 | Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux 878 | that does not require X11. Enabling this feature disables use of glib, x11, 879 | Pango, and Cairo. Default to false on non-Chromecast builds. 880 | 881 | use_prebuilt_instrumented_libraries Default = false 882 | //build/config/sanitizers/sanitizers.gni:33 883 | Use dynamic libraries instrumented by one of the sanitizers instead of the 884 | standard system libraries. Set this flag to download prebuilt binaries from 885 | GCS. 886 | 887 | use_pulseaudio Default = true 888 | //media/media_options.gni:45 889 | 890 | use_sanitizer_coverage Default = false 891 | //build/config/sanitizers/sanitizers.gni:67 892 | 893 | use_srtp_boringssl Default = true 894 | //third_party/libsrtp/BUILD.gn:7 895 | 896 | use_sysroot Default = true 897 | //build/config/sysroot.gni:14 898 | 899 | use_system_harfbuzz Default = false 900 | //third_party/harfbuzz-ng/BUILD.gn:23 901 | 902 | use_system_libjpeg Default = false 903 | //third_party/BUILD.gn:11 904 | Uses system libjpeg. If true, overrides use_libjpeg_turbo. 905 | 906 | use_system_libsrtp Default = false 907 | //third_party/libsrtp/BUILD.gn:6 908 | 909 | use_system_sqlite Default = false 910 | //third_party/sqlite/BUILD.gn:9 911 | Controls whether the build should uses the version of sqlite3 library 912 | shipped with the system (currently only supported on iOS) or the one 913 | shipped with Chromium source. 914 | 915 | use_third_party_h264 Default = false 916 | //third_party/webrtc/build/webrtc.gni:103 917 | Enable this to build H.264 encoder/decoder using third party libraries. 918 | Encoding uses OpenH264 and decoding uses FFmpeg. Because of this, OpenH264 919 | and FFmpeg have to be correctly enabled separately. 920 | - use_openh264=true is required for OpenH264 targets to be defined. 921 | - ffmpeg_branding="Chrome" is one way to support H.264 decoding in FFmpeg. 922 | FFmpeg can be built with/without H.264 support, see 'ffmpeg_branding'. 923 | Without it, it compiles but H264DecoderImpl fails to initialize. 924 | CHECK THE OPENH264, FFMPEG AND H.264 LICENSES/PATENTS BEFORE BUILDING. 925 | http://www.openh264.org, https://www.ffmpeg.org/ 926 | 927 | use_unofficial_version_number Default = true 928 | //components/version_info/BUILD.gn:15 929 | 930 | use_v4l2_codec Default = false 931 | //content/common/common.gni:21 932 | Indicates if Video4Linux2 codec is used. This is used for all CrOS 933 | platforms which have v4l2 hardware encoder / decoder. 934 | 935 | use_v4lplugin Default = false 936 | //content/common/common.gni:17 937 | Indicates if V4L plugin is used. 938 | 939 | use_vgem_map Default = false 940 | //ui/ozone/ozone.gni:16 941 | This enables memory-mapped access to accelerated graphics buffers via the 942 | VGEM ("virtual GEM") driver. This is currently only available on Chrome OS 943 | kernels and affects code in the GBM ozone platform. 944 | TODO(dshwang): remove this flag when all gbm hardware supports vgem map. 945 | crbug.com/519587 946 | 947 | use_vulcanize Default = true 948 | //chrome/common/features.gni:19 949 | Use vulcanized HTML/CSS/JS resources to speed up WebUI (chrome://) 950 | pages. https://github.com/polymer/vulcanize 951 | 952 | use_xkbcommon Default = false 953 | //build/config/ui.gni:45 954 | Optional system libraries. 955 | 956 | v8_use_snapshot Default = true 957 | //v8/BUILD.gn:23 958 | Enable the snapshot feature, for fast context creation. 959 | http://v8project.blogspot.com/2015/09/custom-startup-snapshots.html 960 | 961 | visual_studio_path Default = "" 962 | //build/config/win/visual_studio_version.gni:9 963 | Path to Visual Studio. If empty, the default is used which is to use the 964 | automatic toolchain in depot_tools. If set, you must also set the 965 | visual_studio_version and wdk_path. 966 | 967 | visual_studio_version Default = "" 968 | //build/config/win/visual_studio_version.gni:13 969 | Version of Visual Studio pointed to by the visual_studio_path. 970 | Use "2013" for Visual Studio 2013, or "2013e" for the Express version. 971 | 972 | wdk_path Default = "" 973 | //build/config/win/visual_studio_version.gni:17 974 | Directory of the Windows driver kit. If visual_studio_path is empty, this 975 | will be auto-filled. 976 | 977 | win_console_app Default = false 978 | //chrome/BUILD.gn:20 979 | If true, builds as a console app (rather than a windowed app), which allows 980 | logging to be printed to the user. This will cause a terminal window to pop 981 | up when Chrome is not run from the command line, so should only be used for 982 | development. Only has an effect on Windows builds. 983 | 984 | windows_sdk_path Default = "C:\Program Files (x86)\Windows Kits\10" 985 | //build/config/win/visual_studio_version.gni:22 986 | Full path to the Windows SDK, not including a backslash at the end. 987 | This value is the default location, override if you have a different 988 | installation location. 989 | 990 | -------------------------------------------------------------------------------- /build.env: -------------------------------------------------------------------------------- 1 | depot_tools revision: b8c535f696faf93835aa1fe7b99e00cbdc6d5a79 2 | 3 | MSVS version: 2013 with update 5 OR 2015 with update 3 4 | 5 | WinSDK version: 10.0.10586.212 6 | 7 | Chromium commit: tags/49.0.2623.112 4ec79b7f2379a60cdc15599e93255c0fa417f1ed 8 | -------------------------------------------------------------------------------- /chromium.gyp_env: -------------------------------------------------------------------------------- 1 | { 2 | 'GYP_MSVS_VERSION': '2015', 3 | 'GYP_DEFINES': 'buildtype=Official proprietary_codecs=1 fastbuild=2 remove_webcore_debug_symbols=1 ffmpeg_branding=Chrome enable_widevine=1 is_official_build=1 is_debug=0 dcheck_always_on=0 symbol_level=0 fieldtrial_testing_like_official_build=1 enable_hevc_demuxing=1 enable_webrtc=1 use_lto=1 use_lto_o2=1 rtc_use_lto=1 use_openh264=1 enable_webvr=1 enable_hangout_services_extension=1 enable_ac3_eac3_audio_demuxing=1 enable_mse_mpeg2ts_stream_parser=1 enable_iterator_debugging=0 enable_hotwording=0 enable_google_now=1 google_api_key=AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw google_default_client_id=77185425430.apps.googleusercontent.com google_default_client_secret=OTJgUOQcT7lO7GsGZq2G4IlT' 4 | } 5 | -------------------------------------------------------------------------------- /depot_tools.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/depot_tools.zip -------------------------------------------------------------------------------- /docs/NOTES.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | - Backport M54 patches like Advanced Chrome 4 | - re-add d3dcompiler_43.dll for hardware GPU acceleration 5 | - Add repo wide LTO flags like modern Chromium 6 | - Google Sync 7 | - Convert user32.dll exports to GN 8 | 9 | ## NOTES 10 | 11 | 1. https://web.archive.org/web/20170921145326/http://browser.taokaizen.com/build.html 12 | 2. https://web.archive.org/web/20210914003606/https://github.com/henrypp/chromium 13 | -------------------------------------------------------------------------------- /docs/args.gn.bak: -------------------------------------------------------------------------------- 1 | #NOSYNC 2 | 3 | enable_ac3_eac3_audio_demuxing = true 4 | enable_google_now = false 5 | enable_hevc_demuxing = true 6 | enable_hotwording = false 7 | enable_iterator_debugging = false 8 | enable_mse_mpeg2ts_stream_parser = true 9 | enable_nacl = true 10 | ffmpeg_branding = "Chrome" 11 | is_component_build = false 12 | is_debug = false 13 | proprietary_codecs = true 14 | remove_webcore_debug_symbols = true 15 | symbol_level = 0 16 | target_cpu = "x64" 17 | enable_remoting = false 18 | enable_webrtc = false 19 | google_api_key = "no" 20 | google_default_client_id = "no" 21 | google_default_client_secret = "no" 22 | rtc_use_h264 = false 23 | rtc_use_lto = false 24 | use_official_google_api_keys = false 25 | use_openh264 = false 26 | chrome_pgo_phase = 0 27 | full_wpo_on_official = false 28 | is_official_build = true 29 | #SYNC 30 | 31 | enable_ac3_eac3_audio_demuxing = true 32 | enable_google_now = false 33 | enable_hevc_demuxing = true 34 | enable_hotwording = false 35 | enable_iterator_debugging = false 36 | enable_mse_mpeg2ts_stream_parser = true 37 | enable_nacl = true 38 | ffmpeg_branding = "Chrome" 39 | is_component_build = false 40 | is_debug = false 41 | proprietary_codecs = true 42 | remove_webcore_debug_symbols = true 43 | symbol_level = 0 44 | target_cpu = "x64" 45 | enable_hangout_services_extension = true 46 | enable_webrtc = true 47 | enable_widevine = true 48 | rtc_use_h264 = true 49 | rtc_use_lto = true 50 | use_official_google_api_keys = true 51 | use_openh264 = true 52 | chrome_pgo_phase = 0 53 | full_wpo_on_official = false 54 | is_official_build = true 55 | ##This is WPO build, it's require around 60GB of free space per build! 56 | -------------------------------------------------------------------------------- /docs/win2K.md: -------------------------------------------------------------------------------- 1 | # Using Windows XP builds of Chromium (and Firefox) on Windows 2000 2 | 3 | The last version of Chromium for XP was 49.0.2623.112 and the last 4 | Firefox version for XP was ESR 52.9.0. These versions can also be used 5 | on Windows 2000, however, you will need some updates and patches to do so. 6 | 7 | 1. Service Pack 4 (the latest) 8 | 2. MSU Update Rollup 4 9 | 3. BlackWingCat's Extended Kernel Patch 10 | 4. Updated Root Certificates 11 | -------------------------------------------------------------------------------- /docs/windows_build_instructions.md: -------------------------------------------------------------------------------- 1 | # Windows Build Instructions 2 | 3 | ## Common checkout instructions 4 | 5 | This page covers Windows-specific setup and configuration. The 6 | [general checkout 7 | instructions](https://web.archive.org/web/20160414155322/https://www.chromium.org/developers/how-tos/get-the-code) cover 8 | installing depot tools and checking out the code via git. 9 | 10 | ## Setting up Windows 11 | 12 | You must set your Windows system locale to English, or else you may get 13 | build errors about "The file contains a character that cannot be 14 | represented in the current code page." 15 | 16 | ### Setting up the environment for Visual Studio 17 | 18 | You must build with Visual Studio 2015 Update 2; no other version is 19 | supported. 20 | 21 | You must have Windows 7 x64 or later. x86 OSs are unsupported. 22 | 23 | ## Getting the compiler toolchain 24 | 25 | Follow the appropriate path below: 26 | 27 | ### Open source contributors 28 | 29 | Install Visual Studio 2015 Update 2 or later OR Visual Studio 2015 Update 4 or later. 30 | Community Edition should work if its license is appropriate for you. 31 | Use the Custom Install option and select: 32 | 33 | - Visual C++, which will select three sub-categories including MFC 34 | - Universal Windows Apps Development Tools > Tools 35 | - Universal Windows Apps Development Tools > Windows 10 SDK (10.0.10586) 36 | 37 | You must have the 10586 SDK installed or else you will hit compile errors such 38 | as redefined macros. 39 | 40 | Install Windows Driver Kit (WDK) 10, or use some other method to get the 41 | Debugging Tools for Windows. 42 | 43 | Run `set DEPOT_TOOLS_WIN_TOOLCHAIN=0`, or set that variable in your 44 | global environment. 45 | 46 | Compilation is done through ninja, **not** Visual Studio. 47 | 48 | ### Google employees 49 | 50 | Run: `download_from_google_storage --config` and follow the 51 | authentication instructions. **Note that you must authenticate with your 52 | @google.com credentials**, not @chromium.org. Enter "0" if asked for a 53 | project-id. 54 | 55 | Run: `gclient sync` again to download and install the toolchain automatically. 56 | 57 | The toolchain will be in `depot_tools\win_toolchain\vs_files\`, and windbg 58 | can be found in `depot_tools\win_toolchain\vs_files\\win_sdk\Debuggers`. 59 | 60 | If you want the IDE for debugging and editing, you will need to install 61 | it separately, but this is optional and not needed to build Chromium. 62 | 63 | ## Using the Visual Studio IDE 64 | 65 | If you want to use the Visual Studio IDE, use the `--ide` command line 66 | argument to `gn gen` when you generate your output directory (as described on 67 | the [get the code](https://web.archive.org/web/20160414155322/https://www.chromium.org/developers/how-tos/get-the-code) 68 | page): 69 | 70 | ```gn gen --ide=vs out\Default 71 | devenv out\Default\all.sln 72 | ``` 73 | 74 | GN will produce a file `all.sln` in your build directory. It will internally 75 | use Ninja to compile while still allowing most IDE functions to work (there is 76 | no native Visual Studio compilation mode). If you manually run "gen" again you 77 | will need to resupply this argument, but normally GN will keep the build and 78 | IDE files up to date automatically when you build. 79 | 80 | The generated solution will contain several thousand projects and will be very 81 | slow to load. Use the `--filters` argument to restrict generating project files 82 | for only the code you're interested in, although this will also limit what 83 | files appear in the project explorer. A minimal solution that will let you 84 | compile and run Chrome in the IDE but will not show any source files is: 85 | 86 | ```gn gen --ide=vs --filters=//chrome out\Default``` 87 | 88 | There are other options for controlling how the solution is generated, run `gn 89 | help gen` for the current documentation. 90 | 91 | ## Performance tips 92 | 93 | 1. Have a lot of fast CPU cores and enough RAM to keep them all busy. 94 | (Minimum recommended is 4-8 fast cores and 16-32 GB of RAM) 95 | 2. Reduce file system overhead by excluding build directories from 96 | antivirus and indexing software. 97 | 3. Store the build tree on a fast disk (preferably SSD). 98 | 4. If you are primarily going to be doing debug development builds, you 99 | should use the component build. Set the [build 100 | arg](https://web.archive.org/web/20160501005453/https://www.chromium.org/developers/gn-build-configuration) 101 | `is_component_build = true`. 102 | This will generate many DLLs and enable incremental linking, which makes 103 | linking **much** faster in Debug. 104 | 105 | Still, expect build times of 30 minutes to 2 hours when everything has to 106 | be recompiled. 107 | -------------------------------------------------------------------------------- /infra/Extensions/external_extensions.json: -------------------------------------------------------------------------------- 1 | // This json file will contain a list of extensions that will be included 2 | // in the installer. 3 | 4 | { 5 | } -------------------------------------------------------------------------------- /infra/PepperFlash/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Pepper Flash Player", 3 | "name": "Flapper", 4 | "version": "21.0.0.213", 5 | "x-flapper-revision": "45398", 6 | "x-ppapi-arch": "ia32", 7 | "x-ppapi-os": "win", 8 | "x-ppapi-required-interfaces": [ 9 | "PPB_AudioConfig;1.1|PPB_AudioConfig;1.0", 10 | "PPB_AudioInput(Dev);0.4|PPB_AudioInput(Dev);0.3", 11 | "PPB_Audio;1.1|PPB_Audio;1.0", 12 | "PPB_BrowserFont_Trusted;1.0", 13 | "PPB_Buffer(Dev);0.4", 14 | "PPB_CharSet(Dev);0.4", 15 | "PPB_Core;1.0", 16 | "PPB_Crypto(Dev);0.1", 17 | "PPB_CursorControl(Dev);0.4", 18 | "PPB_FileChooser(Dev);0.6|PPB_FileChooser(Dev);0.5", 19 | "PPB_FileChooserTrusted;0.6|PPB_FileChooserTrusted;0.5", 20 | "PPB_FileRef;1.2|PPB_FileRef;1.1|PPB_FileRef;1.0", 21 | "PPB_Flash_Clipboard;5.1|PPB_Flash_Clipboard;5.0|PPB_Flash_Clipboard;4.0", 22 | "PPB_Flash_File_FileRef;2", 23 | "PPB_Flash_File_ModuleLocal;3", 24 | "PPB_Flash_FontFile;0.2|PPB_Flash_FontFile;0.1|PPB_PDF;1", 25 | "PPB_FlashFullscreen;1.0|PPB_FlashFullscreen;0.1", 26 | "PPB_Flash;13.0|PPB_Flash;12.6|PPB_Flash;12.5|PPB_Flash;12.4", 27 | "PPB_Flash_Menu;0.2", 28 | "PPB_Graphics2D;1.1|PPB_Graphics2D;1.0", 29 | "PPB_Graphics3D;1.0", 30 | "PPB_ImageData;1.0", 31 | "PPB_IMEInputEvent(Dev);0.2|PPB_IMEInputEvent(Dev);0.1", 32 | "PPB_InputEvent;1.0", 33 | "PPB_Instance;1.0", 34 | "PPB_Memory(Dev);0.1", 35 | "PPB_NetAddress_Private;1.1|PPB_NetAddress_Private;1.0|PPB_NetAddress_Private;0.1", 36 | "PPB_OpenGLES2ChromiumMapSub;1.0|PPB_OpenGLES2ChromiumMapSub(Dev);1.0|PPB_GLESChromiumTextureMapping(Dev);0.1", 37 | "PPB_OpenGLES2;1.0", 38 | "PPB_TCPSocket_Private;0.5|PPB_TCPSocket_Private;0.4|PPB_TCPSocket_Private;0.3", 39 | "PPB_TextInput(Dev);0.2|PPB_TextInput(Dev);0.1", 40 | "PPB_UDPSocket_Private;0.4|PPB_UDPSocket_Private;0.3", 41 | "PPB_URLLoader;1.0", 42 | "PPB_URLLoaderTrusted;0.3", 43 | "PPB_URLRequestInfo;1.0", 44 | "PPB_URLResponseInfo;1.0", 45 | "PPB_URLUtil(Dev);0.7|PPB_URLUtil(Dev);0.6", 46 | "PPB_Var;1.2|PPB_Var;1.1|PPB_Var;1.0", 47 | "PPB_VideoCapture(Dev);0.3", 48 | "PPB_View;1.2|PPB_View;1.1|PPB_View;1.0" 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /infra/PepperFlash/pepflashplayer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/PepperFlash/pepflashplayer.dll -------------------------------------------------------------------------------- /infra/default_apps/docs.crx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/default_apps/docs.crx -------------------------------------------------------------------------------- /infra/default_apps/drive.crx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/default_apps/drive.crx -------------------------------------------------------------------------------- /infra/default_apps/external_extensions.json: -------------------------------------------------------------------------------- 1 | // Dictionary of default apps to install into new profiles. Each entry maps 2 | // the extension's id to its crx's path (relative to this file) and the version 3 | // of the extension contained in the crx. 4 | // 5 | // When an extension is added or removed here, the two lists 'default_apps_list' 6 | // and 'default_apps_list_linux_dest' in build/common.gypi must also be updated. 7 | { 8 | "blpcfgokakmgnkcojhhkbfbldkacnbeo" : { 9 | "external_crx": "youtube.crx", 10 | "external_version": "4.2.5", 11 | "is_bookmark_app": true 12 | }, 13 | "pjkljhegncpnkpknbcohdijeoejaedia" : { 14 | "external_crx": "gmail.crx", 15 | "external_version": "7" 16 | }, 17 | "apdfllckaahabafndbhieahigkjlhalf" : { 18 | "external_crx": "drive.crx", 19 | "external_version": "6.2" 20 | }, 21 | "aohghmighlieiainnegkcijnfilokake" : { 22 | "external_crx": "docs.crx", 23 | "external_version": "0.0.0.6" 24 | }, 25 | // Google Sheets 26 | "aapocclcgogkmnckokdopfmhonfmgoek" : { 27 | "external_update_url": "https://clients2.google.com/service/update2/crx" 28 | }, 29 | // Google Slides 30 | "felcaaldnbdncclmgdcncolpebgiejap" : { 31 | "external_update_url": "https://clients2.google.com/service/update2/crx" 32 | }, 33 | // Drive extension 34 | "ghbmnnjooekpmoecnnnilnnbdlolhkhi" : { 35 | "external_update_url": "https://clients2.google.com/service/update2/crx" 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /infra/default_apps/gmail.crx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/default_apps/gmail.crx -------------------------------------------------------------------------------- /infra/default_apps/youtube.crx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/default_apps/youtube.crx -------------------------------------------------------------------------------- /infra/swiftshader/3.3.0.1/libEGL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/swiftshader/3.3.0.1/libEGL.dll -------------------------------------------------------------------------------- /infra/swiftshader/3.3.0.1/libGLESv2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/swiftshader/3.3.0.1/libGLESv2.dll -------------------------------------------------------------------------------- /infra/swiftshader/3.3.0.1/manifest.fingerprint: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/infra/swiftshader/3.3.0.1/manifest.fingerprint -------------------------------------------------------------------------------- /infra/swiftshader/3.3.0.1/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "SwiftShader", 4 | "version": "3.3.0.1" 5 | } -------------------------------------------------------------------------------- /logos/chromium_xp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/logos/chromium_xp.png -------------------------------------------------------------------------------- /logos/promo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/logos/promo.png -------------------------------------------------------------------------------- /logos/xp_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/logos/xp_flag.png -------------------------------------------------------------------------------- /src/DEPS: -------------------------------------------------------------------------------- 1 | vars = { 2 | 'angle_revision': 3 | '5fc4e56dfa3fade0b683a7b42e691137bda5fed0', 4 | 'boringssl_revision': 5 | 'afe57cb14d36f70ad4a109fc5e7765d1adc67035', 6 | 'buildspec_platforms': 7 | 'all', 8 | 'buildtools_revision': 9 | '0f8e6e4b126ee88137930a0ae4776c4741808740', 10 | 'chromium_git': 11 | 'https://chromium.googlesource.com', 12 | 'deqp_revision': 13 | 'cc0ded6c77267bbb14d21aac358fc5d9690c07f8', 14 | 'deqp_url': 15 | 'https://android.googlesource.com/platform/external/deqp', 16 | 'google_toolbox_for_mac_revision': 17 | '401878398253074c515c03cb3a3f8bb0cc8da6e9', 18 | 'googlecode_url': 19 | 'http://%s.googlecode.com/svn', 20 | 'lighttpd_revision': 21 | '9dfa55d15937a688a92cbf2b7a8621b0927d06eb', 22 | 'lss_revision': 23 | '4fc942258fe5509549333b9487ec018e3c8c5b10', 24 | 'nacl_revision': 25 | '26c7e6ae1327a43c948f4666fef9e84fe351ab7c', 26 | 'nss_revision': 27 | '225bfc39c93dfb7c7d0d1162f81e9bb5cd356c30', 28 | 'openmax_dl_revision': 29 | 'ff8766d39ce6b9c1c59fd6b752833e138852e778', 30 | 'pdfium_revision': 31 | '32b639de35f905a5e5559f305d9032cde5ae5c77', 32 | 'sfntly_revision': 33 | '130f832eddf98467e6578b548cb74ce17d04a26d', 34 | 'skia_revision': 35 | 'c55f699e8b01644b49dddfc21bfb538f1a5ed06a', 36 | 'swarming_revision': 37 | '9cdd76171e517a430a72dcd7d66ade67e109aa00', 38 | 'v8_revision': 39 | '2fea296569597e5064f81fd8fce58f1848de261a' 40 | } 41 | 42 | allowed_hosts = [ 43 | 'android.googlesource.com', 44 | 'boringssl.googlesource.com', 45 | 'chromium.googlesource.com', 46 | 'pdfium.googlesource.com' 47 | ] 48 | 49 | deps = { 50 | 'src/breakpad/src': 51 | (Var("chromium_git")) + '/breakpad/breakpad/src.git@ba0a8cb51c79845955cd0f262fe1a2a5f1ead9b9', 52 | 'src/buildtools': 53 | (Var("chromium_git")) + '/chromium/buildtools.git@0f8e6e4b126ee88137930a0ae4776c4741808740', 54 | 'src/chrome/test/data/perf/canvas_bench': 55 | (Var("chromium_git")) + '/chromium/canvas_bench.git@a7b40ea5ae0239517d78845a5fc9b12976bfc732', 56 | 'src/chrome/test/data/perf/frame_rate/content': 57 | (Var("chromium_git")) + '/chromium/frame_rate/content.git@c10272c88463efeef6bb19c9ec07c42bc8fe22b9', 58 | 'src/media/cdm/api': 59 | (Var("chromium_git")) + '/chromium/cdm.git@1dea7088184dec2ebe4a8b3800aabb0afbb4b88a', 60 | 'src/native_client': 61 | (Var("chromium_git")) + '/native_client/src/native_client.git@26c7e6ae1327a43c948f4666fef9e84fe351ab7c', 62 | 'src/sdch/open-vcdiff': 63 | (Var("chromium_git")) + '/external/github.com/google/open-vcdiff.git@21d7d0b9c3d0c3ccbdb221c85ae889373f0a2a58', 64 | 'src/testing/gmock': 65 | (Var("chromium_git")) + '/external/googlemock.git@0421b6f358139f02e102c9c332ce19a33faf75be', 66 | 'src/testing/gtest': 67 | (Var("chromium_git")) + '/external/github.com/google/googletest.git@6f8a66431cb592dad629028a50b3dd418a408c87', 68 | 'src/third_party/angle': 69 | (Var("chromium_git")) + '/angle/angle.git@4e9536d0f612dab15dd6722975155b78b92ca0ae', 70 | 'src/third_party/bidichecker': 71 | (Var("chromium_git")) + '/external/bidichecker/lib.git@97f2aa645b74c28c57eca56992235c79850fa9e0', 72 | 'src/third_party/boringssl/src': 73 | 'https://boringssl.googlesource.com/boringssl.git@907ae62b9d81121cb86b604f83e6b811a43f7a87', 74 | 'src/third_party/catapult': 75 | (Var("chromium_git")) + '/external/github.com/catapult-project/catapult.git@dc74f19fa849b17180f09cfdf3c5757a26e9a379', 76 | 'src/third_party/cld_2/src': 77 | (Var("chromium_git")) + '/external/github.com/CLD2Owners/cld2.git@84b58a5d7690ebf05a91406f371ce00c3daf31c0', 78 | 'src/third_party/colorama/src': 79 | (Var("chromium_git")) + '/external/colorama.git@799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8', 80 | 'src/third_party/dom_distiller_js/dist': 81 | (Var("chromium_git")) + '/external/github.com/chromium/dom-distiller-dist.git@e21fe06cb71327ec62431f823e783d7b02f97b26', 82 | 'src/third_party/ffmpeg': 83 | (Var("chromium_git")) + '/chromium/third_party/ffmpeg.git@501a5c5db447ec2b0903551c011dfcbf6c5cd22f', 84 | 'src/third_party/flac': 85 | (Var("chromium_git")) + '/chromium/deps/flac.git@2c4b86af352b23498315c016dc207e3fb2733fc0', 86 | 'src/third_party/hunspell_dictionaries': 87 | (Var("chromium_git")) + '/chromium/deps/hunspell_dictionaries.git@c106afdcec5d3de2622e19f1b3294c47bbd8bd72', 88 | 'src/third_party/icu': 89 | (Var("chromium_git")) + '/chromium/deps/icu.git@8f91ea3a7e0413df3312204058da856058a8099b', 90 | 'src/third_party/jsoncpp/source': 91 | (Var("chromium_git")) + '/external/github.com/open-source-parsers/jsoncpp.git@f572e8e42e22cfcf5ab0aea26574f408943edfa4', 92 | 'src/third_party/leveldatabase/src': 93 | (Var("chromium_git")) + '/external/leveldb.git@706b7f8d43b0aecdc75c5ee49d3e4ef5f27b9faf', 94 | 'src/third_party/libaddressinput/src': 95 | (Var("chromium_git")) + '/external/libaddressinput.git@5eeeb797e79fa01503fcdcbebdc50036fac023ef', 96 | 'src/third_party/libexif/sources': 97 | (Var("chromium_git")) + '/chromium/deps/libexif/sources.git@045b7fb9aa6d9b7f1954db248caf5eefe917476d', 98 | 'src/third_party/libjingle/source/talk': 99 | (Var("chromium_git")) + '/external/webrtc/trunk/talk.git@4ce7fef091e1d63a3bfc2ed225619893b0eb1782', 100 | 'src/third_party/libjpeg_turbo': 101 | (Var("chromium_git")) + '/chromium/deps/libjpeg_turbo.git@e4e75037f29745f1546b6ebf5cf532e841c04c2c', 102 | 'src/third_party/libphonenumber/src/phonenumbers': 103 | (Var("chromium_git")) + '/external/libphonenumber/cpp/src/phonenumbers.git@0d6e3e50e17c94262ad1ca3b7d52b11223084bca', 104 | 'src/third_party/libphonenumber/src/resources': 105 | (Var("chromium_git")) + '/external/libphonenumber/resources.git@b6dfdc7952571ff7ee72643cd88c988cbe966396', 106 | 'src/third_party/libphonenumber/src/test': 107 | (Var("chromium_git")) + '/external/libphonenumber/cpp/test.git@f351a7e007f9c9995494499120bbc361ca808a16', 108 | 'src/third_party/libsrtp': 109 | (Var("chromium_git")) + '/chromium/deps/libsrtp.git@ebfcc9ac562411e12487036820fb1cbcd4bbe670', 110 | 'src/third_party/libvpx_new/source/libvpx': 111 | (Var("chromium_git")) + '/webm/libvpx.git@16ec39cf96cb90f2d1f8e4d091724e875e608905', 112 | 'src/third_party/libwebm/source': 113 | (Var("chromium_git")) + '/webm/libwebm.git@75a6d2da8b63e0c446ec0ce1ac942c2962d959d7', 114 | 'src/third_party/libyuv': 115 | (Var("chromium_git")) + '/libyuv/libyuv.git@fc52d8ded269e9cd40c7a763e36758a08f177da0', 116 | 'src/third_party/mesa/src': 117 | (Var("chromium_git")) + '/chromium/deps/mesa.git@ef811c6bd4de74e13e7035ca882cc77f85793fef', 118 | 'src/third_party/openh264/src': 119 | (Var("chromium_git")) + '/external/github.com/cisco/openh264@b37cda248234162033e3e11b0335f3131cdfe488', 120 | 'src/third_party/openmax_dl': 121 | (Var("chromium_git")) + '/external/webrtc/deps/third_party/openmax.git@ff8766d39ce6b9c1c59fd6b752833e138852e778', 122 | 'src/third_party/opus/src': 123 | 'https://github.com/xiph/opus.git@cae696156f1e60006e39821e79a1811ae1933c69', 124 | 'src/third_party/pdfium': 125 | 'https://pdfium.googlesource.com/pdfium.git@f8eda05ad3696181dccbb1aad95c3b87a3897a0e', 126 | 'src/third_party/py_trace_event/src': 127 | (Var("chromium_git")) + '/external/py_trace_event.git@dd463ea9e2c430de2b9e53dea57a77b4c3ac9b30', 128 | 'src/third_party/pyftpdlib/src': 129 | (Var("chromium_git")) + '/external/pyftpdlib.git@2be6d65e31c7ee6320d059f581f05ae8d89d7e45', 130 | 'src/third_party/pywebsocket/src': 131 | (Var("chromium_git")) + '/external/github.com/google/pywebsocket.git@2d7b73c3acbd0f41dcab487ae5c97c6feae06ce2', 132 | 'src/third_party/re2/src': 133 | (Var("chromium_git")) + '/external/github.com/google/re2.git@dba3349aba83b5588e85e5ecf2b56c97f2d259b7', 134 | 'src/third_party/safe_browsing/testing': 135 | (Var("chromium_git")) + '/external/google-safe-browsing/testing.git@9d7e8064f3ca2e45891470c9b5b1dce54af6a9d6', 136 | 'src/third_party/scons-2.0.1': 137 | (Var("chromium_git")) + '/native_client/src/third_party/scons-2.0.1.git@1c1550e17fc26355d08627fbdec13d8291227067', 138 | 'src/third_party/sfntly/src': 139 | (Var("chromium_git")) + '/external/github.com/googlei18n/sfntly.git@130f832eddf98467e6578b548cb74ce17d04a26d', 140 | 'src/third_party/skia': 141 | (Var("chromium_git")) + '/skia.git@e2913ed9b25bf4a47194c4ca134beec0b5784842', 142 | 'src/third_party/smhasher/src': 143 | (Var("chromium_git")) + '/external/smhasher.git@e87738e57558e0ec472b2fc3a643b838e5b6e88f', 144 | 'src/third_party/snappy/src': 145 | (Var("chromium_git")) + '/external/snappy.git@762bb32f0c9d2f31ba4958c7c0933d22e80c20bf', 146 | 'src/third_party/usrsctp/usrsctplib': 147 | (Var("chromium_git")) + '/external/github.com/sctplab/usrsctp@c60ec8b35c3fe6027d7a3faae89d1c8d7dd3ce98', 148 | 'src/third_party/webdriver/pylib': 149 | (Var("chromium_git")) + '/external/selenium/py.git@5fd78261a75fe08d27ca4835fb6c5ce4b42275bd', 150 | 'src/third_party/webgl/src': 151 | (Var("chromium_git")) + '/external/khronosgroup/webgl.git@29258490ea902efba0cd3ef8200299b5c31d5d26', 152 | 'src/third_party/webpagereplay': 153 | (Var("chromium_git")) + '/external/github.com/chromium/web-page-replay.git@7564939bdf6482d57b9bd5e9c931679f96d8cf75', 154 | 'src/third_party/webrtc': 155 | (Var("chromium_git")) + '/external/webrtc/trunk/webrtc.git@24a16656da7249c0d836247bc77dbc475f71f0af', 156 | 'src/third_party/yasm/source/patched-yasm': 157 | (Var("chromium_git")) + '/chromium/deps/yasm/patched-yasm.git@4671120cd8558ce62ee8672ebf3eb6f5216f909b', 158 | 'src/tools/gyp': 159 | (Var("chromium_git")) + '/external/gyp.git@54b7dfc03f746b6a539ac38f2fb0815d10b54734', 160 | 'src/tools/page_cycler/acid3': 161 | (Var("chromium_git")) + '/chromium/deps/acid3.git@6be0a66a1ebd7ebc5abc1b2f405a945f6d871521', 162 | 'src/tools/swarming_client': 163 | (Var("chromium_git")) + '/external/swarming.client.git@9cdd76171e517a430a72dcd7d66ade67e109aa00', 164 | 'src/v8': 165 | (Var("chromium_git")) + '/v8/v8.git@4cee62a8bd81e100e6257cfebeaa1064f8a33774' 166 | } 167 | 168 | deps_os = { 169 | 'android': { 170 | 'src/third_party/android_protobuf/src': 171 | (Var("chromium_git")) + '/external/android_protobuf.git@999188d0dc72e97f7fe08bb756958a2cf090f4e7', 172 | 'src/third_party/android_tools': 173 | (Var("chromium_git")) + '/android_tools.git@f4c36ad89b2696b37d9cd7ca7d984b691888b188', 174 | 'src/third_party/apache-mime4j': 175 | (Var("chromium_git")) + '/chromium/deps/apache-mime4j.git@28cb1108bff4b6cf0a2e86ff58b3d025934ebe3a', 176 | 'src/third_party/appurify-python/src': 177 | (Var("chromium_git")) + '/external/github.com/appurify/appurify-python.git@ee7abd5c5ae3106f72b2a0b9d2cb55094688e867', 178 | 'src/third_party/cardboard-java/src': 179 | (Var("chromium_git")) + '/external/github.com/googlesamples/cardboard-java.git@e36ee57e72bbd057ddb53b127954177b50e18df7', 180 | 'src/third_party/custom_tabs_client/src': 181 | (Var("chromium_git")) + '/external/github.com/GoogleChrome/custom-tabs-client.git@592e63122055d37e58cd37bd89a973eed98340ef', 182 | 'src/third_party/elfutils/src': 183 | (Var("chromium_git")) + '/external/elfutils.git@249673729a7e5dbd5de4f3760bdcaa3d23d154d7', 184 | 'src/third_party/errorprone/lib': 185 | (Var("chromium_git")) + '/chromium/third_party/errorprone.git@0eea83b66343133b9c76b7d3288c30321818ebcf', 186 | 'src/third_party/findbugs': 187 | (Var("chromium_git")) + '/chromium/deps/findbugs.git@57f05238d3ac77ea0a194813d3065dd780c6e566', 188 | 'src/third_party/freetype-android/src': 189 | (Var("chromium_git")) + '/chromium/src/third_party/freetype2.git@a512b0fe7a8d9db0e5aa9c0a4db1e92cb861722d', 190 | 'src/third_party/httpcomponents-client': 191 | (Var("chromium_git")) + '/chromium/deps/httpcomponents-client.git@285c4dafc5de0e853fa845dce5773e223219601c', 192 | 'src/third_party/httpcomponents-core': 193 | (Var("chromium_git")) + '/chromium/deps/httpcomponents-core.git@9f7180a96f8fa5cab23f793c14b413356d419e62', 194 | 'src/third_party/jarjar': 195 | (Var("chromium_git")) + '/chromium/deps/jarjar.git@2e1ead4c68c450e0b77fe49e3f9137842b8b6920', 196 | 'src/third_party/jsr-305/src': 197 | (Var("chromium_git")) + '/external/jsr-305.git@642c508235471f7220af6d5df2d3210e3bfc0919', 198 | 'src/third_party/junit/src': 199 | (Var("chromium_git")) + '/external/junit.git@45a44647e7306262162e1346b750c3209019f2e1', 200 | 'src/third_party/lss': 201 | (Var("chromium_git")) + '/external/linux-syscall-support/lss.git@4fc942258fe5509549333b9487ec018e3c8c5b10', 202 | 'src/third_party/mockito/src': 203 | (Var("chromium_git")) + '/external/mockito/mockito.git@4d987dcd923b81525c42b1333e6c4e07440776c3', 204 | 'src/third_party/requests/src': 205 | (Var("chromium_git")) + '/external/github.com/kennethreitz/requests.git@f172b30356d821d180fa4ecfa3e71c7274a32de4', 206 | 'src/third_party/robolectric/lib': 207 | (Var("chromium_git")) + '/chromium/third_party/robolectric.git@6b63c99a8b6967acdb42cbed0adb067c80efc810', 208 | 'src/third_party/ub-uiautomator/lib': 209 | (Var("chromium_git")) + '/chromium/third_party/ub-uiautomator.git@00270549ce3161ae72ceb24712618ea28b4f9434' 210 | }, 211 | 'ios': { 212 | 'src/chrome/test/data/perf/canvas_bench': None, 213 | 'src/chrome/test/data/perf/frame_rate/content': None, 214 | 'src/ios/third_party/gcdwebserver/src': 215 | (Var("chromium_git")) + '/external/github.com/swisspol/GCDWebServer.git@3d5fd0b8281a7224c057deb2d17709b5bea64836', 216 | 'src/native_client': None, 217 | 'src/third_party/class-dump/src': 218 | (Var("chromium_git")) + '/external/github.com/nygard/class-dump.git@978d177ca6f0d2e5e34acf3e8dadc63e3140ebbc', 219 | 'src/third_party/ffmpeg': None, 220 | 'src/third_party/google_toolbox_for_mac/src': 221 | (Var("chromium_git")) + '/external/github.com/google/google-toolbox-for-mac.git@401878398253074c515c03cb3a3f8bb0cc8da6e9', 222 | 'src/third_party/hunspell_dictionaries': None, 223 | 'src/third_party/nss': 224 | (Var("chromium_git")) + '/chromium/deps/nss.git@225bfc39c93dfb7c7d0d1162f81e9bb5cd356c30', 225 | 'src/third_party/webgl': None 226 | }, 227 | 'mac': { 228 | 'src/chrome/installer/mac/third_party/xz/xz': 229 | (Var("chromium_git")) + '/chromium/deps/xz.git@eecaf55632ca72e90eb2641376bce7cdbc7284f7', 230 | 'src/chrome/tools/test/reference_build/chrome_mac': 231 | (Var("chromium_git")) + '/chromium/reference_builds/chrome_mac.git@8dc181329e7c5255f83b4b85dc2f71498a237955', 232 | 'src/third_party/google_toolbox_for_mac/src': 233 | (Var("chromium_git")) + '/external/github.com/google/google-toolbox-for-mac.git@401878398253074c515c03cb3a3f8bb0cc8da6e9', 234 | 'src/third_party/lighttpd': 235 | (Var("chromium_git")) + '/chromium/deps/lighttpd.git@9dfa55d15937a688a92cbf2b7a8621b0927d06eb', 236 | 'src/third_party/nss': 237 | (Var("chromium_git")) + '/chromium/deps/nss.git@225bfc39c93dfb7c7d0d1162f81e9bb5cd356c30', 238 | 'src/third_party/pdfsqueeze': 239 | (Var("chromium_git")) + '/external/pdfsqueeze.git@5936b871e6a087b7e50d4cbcb122378d8a07499f' 240 | }, 241 | 'unix': { 242 | 'src/chrome/tools/test/reference_build/chrome_linux': 243 | (Var("chromium_git")) + '/chromium/reference_builds/chrome_linux64.git@033d053a528e820e1de3e2db766678d862a86b36', 244 | 'src/third_party/chromite': 245 | (Var("chromium_git")) + '/chromiumos/chromite.git@e19f83ba227bf1ec0077f5d3a816a415f1dd88d0', 246 | 'src/third_party/cros_system_api': 247 | (Var("chromium_git")) + '/chromiumos/platform/system_api.git@d9ecb3bd87504815d4c58a6a8b9031deb2498d19', 248 | 'src/third_party/deqp/src': 249 | 'https://android.googlesource.com/platform/external/deqp@cc0ded6c77267bbb14d21aac358fc5d9690c07f8', 250 | 'src/third_party/fontconfig/src': 251 | (Var("chromium_git")) + '/external/fontconfig.git@f16c3118e25546c1b749f9823c51827a60aeb5c1', 252 | 'src/third_party/freetype2/src': 253 | (Var("chromium_git")) + '/chromium/src/third_party/freetype2.git@fc1532a7c4c592f24a4c1a0261d2845524ca5cff', 254 | 'src/third_party/liblouis/src': 255 | (Var("chromium_git")) + '/external/liblouis-github.git@5f9c03f2a3478561deb6ae4798175094be8a26c2', 256 | 'src/third_party/lss': 257 | (Var("chromium_git")) + '/external/linux-syscall-support/lss.git@4fc942258fe5509549333b9487ec018e3c8c5b10', 258 | 'src/third_party/minigbm/src': 259 | (Var("chromium_git")) + '/chromiumos/platform/minigbm.git@f9d2ab79a15a1bb6a1307f3b608964c81c27791b', 260 | 'src/third_party/pyelftools': 261 | (Var("chromium_git")) + '/chromiumos/third_party/pyelftools.git@bdc1d380acd88d4bfaf47265008091483b0d614e', 262 | 'src/third_party/wayland-protocols/src': 263 | (Var("chromium_git")) + '/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git@3543bb755c8858b0a70dfd20fd1beb74d865751d', 264 | 'src/third_party/wayland/src': 265 | (Var("chromium_git")) + '/external/anongit.freedesktop.org/git/wayland/wayland.git@b05668f0ad64ad9ba82e124965163daed4172ead', 266 | 'src/third_party/xdg-utils': 267 | (Var("chromium_git")) + '/chromium/deps/xdg-utils.git@d80274d5869b17b8c9067a1022e4416ee7ed5e0d' 268 | }, 269 | 'win': { 270 | 'src/chrome/tools/test/reference_build/chrome_win': 271 | (Var("chromium_git")) + '/chromium/reference_builds/chrome_win.git@f8a3a845dfc845df6b14280f04f86a61959357ef', 272 | 'src/third_party/bison': 273 | (Var("chromium_git")) + '/chromium/deps/bison.git@083c9a45e4affdd5464ee2b224c2df649c6e26c3', 274 | 'src/third_party/cygwin': 275 | (Var("chromium_git")) + '/chromium/deps/cygwin.git@c89e446b273697fadf3a10ff1007a97c0b7de6df', 276 | 'src/third_party/deqp/src': 277 | 'https://android.googlesource.com/platform/external/deqp@cc0ded6c77267bbb14d21aac358fc5d9690c07f8', 278 | 'src/third_party/gnu_binutils': 279 | (Var("chromium_git")) + '/native_client/deps/third_party/gnu_binutils.git@f4003433b61b25666565690caf3d7a7a1a4ec436', 280 | 'src/third_party/gperf': 281 | (Var("chromium_git")) + '/chromium/deps/gperf.git@d892d79f64f9449770443fb06da49b5a1e5d33c1', 282 | 'src/third_party/lighttpd': 283 | (Var("chromium_git")) + '/chromium/deps/lighttpd.git@9dfa55d15937a688a92cbf2b7a8621b0927d06eb', 284 | 'src/third_party/mingw-w64/mingw/bin': 285 | (Var("chromium_git")) + '/native_client/deps/third_party/mingw-w64/mingw/bin.git@3cc8b140b883a9fe4986d12cfd46c16a093d3527', 286 | 'src/third_party/nacl_sdk_binaries': 287 | (Var("chromium_git")) + '/chromium/deps/nacl_sdk_binaries.git@759dfca03bdc774da7ecbf974f6e2b84f43699a5', 288 | 'src/third_party/nss': 289 | (Var("chromium_git")) + '/chromium/deps/nss.git@225bfc39c93dfb7c7d0d1162f81e9bb5cd356c30', 290 | 'src/third_party/pefile': 291 | (Var("chromium_git")) + '/external/pefile.git@72c6ae42396cb913bcab63c15585dc3b5c3f92f1', 292 | 'src/third_party/perl': 293 | (Var("chromium_git")) + '/chromium/deps/perl.git@ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78', 294 | 'src/third_party/psyco_win32': 295 | (Var("chromium_git")) + '/chromium/deps/psyco_win32.git@f5af9f6910ee5a8075bbaeed0591469f1661d868', 296 | 'src/third_party/yasm/binaries': 297 | (Var("chromium_git")) + '/chromium/deps/yasm/binaries.git@52f9b3f4b0aa06da24ef8b123058bb61ee468881' 298 | } 299 | } 300 | 301 | hooks = [ 302 | { 303 | 'action': [ 304 | 'python', 305 | 'src/build/landmines.py' 306 | ], 307 | 'pattern': 308 | '.', 309 | 'name': 310 | 'landmines' 311 | }, 312 | { 313 | 'action': [ 314 | 'python', 315 | 'src/build/download_nacl_toolchains.py', 316 | '--mode', 317 | 'nacl_core_sdk', 318 | 'sync', 319 | '--extract' 320 | ], 321 | 'pattern': 322 | '.', 323 | 'name': 324 | 'nacltools' 325 | }, 326 | { 327 | 'action': [ 328 | 'python', 329 | 'src/build/android/play_services/update.py', 330 | 'download' 331 | ], 332 | 'pattern': 333 | '.', 334 | 'name': 335 | 'sdkextras' 336 | }, 337 | { 338 | 'action': [ 339 | 'python', 340 | 'src/build/linux/sysroot_scripts/install-sysroot.py', 341 | '--running-as-hook' 342 | ], 343 | 'pattern': 344 | '.', 345 | 'name': 346 | 'sysroot' 347 | }, 348 | { 349 | 'action': [ 350 | 'python', 351 | 'src/build/vs_toolchain.py', 352 | 'update' 353 | ], 354 | 'pattern': 355 | '.', 356 | 'name': 357 | 'win_toolchain' 358 | }, 359 | { 360 | 'action': [ 361 | 'python', 362 | 'src/third_party/binutils/download.py' 363 | ], 364 | 'pattern': 365 | 'src/third_party/binutils', 366 | 'name': 367 | 'binutils' 368 | }, 369 | { 370 | 'action': [ 371 | 'python', 372 | 'src/tools/clang/scripts/update.py', 373 | '--if-needed' 374 | ], 375 | 'pattern': 376 | '.', 377 | 'name': 378 | 'clang' 379 | }, 380 | { 381 | 'action': [ 382 | 'python', 383 | 'src/build/util/lastchange.py', 384 | '-o', 385 | 'src/build/util/LASTCHANGE' 386 | ], 387 | 'pattern': 388 | '.', 389 | 'name': 390 | 'lastchange' 391 | }, 392 | { 393 | 'action': [ 394 | 'python', 395 | 'src/build/util/lastchange.py', 396 | '--git-hash-only', 397 | '-s', 398 | 'src/third_party/WebKit', 399 | '-o', 400 | 'src/build/util/LASTCHANGE.blink' 401 | ], 402 | 'pattern': 403 | '.', 404 | 'name': 405 | 'lastchange_blink' 406 | }, 407 | { 408 | 'action': [ 409 | 'python', 410 | 'src/ios/build/util/canary_version.py', 411 | '-o', 412 | 'src/ios/build/util/CANARY_VERSION' 413 | ], 414 | 'pattern': 415 | '.', 416 | 'name': 417 | 'ios_canary_version' 418 | }, 419 | { 420 | 'action': [ 421 | 'download_from_google_storage', 422 | '--no_resume', 423 | '--platform=win32', 424 | '--no_auth', 425 | '--bucket', 426 | 'chromium-gn', 427 | '-s', 428 | 'src/buildtools/win/gn.exe.sha1' 429 | ], 430 | 'pattern': 431 | '.', 432 | 'name': 433 | 'gn_win' 434 | }, 435 | { 436 | 'action': [ 437 | 'download_from_google_storage', 438 | '--no_resume', 439 | '--platform=darwin', 440 | '--no_auth', 441 | '--bucket', 442 | 'chromium-gn', 443 | '-s', 444 | 'src/buildtools/mac/gn.sha1' 445 | ], 446 | 'pattern': 447 | '.', 448 | 'name': 449 | 'gn_mac' 450 | }, 451 | { 452 | 'action': [ 453 | 'download_from_google_storage', 454 | '--no_resume', 455 | '--platform=linux*', 456 | '--no_auth', 457 | '--bucket', 458 | 'chromium-gn', 459 | '-s', 460 | 'src/buildtools/linux64/gn.sha1' 461 | ], 462 | 'pattern': 463 | '.', 464 | 'name': 465 | 'gn_linux64' 466 | }, 467 | { 468 | 'action': [ 469 | 'download_from_google_storage', 470 | '--no_resume', 471 | '--platform=win32', 472 | '--no_auth', 473 | '--bucket', 474 | 'chromium-clang-format', 475 | '-s', 476 | 'src/buildtools/win/clang-format.exe.sha1' 477 | ], 478 | 'pattern': 479 | '.', 480 | 'name': 481 | 'clang_format_win' 482 | }, 483 | { 484 | 'action': [ 485 | 'download_from_google_storage', 486 | '--no_resume', 487 | '--platform=darwin', 488 | '--no_auth', 489 | '--bucket', 490 | 'chromium-clang-format', 491 | '-s', 492 | 'src/buildtools/mac/clang-format.sha1' 493 | ], 494 | 'pattern': 495 | '.', 496 | 'name': 497 | 'clang_format_mac' 498 | }, 499 | { 500 | 'action': [ 501 | 'download_from_google_storage', 502 | '--no_resume', 503 | '--platform=linux*', 504 | '--no_auth', 505 | '--bucket', 506 | 'chromium-clang-format', 507 | '-s', 508 | 'src/buildtools/linux64/clang-format.sha1' 509 | ], 510 | 'pattern': 511 | '.', 512 | 'name': 513 | 'clang_format_linux' 514 | }, 515 | { 516 | 'action': [ 517 | 'download_from_google_storage', 518 | '--no_resume', 519 | '--platform=darwin', 520 | '--no_auth', 521 | '--bucket', 522 | 'chromium-libcpp', 523 | '-s', 524 | 'src/third_party/libc++-static/libc++.a.sha1' 525 | ], 526 | 'pattern': 527 | '.', 528 | 'name': 529 | 'libcpp_mac' 530 | }, 531 | { 532 | 'action': [ 533 | 'download_from_google_storage', 534 | '--no_resume', 535 | '--platform=win32', 536 | '--no_auth', 537 | '--bucket', 538 | 'chromium-luci', 539 | '-d', 540 | 'src/tools/luci-go/win64' 541 | ], 542 | 'pattern': 543 | '.', 544 | 'name': 545 | 'luci-go_win' 546 | }, 547 | { 548 | 'action': [ 549 | 'download_from_google_storage', 550 | '--no_resume', 551 | '--platform=darwin', 552 | '--no_auth', 553 | '--bucket', 554 | 'chromium-luci', 555 | '-d', 556 | 'src/tools/luci-go/mac64' 557 | ], 558 | 'pattern': 559 | '.', 560 | 'name': 561 | 'luci-go_mac' 562 | }, 563 | { 564 | 'action': [ 565 | 'download_from_google_storage', 566 | '--no_resume', 567 | '--platform=linux*', 568 | '--no_auth', 569 | '--bucket', 570 | 'chromium-luci', 571 | '-d', 572 | 'src/tools/luci-go/linux64' 573 | ], 574 | 'pattern': 575 | '.', 576 | 'name': 577 | 'luci-go_linux' 578 | }, 579 | { 580 | 'action': [ 581 | 'download_from_google_storage', 582 | '--no_resume', 583 | '--platform=linux*', 584 | '--no_auth', 585 | '--bucket', 586 | 'chromium-eu-strip', 587 | '-s', 588 | 'src/build/linux/bin/eu-strip.sha1' 589 | ], 590 | 'pattern': 591 | '.', 592 | 'name': 593 | 'eu-strip' 594 | }, 595 | { 596 | 'action': [ 597 | 'download_from_google_storage', 598 | '--no_resume', 599 | '--platform=win32', 600 | '--no_auth', 601 | '--bucket', 602 | 'chromium-drmemory', 603 | '-s', 604 | 'src/third_party/drmemory/drmemory-windows-sfx.exe.sha1' 605 | ], 606 | 'pattern': 607 | '.', 608 | 'name': 609 | 'drmemory' 610 | }, 611 | { 612 | 'action': [ 613 | 'python', 614 | 'src/build/get_syzygy_binaries.py', 615 | '--output-dir=src/third_party/syzygy/binaries', 616 | '--revision=24abcb05aa6cc35545111d244378ef37b5d5218c', 617 | '--overwrite' 618 | ], 619 | 'pattern': 620 | '.', 621 | 'name': 622 | 'syzygy-binaries' 623 | }, 624 | { 625 | 'action': [ 626 | 'python', 627 | 'src/build/get_syzygy_binaries.py', 628 | '--output-dir=src/third_party/kasko/binaries', 629 | '--revision=266a18d9209be5ca5c5dcd0620942b82a2d238f3', 630 | '--resource=kasko.zip', 631 | '--resource=kasko_symbols.zip', 632 | '--overwrite' 633 | ], 634 | 'pattern': 635 | '.', 636 | 'name': 637 | 'kasko' 638 | }, 639 | { 640 | 'action': [ 641 | 'download_from_google_storage', 642 | '--no_resume', 643 | '--platform=win32', 644 | '--directory', 645 | '--recursive', 646 | '--no_auth', 647 | '--num_threads=16', 648 | '--bucket', 649 | 'chromium-apache-win32', 650 | 'src/third_party/apache-win32' 651 | ], 652 | 'pattern': 653 | '\\.sha1', 654 | 'name': 655 | 'apache_win32' 656 | }, 657 | { 658 | 'action': [ 659 | 'python', 660 | 'src/third_party/instrumented_libraries/scripts/download_binaries.py' 661 | ], 662 | 'pattern': 663 | '\\.sha1', 664 | 'name': 665 | 'instrumented_libraries' 666 | }, 667 | { 668 | 'action': [ 669 | 'python', 670 | 'src/tools/remove_stale_pyc_files.py', 671 | 'src/android_webview/tools', 672 | 'src/gpu/gles2_conform_support', 673 | 'src/infra', 674 | 'src/ppapi', 675 | 'src/printing', 676 | 'src/third_party/closure_compiler/build', 677 | 'src/tools' 678 | ], 679 | 'pattern': 680 | '.', 681 | 'name': 682 | 'remove_stale_pyc_files' 683 | }, 684 | { 685 | 'action': [ 686 | 'python', 687 | 'src/build/gyp_chromium' 688 | ], 689 | 'pattern': 690 | '.', 691 | 'name': 692 | 'gyp' 693 | } 694 | ] 695 | 696 | include_rules = [ 697 | '+base', 698 | '+build', 699 | '+ipc', 700 | '+library_loaders', 701 | '+testing', 702 | '+third_party/icu/source/common/unicode', 703 | '+third_party/icu/source/i18n/unicode', 704 | '+url' 705 | ] 706 | 707 | skip_child_includes = [ 708 | 'breakpad', 709 | 'native_client_sdk', 710 | 'out', 711 | 'sdch', 712 | 'skia', 713 | 'testing', 714 | 'v8', 715 | 'win8' 716 | ] 717 | -------------------------------------------------------------------------------- /src/build/config/win/BUILD.gn: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | # Use of this source code is governed by a BSD-style license that can be 3 | # found in the LICENSE file. 4 | 5 | import("//build/config/compiler/compiler.gni") 6 | import("//build/config/sanitizers/sanitizers.gni") 7 | import("//build/config/win/visual_studio_version.gni") 8 | 9 | assert(is_win) 10 | 11 | # This is included by reference in the //build/config/compiler config that 12 | # is applied to all targets. It is here to separate out the logic that is 13 | # Windows-only. 14 | config("compiler") { 15 | if (current_cpu == "x86") { 16 | asmflags = [ 17 | # When /safeseh is specified, the linker will only produce an image if it 18 | # can also produce a table of the image's safe exception handlers. This 19 | # table specifies for the operating system which exception handlers are 20 | # valid for the image. Note that /SAFESEH isn't accepted on the command 21 | # line, only /safeseh. This is only accepted by ml.exe, not ml64.exe. 22 | "/safeseh", 23 | ] 24 | } 25 | 26 | cflags = [ 27 | "/Gy", # Enable function-level linking. 28 | "/GS", # Enable buffer security checking. 29 | "/FS", # Preserve previous PDB behavior. 30 | "/bigobj", # Some of our files are bigger than the regular limits. 31 | ] 32 | 33 | # Force C/C++ mode for the given GN detected file type. This is necessary 34 | # for precompiled headers where the same source file is compiled in both 35 | # modes. 36 | cflags_c = [ "/TC" ] 37 | cflags_cc = [ "/TP" ] 38 | 39 | # Work around crbug.com/526851, bug in VS 2015 RTM compiler. 40 | if (visual_studio_version == "2015") { 41 | cflags += [ "/Zc:sizedDealloc-" ] 42 | } 43 | 44 | # Building with Clang on Windows is a work in progress and very 45 | # experimental. See crbug.com/82385. 46 | # Keep this in sync with the similar block in build/common.gypi 47 | if (is_clang) { 48 | cflags += [ 49 | # Many files use intrinsics without including this header. 50 | # TODO(hans): Fix those files, or move this to sub-GYPs. 51 | "/FIIntrin.h", 52 | ] 53 | 54 | if (visual_studio_version == "2013") { 55 | cflags += [ "-fmsc-version=1800" ] 56 | } else if (visual_studio_version == "2015") { 57 | cflags += [ "-fmsc-version=1900" ] 58 | } 59 | 60 | if (current_cpu == "x86") { 61 | cflags += [ "-m32", "-msse3", "/ARCH:SSE3" ] 62 | } else { 63 | cflags += [ "-m64", "-msse3", "/ARCH:SSE3" ] 64 | } 65 | 66 | if (exec_script("//build/win/use_ansi_codes.py", [], "trim string") == 67 | "True") { 68 | cflags += [ 69 | # cmd.exe doesn't understand ANSI escape codes by default, 70 | # so only enable them if something emulating them is around. 71 | "-fansi-escape-codes", 72 | ] 73 | } 74 | } else { 75 | cflags += [ "/ARCH:SSE2" ] 76 | } 77 | 78 | if (is_syzyasan) { 79 | # SyzyAsan needs /PROFILE turned on to produce appropriate pdbs. 80 | assert(!is_win_fastlink, "/PROFILE and /DEBUG:FASTLINK are incompatible") 81 | ldflags = [ "/PROFILE" ] 82 | } 83 | } 84 | 85 | # This is included by reference in the //build/config/compiler:runtime_library 86 | # config that is applied to all targets. It is here to separate out the logic 87 | # that is Windows-only. Please see that target for advice on what should go in 88 | # :runtime_library vs. :compiler. 89 | config("runtime_library") { 90 | cflags = [] 91 | 92 | # Defines that set up the CRT. 93 | defines = [ 94 | "__STD_C", 95 | "_CRT_RAND_S", 96 | "_CRT_SECURE_NO_DEPRECATE", 97 | "_HAS_EXCEPTIONS=0", 98 | "_SCL_SECURE_NO_DEPRECATE", 99 | ] 100 | 101 | # Defines that set up the Windows SDK. 102 | defines += [ 103 | "_ATL_NO_OPENGL", 104 | "_WINDOWS", 105 | "CERT_CHAIN_PARA_HAS_EXTRA_FIELDS", 106 | "NTDDI_VERSION=0x0A000000", 107 | "PSAPI_VERSION=1", 108 | "WIN32", 109 | "_SECURE_ATL", 110 | 111 | # This is required for ATL to use XP-safe versions of its functions. 112 | "_USING_V110_SDK71_", 113 | ] 114 | 115 | if (is_component_build) { 116 | # Component mode: dynamic CRT. Since the library is shared, it requires 117 | # exceptions or will give errors about things not matching, so keep 118 | # exceptions on. 119 | if (is_debug) { 120 | cflags += [ "/MDd" ] 121 | } else { 122 | cflags += [ "/MD" ] 123 | } 124 | } else { 125 | if (current_os != "win") { 126 | # WindowsRT: use the dynamic CRT. 127 | if (is_debug) { 128 | cflags += [ "/MDd" ] 129 | } else { 130 | cflags += [ "/MD" ] 131 | } 132 | } else { 133 | # Desktop Windows: static CRT. 134 | if (is_debug) { 135 | cflags += [ "/MTd" ] 136 | } else { 137 | cflags += [ "/MT" ] 138 | } 139 | } 140 | } 141 | } 142 | 143 | # Sets the default Windows build version. This is separated because some 144 | # targets need to manually override it for their compiles. 145 | config("winver") { 146 | defines = [ 147 | "_WIN32_WINNT=0x0A00", 148 | "WINVER=0x0A00", 149 | ] 150 | } 151 | 152 | # Linker flags for Windows SDK setup, this is applied only to EXEs and DLLs. 153 | config("sdk_link") { 154 | if (current_cpu == "x64") { 155 | ldflags = [ "/MACHINE:X64" ] 156 | lib_dirs = [ 157 | "$windows_sdk_path\Lib\winv6.3\um\x64", 158 | "$visual_studio_path\VC\lib\amd64", 159 | "$visual_studio_path\VC\atlmfc\lib\amd64", 160 | ] 161 | } else { 162 | ldflags = [ 163 | "/MACHINE:X86", 164 | "/SAFESEH", # Not compatible with x64 so use only for x86. 165 | ] 166 | lib_dirs = [ 167 | "$windows_sdk_path\Lib\winv6.3\um\x86", 168 | "$visual_studio_path\VC\lib", 169 | "$visual_studio_path\VC\atlmfc\lib", 170 | ] 171 | if (!is_syzyasan) { 172 | ldflags += [ "/largeaddressaware" ] 173 | } 174 | } 175 | } 176 | 177 | # This default linker setup is provided separately from the SDK setup so 178 | # targets who want different library configurations can remove this and specify 179 | # their own. 180 | config("common_linker_setup") { 181 | ldflags = [ 182 | "/FIXED:NO", 183 | "/ignore:4199", 184 | "/ignore:4221", 185 | "/NXCOMPAT", 186 | 187 | # Suggested by Microsoft Devrel to avoid 188 | # LINK : fatal error LNK1248: image size (80000000) 189 | # exceeds maximum allowable size (80000000) 190 | # which started happening more regularly after VS2013 Update 4. 191 | "/maxilksize:2147483647", 192 | ] 193 | 194 | # ASLR makes debugging with windbg difficult because Chrome.exe and 195 | # Chrome.dll share the same base name. As result, windbg will name the 196 | # Chrome.dll module like chrome_, where 197 | # typically changes with each launch. This in turn means that breakpoints in 198 | # Chrome.dll don't stick from one launch to the next. For this reason, we 199 | # turn ASLR off in debug builds. 200 | if (is_debug) { 201 | ldflags += [ "/DYNAMICBASE:NO" ] 202 | } else { 203 | ldflags += [ "/DYNAMICBASE" ] 204 | } 205 | 206 | # Delay loaded DLLs. 207 | ldflags += [ 208 | "/DELAYLOAD:dbghelp.dll", 209 | "/DELAYLOAD:dwmapi.dll", 210 | "/DELAYLOAD:shell32.dll", 211 | "/DELAYLOAD:uxtheme.dll", 212 | ] 213 | } 214 | 215 | # Subsystem -------------------------------------------------------------------- 216 | 217 | # This is appended to the subsystem to specify a minimum version. 218 | if (current_cpu == "x64") { 219 | # The number after the comma is the minimum required OS version. 220 | # 5.02 = Windows Server 2003. 221 | subsystem_version_suffix = ",5.02" 222 | } else { 223 | # 5.01 = Windows XP. 224 | subsystem_version_suffix = ",5.01" 225 | } 226 | 227 | config("console") { 228 | ldflags = [ "/SUBSYSTEM:CONSOLE$subsystem_version_suffix" ] 229 | } 230 | config("windowed") { 231 | ldflags = [ "/SUBSYSTEM:WINDOWS$subsystem_version_suffix" ] 232 | } 233 | 234 | # Incremental linking ---------------------------------------------------------- 235 | 236 | incremental_linking_on_switch = [ "/INCREMENTAL" ] 237 | incremental_linking_off_switch = [ "/INCREMENTAL:NO" ] 238 | if (is_debug) { 239 | default_incremental_linking_switch = incremental_linking_on_switch 240 | } else { 241 | default_incremental_linking_switch = incremental_linking_off_switch 242 | } 243 | 244 | # Applies incremental linking or not depending on the current configuration. 245 | config("default_incremental_linking") { 246 | ldflags = default_incremental_linking_switch 247 | } 248 | 249 | # Explicitly on or off incremental linking 250 | config("incremental_linking") { 251 | ldflags = incremental_linking_on_switch 252 | } 253 | config("no_incremental_linking") { 254 | ldflags = incremental_linking_off_switch 255 | } 256 | 257 | # Some large modules can't handle incremental linking in some situations. This 258 | # config should be applied to large modules to turn off incremental linking 259 | # when it won't work. 260 | config("default_large_module_incremental_linking") { 261 | if (symbol_level > 0 && (current_cpu == "x86" || !is_component_build)) { 262 | # When symbols are on, things get so large that the tools fail due to the 263 | # size of the .ilk files. 264 | ldflags = incremental_linking_off_switch 265 | } else { 266 | # Otherwise just do the default incremental linking for this build type. 267 | ldflags = default_incremental_linking_switch 268 | } 269 | } 270 | 271 | # Character set ---------------------------------------------------------------- 272 | 273 | # Not including this config means "ansi" (8-bit system codepage). 274 | config("unicode") { 275 | defines = [ 276 | "_UNICODE", 277 | "UNICODE", 278 | ] 279 | } 280 | 281 | # Lean and mean ---------------------------------------------------------------- 282 | 283 | # Some third party code might not compile with WIN32_LEAN_AND_MEAN so we have 284 | # to have a separate config for it. Remove this config from your target to 285 | # get the "bloaty and accomodating" version of windows.h. 286 | config("lean_and_mean") { 287 | defines = [ "WIN32_LEAN_AND_MEAN" ] 288 | } 289 | 290 | # Nominmax -------------------------------------------------------------------- 291 | 292 | # Some third party code defines NOMINMAX before including windows.h, which 293 | # then causes warnings when it's been previously defined on the command line. 294 | # For such targets, this config can be removed. 295 | 296 | config("nominmax") { 297 | defines = [ "NOMINMAX" ] 298 | } 299 | 300 | # Target WinRT ---------------------------------------------------------------- 301 | 302 | # When targeting Windows Runtime, certain compiler/linker flags are necessary. 303 | 304 | config("target_winrt") { 305 | defines = [ 306 | "WINRT", 307 | "WINAPI_FAMILY=WINAPI_FAMILY_PC_APP", 308 | ] 309 | cflags_cc = [ 310 | "/ZW", 311 | "/EHsc", 312 | ] 313 | } 314 | 315 | # Internal stuff -------------------------------------------------------------- 316 | 317 | # Config used by the MIDL template to disable warnings. 318 | config("midl_warnings") { 319 | if (is_clang) { 320 | # MIDL generates code like "#endif !_MIDL_USE_GUIDDEF_". 321 | cflags = [ "-Wno-extra-tokens" ] 322 | } 323 | } 324 | -------------------------------------------------------------------------------- /src/build/config/win/visual_studio_version.gni: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | # Use of this source code is governed by a BSD-style license that can be 3 | # found in the LICENSE file. 4 | 5 | declare_args() { 6 | # Path to Visual Studio. If empty, the default is used which is to use the 7 | # automatic toolchain in depot_tools. If set, you must also set the 8 | # visual_studio_version and wdk_path. 9 | visual_studio_path = "" 10 | 11 | # Version of Visual Studio pointed to by the visual_studio_path. 12 | # Use "2013" for Visual Studio 2013, or "2013e" for the Express version. 13 | visual_studio_version = "" 14 | 15 | # Directory of the Windows driver kit. If visual_studio_path is empty, this 16 | # will be auto-filled. 17 | wdk_path = "" 18 | 19 | # Full path to the Windows SDK, not including a backslash at the end. 20 | # This value is the default location, override if you have a different 21 | # installation location. 22 | windows_sdk_path = "C:\Program Files (x86)\Windows Kits\10" 23 | 24 | is_win_fastlink = false 25 | } 26 | 27 | if (visual_studio_path == "") { 28 | toolchain_data = 29 | exec_script("../../vs_toolchain.py", [ "get_toolchain_dir" ], "scope") 30 | visual_studio_path = toolchain_data.vs_path 31 | windows_sdk_path = toolchain_data.sdk_path 32 | visual_studio_version = toolchain_data.vs_version 33 | wdk_path = toolchain_data.wdk_dir 34 | visual_studio_runtime_dirs = toolchain_data.runtime_dirs 35 | } else { 36 | assert(visual_studio_version != "", 37 | "You must set the visual_studio_version if you set the path") 38 | assert(wdk_path != "", 39 | "You must set the wdk_path if you set the visual studio path") 40 | visual_studio_runtime_dirs = [] 41 | } 42 | -------------------------------------------------------------------------------- /src/build/toolchain/win/setup_toolchain.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | # Use of this source code is governed by a BSD-style license that can be 3 | # found in the LICENSE file. 4 | # 5 | # Copies the given "win tool" (which the toolchain uses to wrap compiler 6 | # invocations) and the environment blocks for the 32-bit and 64-bit builds on 7 | # Windows to the build directory. 8 | # 9 | # The arguments are the visual studio install location and the location of the 10 | # win tool. The script assumes that the root build directory is the current dir 11 | # and the files will be written to the current directory. 12 | 13 | import errno 14 | import os 15 | import re 16 | import subprocess 17 | import sys 18 | 19 | SCRIPT_DIR = os.path.dirname(__file__) 20 | 21 | def _ExtractImportantEnvironment(output_of_set): 22 | """Extracts environment variables required for the toolchain to run from 23 | a textual dump output by the cmd.exe 'set' command.""" 24 | envvars_to_save = ( 25 | 'goma_.*', # TODO(scottmg): This is ugly, but needed for goma. 26 | 'include', 27 | 'lib', 28 | 'libpath', 29 | 'path', 30 | 'pathext', 31 | 'systemroot', 32 | 'temp', 33 | 'tmp', 34 | ) 35 | env = {} 36 | # This occasionally happens and leads to misleading SYSTEMROOT error messages 37 | # if not caught here. 38 | if output_of_set.count('=') == 0: 39 | raise Exception('Invalid output_of_set. Value is:\n%s' % output_of_set) 40 | for line in output_of_set.splitlines(): 41 | for envvar in envvars_to_save: 42 | if re.match(envvar + '=', line.lower()): 43 | var, setting = line.split('=', 1) 44 | if envvar == 'path': 45 | # Our own rules (for running gyp-win-tool) and other actions in 46 | # Chromium rely on python being in the path. Add the path to this 47 | # python here so that if it's not in the path when ninja is run 48 | # later, python will still be found. 49 | setting = os.path.dirname(sys.executable) + os.pathsep + setting 50 | env[var.upper()] = setting 51 | break 52 | for required in ('SYSTEMROOT', 'TEMP', 'TMP'): 53 | if required not in env: 54 | raise Exception('Environment variable "%s" ' 55 | 'required to be set to valid path' % required) 56 | return env 57 | 58 | 59 | def _DetectVisualStudioPath(): 60 | """Return path to the GYP_MSVS_VERSION of Visual Studio. 61 | """ 62 | 63 | # Use the code in build/vs_toolchain.py to avoid duplicating code. 64 | chromium_dir = os.path.abspath(os.path.join(SCRIPT_DIR, '..', '..', '..')) 65 | sys.path.append(os.path.join(chromium_dir, 'build')) 66 | import vs_toolchain 67 | return vs_toolchain.DetectVisualStudioPath() 68 | 69 | 70 | def _SetupScript(target_cpu, sdk_dir): 71 | """Returns a command (with arguments) to be used to set up the 72 | environment.""" 73 | # Check if we are running in the SDK command line environment and use 74 | # the setup script from the SDK if so. |target_cpu| should be either 75 | # 'x86' or 'x64'. 76 | assert target_cpu in ('x86', 'x64') 77 | if bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', 1))) and sdk_dir: 78 | return [os.path.normpath(os.path.join(sdk_dir, 'Bin/SetEnv.Cmd')), 79 | '/' + target_cpu] 80 | else: 81 | if 'GYP_MSVS_OVERRIDE_PATH' not in os.environ: 82 | os.environ['GYP_MSVS_OVERRIDE_PATH'] = _DetectVisualStudioPath() 83 | # We only support x64-hosted tools. 84 | return [os.path.normpath(os.path.join(os.environ['GYP_MSVS_OVERRIDE_PATH'], 85 | 'VC/vcvarsall.bat')), 86 | 'amd64_x86' if target_cpu == 'x86' else 'amd64'] 87 | 88 | 89 | def _FormatAsEnvironmentBlock(envvar_dict): 90 | """Format as an 'environment block' directly suitable for CreateProcess. 91 | Briefly this is a list of key=value\0, terminated by an additional \0. See 92 | CreateProcess documentation for more details.""" 93 | block = '' 94 | nul = '\0' 95 | for key, value in envvar_dict.iteritems(): 96 | block += key + '=' + value + nul 97 | block += nul 98 | return block 99 | 100 | 101 | def _CopyTool(source_path): 102 | """Copies the given tool to the current directory, including a warning not 103 | to edit it.""" 104 | with open(source_path) as source_file: 105 | tool_source = source_file.readlines() 106 | 107 | # Add header and write it out to the current directory (which should be the 108 | # root build dir). 109 | with open("gyp-win-tool", 'w') as tool_file: 110 | tool_file.write(''.join([tool_source[0], 111 | '# Generated by setup_toolchain.py do not edit.\n'] 112 | + tool_source[1:])) 113 | 114 | 115 | def main(): 116 | if len(sys.argv) != 6: 117 | print('Usage setup_toolchain.py ' 118 | ' ' 119 | ' ') 120 | sys.exit(2) 121 | tool_source = sys.argv[2] 122 | win_sdk_path = sys.argv[3] 123 | runtime_dirs = sys.argv[4] 124 | target_cpu = sys.argv[5] 125 | 126 | _CopyTool(tool_source) 127 | 128 | cpus = ('x86', 'x64') 129 | assert target_cpu in cpus 130 | vc_bin_dir = '' 131 | 132 | # TODO(scottmg|goma): Do we need an equivalent of 133 | # ninja_use_custom_environment_files? 134 | 135 | for cpu in cpus: 136 | # Extract environment variables for subprocesses. 137 | args = _SetupScript(cpu, win_sdk_path) 138 | args.extend(('&&', 'set')) 139 | popen = subprocess.Popen( 140 | args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 141 | variables, _ = popen.communicate() 142 | if popen.returncode != 0: 143 | raise Exception('"%s" failed with error %d' % (args, popen.returncode)) 144 | env = _ExtractImportantEnvironment(variables) 145 | env['PATH'] = runtime_dirs + ';' + env['PATH'] 146 | 147 | if cpu == target_cpu: 148 | for path in env['PATH'].split(os.pathsep): 149 | if os.path.exists(os.path.join(path, 'cl.exe')): 150 | vc_bin_dir = os.path.realpath(path) 151 | break 152 | 153 | # The Windows SDK include directories must be first. They both have a sal.h, 154 | # and the SDK one is newer and the SDK uses some newer features from it not 155 | # present in the Visual Studio one. 156 | # Having the Windows SDK first is also the only way to control which SDK 157 | # version is used. 158 | 159 | if win_sdk_path: 160 | additional_includes = ('{sdk_dir}\\Include\\10.0.10586.0\\shared;' + 161 | '{sdk_dir}\\Include\\10.0.10586.0\\um;' + 162 | '{sdk_dir}\\Include\\10.0.10586.0\\winrt;').format( 163 | sdk_dir=win_sdk_path) 164 | env['INCLUDE'] = additional_includes + env['INCLUDE'] 165 | env_block = _FormatAsEnvironmentBlock(env) 166 | with open('environment.' + cpu, 'wb') as f: 167 | f.write(env_block) 168 | 169 | # Create a store app version of the environment. 170 | if 'LIB' in env: 171 | env['LIB'] = env['LIB'] .replace(r'\VC\LIB', r'\VC\LIB\STORE') 172 | if 'LIBPATH' in env: 173 | env['LIBPATH'] = env['LIBPATH'].replace(r'\VC\LIB', r'\VC\LIB\STORE') 174 | env_block = _FormatAsEnvironmentBlock(env) 175 | with open('environment.winrt_' + cpu, 'wb') as f: 176 | f.write(env_block) 177 | 178 | assert vc_bin_dir 179 | print 'vc_bin_dir = "%s"' % vc_bin_dir 180 | 181 | 182 | if __name__ == '__main__': 183 | main() 184 | -------------------------------------------------------------------------------- /src/build/vs_toolchain.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 3 | # Use of this source code is governed by a BSD-style license that can be 4 | # found in the LICENSE file. 5 | 6 | import json 7 | import os 8 | import pipes 9 | import shutil 10 | import subprocess 11 | import sys 12 | 13 | 14 | script_dir = os.path.dirname(os.path.realpath(__file__)) 15 | chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir)) 16 | SRC_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib')) 18 | json_data_file = os.path.join(script_dir, 'win_toolchain.json') 19 | 20 | 21 | import gyp 22 | 23 | 24 | # Use MSVS2013 as the default toolchain. 25 | CURRENT_DEFAULT_TOOLCHAIN_VERSION = '2013' 26 | 27 | 28 | def SetEnvironmentAndGetRuntimeDllDirs(): 29 | """Sets up os.environ to use the depot_tools VS toolchain with gyp, and 30 | returns the location of the VS runtime DLLs so they can be copied into 31 | the output directory after gyp generation. 32 | """ 33 | vs_runtime_dll_dirs = None 34 | depot_tools_win_toolchain = \ 35 | bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) 36 | # When running on a non-Windows host, only do this if the SDK has explicitly 37 | # been downloaded before (in which case json_data_file will exist). 38 | if ((sys.platform in ('win32', 'cygwin') or os.path.exists(json_data_file)) 39 | and depot_tools_win_toolchain): 40 | if ShouldUpdateToolchain(): 41 | Update() 42 | with open(json_data_file, 'r') as tempf: 43 | toolchain_data = json.load(tempf) 44 | 45 | toolchain = toolchain_data['path'] 46 | version = toolchain_data['version'] 47 | win_sdk = toolchain_data.get('win_sdk') 48 | if not win_sdk: 49 | win_sdk = toolchain_data['win8sdk'] 50 | wdk = toolchain_data['wdk'] 51 | # TODO(scottmg): The order unfortunately matters in these. They should be 52 | # split into separate keys for x86 and x64. (See CopyVsRuntimeDlls call 53 | # below). http://crbug.com/345992 54 | vs_runtime_dll_dirs = toolchain_data['runtime_dirs'] 55 | 56 | os.environ['GYP_MSVS_OVERRIDE_PATH'] = toolchain 57 | os.environ['GYP_MSVS_VERSION'] = version 58 | # We need to make sure windows_sdk_path is set to the automated 59 | # toolchain values in GYP_DEFINES, but don't want to override any 60 | # otheroptions.express 61 | # values there. 62 | gyp_defines_dict = gyp.NameValueListToDict(gyp.ShlexEnv('GYP_DEFINES')) 63 | gyp_defines_dict['windows_sdk_path'] = win_sdk 64 | os.environ['GYP_DEFINES'] = ' '.join('%s=%s' % (k, pipes.quote(str(v))) 65 | for k, v in gyp_defines_dict.iteritems()) 66 | os.environ['WINDOWSSDKDIR'] = win_sdk 67 | os.environ['WDK_DIR'] = wdk 68 | # Include the VS runtime in the PATH in case it's not machine-installed. 69 | runtime_path = ';'.join(vs_runtime_dll_dirs) 70 | os.environ['PATH'] = runtime_path + ';' + os.environ['PATH'] 71 | elif sys.platform == 'win32' and not depot_tools_win_toolchain: 72 | if not 'GYP_MSVS_OVERRIDE_PATH' in os.environ: 73 | os.environ['GYP_MSVS_OVERRIDE_PATH'] = DetectVisualStudioPath() 74 | if not 'GYP_MSVS_VERSION' in os.environ: 75 | os.environ['GYP_MSVS_VERSION'] = GetVisualStudioVersion() 76 | 77 | return vs_runtime_dll_dirs 78 | 79 | 80 | def _RegistryGetValueUsingWinReg(key, value): 81 | """Use the _winreg module to obtain the value of a registry key. 82 | 83 | Args: 84 | key: The registry key. 85 | value: The particular registry value to read. 86 | Return: 87 | contents of the registry key's value, or None on failure. Throws 88 | ImportError if _winreg is unavailable. 89 | """ 90 | import _winreg 91 | try: 92 | root, subkey = key.split('\\', 1) 93 | assert root == 'HKLM' # Only need HKLM for now. 94 | with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, subkey) as hkey: 95 | return _winreg.QueryValueEx(hkey, value)[0] 96 | except WindowsError: 97 | return None 98 | 99 | 100 | def _RegistryGetValue(key, value): 101 | try: 102 | return _RegistryGetValueUsingWinReg(key, value) 103 | except ImportError: 104 | raise Exception('The python library _winreg not found.') 105 | 106 | 107 | def GetVisualStudioVersion(): 108 | """Return GYP_MSVS_VERSION of Visual Studio. 109 | """ 110 | return os.environ.get('GYP_MSVS_VERSION', CURRENT_DEFAULT_TOOLCHAIN_VERSION) 111 | 112 | 113 | def DetectVisualStudioPath(): 114 | """Return path to the GYP_MSVS_VERSION of Visual Studio. 115 | """ 116 | 117 | # Note that this code is used from 118 | # build/toolchain/win/setup_toolchain.py as well. 119 | version_as_year = GetVisualStudioVersion() 120 | year_to_version = { 121 | '2013': '12.0', 122 | '2015': '14.0', 123 | } 124 | if version_as_year not in year_to_version: 125 | raise Exception(('Visual Studio version %s (from GYP_MSVS_VERSION)' 126 | ' not supported. Supported versions are: %s') % ( 127 | version_as_year, ', '.join(year_to_version.keys()))) 128 | version = year_to_version[version_as_year] 129 | keys = [r'HKLM\Software\Microsoft\VisualStudio\%s' % version, 130 | r'HKLM\Software\Wow6432Node\Microsoft\VisualStudio\%s' % version] 131 | for key in keys: 132 | path = _RegistryGetValue(key, 'InstallDir') 133 | if not path: 134 | continue 135 | path = os.path.normpath(os.path.join(path, '..', '..')) 136 | return path 137 | 138 | raise Exception(('Visual Studio Version %s (from GYP_MSVS_VERSION)' 139 | ' not found.') % (version_as_year)) 140 | 141 | 142 | def _VersionNumber(): 143 | """Gets the standard version number ('120', '140', etc.) based on 144 | GYP_MSVS_VERSION.""" 145 | vs_version = GetVisualStudioVersion() 146 | if vs_version == '2013': 147 | return '120' 148 | elif vs_version == '2015': 149 | return '140' 150 | else: 151 | raise ValueError('Unexpected GYP_MSVS_VERSION') 152 | 153 | 154 | def _CopyRuntimeImpl(target, source): 155 | """Copy |source| to |target| if it doesn't already exist or if it 156 | needs to be updated. 157 | """ 158 | if (os.path.isdir(os.path.dirname(target)) and 159 | (not os.path.isfile(target) or 160 | os.stat(target).st_mtime != os.stat(source).st_mtime)): 161 | print 'Copying %s to %s...' % (source, target) 162 | if os.path.exists(target): 163 | os.unlink(target) 164 | shutil.copy2(source, target) 165 | 166 | 167 | def _CopyRuntime2013(target_dir, source_dir, dll_pattern): 168 | """Copy both the msvcr and msvcp runtime DLLs, only if the target doesn't 169 | exist, but the target directory does exist.""" 170 | for file_part in ('p', 'r'): 171 | dll = dll_pattern % file_part 172 | target = os.path.join(target_dir, dll) 173 | source = os.path.join(source_dir, dll) 174 | _CopyRuntimeImpl(target, source) 175 | 176 | 177 | def _CopyRuntime2015(target_dir, source_dir, dll_pattern): 178 | """Copy both the msvcp and vccorlib runtime DLLs, only if the target doesn't 179 | exist, but the target directory does exist.""" 180 | for file_part in ('msvcp', 'vccorlib', 'vcruntime'): 181 | dll = dll_pattern % file_part 182 | target = os.path.join(target_dir, dll) 183 | source = os.path.join(source_dir, dll) 184 | _CopyRuntimeImpl(target, source) 185 | 186 | 187 | def _CopyRuntime(target_dir, source_dir, target_cpu, debug): 188 | """Copy the VS runtime DLLs, only if the target doesn't exist, but the target 189 | directory does exist. Handles VS 2013 and VS 2015.""" 190 | suffix = "d.dll" if debug else ".dll" 191 | if GetVisualStudioVersion() == '2015': 192 | _CopyRuntime2015(target_dir, source_dir, '%s140' + suffix) 193 | if debug: 194 | _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbased.dll'), 195 | os.path.join(source_dir, 'ucrtbased.dll')) 196 | else: 197 | _CopyRuntime2013(target_dir, source_dir, 'msvc%s120' + suffix) 198 | 199 | # Copy the PGO runtime library to the release directories. 200 | if not debug and os.environ.get('GYP_MSVS_OVERRIDE_PATH'): 201 | pgo_x86_runtime_dir = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'), 202 | 'VC', 'bin') 203 | pgo_x64_runtime_dir = os.path.join(pgo_x86_runtime_dir, 'amd64') 204 | pgo_runtime_dll = 'pgort' + _VersionNumber() + '.dll' 205 | if target_cpu == "x86": 206 | source_x86 = os.path.join(pgo_x86_runtime_dir, pgo_runtime_dll) 207 | if os.path.exists(source_x86): 208 | _CopyRuntimeImpl(os.path.join(target_dir, pgo_runtime_dll), source_x86) 209 | elif target_cpu == "x64": 210 | source_x64 = os.path.join(pgo_x64_runtime_dir, pgo_runtime_dll) 211 | if os.path.exists(source_x64): 212 | _CopyRuntimeImpl(os.path.join(target_dir, pgo_runtime_dll), 213 | source_x64) 214 | else: 215 | raise NotImplementedError("Unexpected target_cpu value:" + target_cpu) 216 | 217 | 218 | def CopyVsRuntimeDlls(output_dir, runtime_dirs): 219 | """Copies the VS runtime DLLs from the given |runtime_dirs| to the output 220 | directory so that even if not system-installed, built binaries are likely to 221 | be able to run. 222 | 223 | This needs to be run after gyp has been run so that the expected target 224 | output directories are already created. 225 | 226 | This is used for the GYP build and gclient runhooks. 227 | """ 228 | x86, x64 = runtime_dirs 229 | out_debug = os.path.join(output_dir, 'Debug') 230 | out_debug_nacl64 = os.path.join(output_dir, 'Debug', 'x64') 231 | out_release = os.path.join(output_dir, 'Release') 232 | out_release_nacl64 = os.path.join(output_dir, 'Release', 'x64') 233 | out_debug_x64 = os.path.join(output_dir, 'Debug_x64') 234 | out_release_x64 = os.path.join(output_dir, 'Release_x64') 235 | 236 | if os.path.exists(out_debug) and not os.path.exists(out_debug_nacl64): 237 | os.makedirs(out_debug_nacl64) 238 | if os.path.exists(out_release) and not os.path.exists(out_release_nacl64): 239 | os.makedirs(out_release_nacl64) 240 | _CopyRuntime(out_debug, x86, "x86", debug=True) 241 | _CopyRuntime(out_release, x86, "x86", debug=False) 242 | _CopyRuntime(out_debug_x64, x64, "x64", debug=True) 243 | _CopyRuntime(out_release_x64, x64, "x64", debug=False) 244 | _CopyRuntime(out_debug_nacl64, x64, "x64", debug=True) 245 | _CopyRuntime(out_release_nacl64, x64, "x64", debug=False) 246 | 247 | 248 | def CopyDlls(target_dir, configuration, target_cpu): 249 | """Copy the VS runtime DLLs into the requested directory as needed. 250 | 251 | configuration is one of 'Debug' or 'Release'. 252 | target_cpu is one of 'x86' or 'x64'. 253 | 254 | The debug configuration gets both the debug and release DLLs; the 255 | release config only the latter. 256 | 257 | This is used for the GN build. 258 | """ 259 | vs_runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() 260 | if not vs_runtime_dll_dirs: 261 | return 262 | 263 | x64_runtime, x86_runtime = vs_runtime_dll_dirs 264 | runtime_dir = x64_runtime if target_cpu == 'x64' else x86_runtime 265 | _CopyRuntime(target_dir, runtime_dir, target_cpu, debug=False) 266 | if configuration == 'Debug': 267 | _CopyRuntime(target_dir, runtime_dir, target_cpu, debug=True) 268 | 269 | 270 | def _GetDesiredVsToolchainHashes(): 271 | """Load a list of SHA1s corresponding to the toolchains that we want installed 272 | to build with.""" 273 | if GetVisualStudioVersion() == '2015': 274 | # Update 1 with Debuggers, UCRT installers and ucrtbased.dll 275 | return ['5a85cf1ce842f7cc96b9d17039a445a9dc9cf0dd'] 276 | else: 277 | # Default to VS2013. 278 | return ['4087e065abebdca6dbd0caca2910c6718d2ec67f'] 279 | 280 | 281 | def ShouldUpdateToolchain(): 282 | """Check if the toolchain should be upgraded.""" 283 | if not os.path.exists(json_data_file): 284 | return True 285 | with open(json_data_file, 'r') as tempf: 286 | toolchain_data = json.load(tempf) 287 | version = toolchain_data['version'] 288 | env_version = GetVisualStudioVersion() 289 | # If there's a mismatch between the version set in the environment and the one 290 | # in the json file then the toolchain should be updated. 291 | return version != env_version 292 | 293 | 294 | def Update(force=False): 295 | """Requests an update of the toolchain to the specific hashes we have at 296 | this revision. The update outputs a .json of the various configuration 297 | information required to pass to gyp which we use in |GetToolchainDir()|. 298 | """ 299 | if force != False and force != '--force': 300 | print >>sys.stderr, 'Unknown parameter "%s"' % force 301 | return 1 302 | if force == '--force' or os.path.exists(json_data_file): 303 | force = True 304 | 305 | depot_tools_win_toolchain = \ 306 | bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) 307 | if ((sys.platform in ('win32', 'cygwin') or force) and 308 | depot_tools_win_toolchain): 309 | import find_depot_tools 310 | depot_tools_path = find_depot_tools.add_depot_tools_to_path() 311 | get_toolchain_args = [ 312 | sys.executable, 313 | os.path.join(depot_tools_path, 314 | 'win_toolchain', 315 | 'get_toolchain_if_necessary.py'), 316 | '--output-json', json_data_file, 317 | ] + _GetDesiredVsToolchainHashes() 318 | if force: 319 | get_toolchain_args.append('--force') 320 | subprocess.check_call(get_toolchain_args) 321 | 322 | return 0 323 | 324 | 325 | def GetToolchainDir(): 326 | """Gets location information about the current toolchain (must have been 327 | previously updated by 'update'). This is used for the GN build.""" 328 | runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() 329 | 330 | # If WINDOWSSDKDIR is not set, search the default SDK path and set it. 331 | if not 'WINDOWSSDKDIR' in os.environ: 332 | default_sdk_path = 'C:\\Program Files (x86)\\Windows Kits\\10' 333 | if os.path.isdir(default_sdk_path): 334 | os.environ['WINDOWSSDKDIR'] = default_sdk_path 335 | 336 | print '''vs_path = "%s" 337 | sdk_path = "%s" 338 | vs_version = "%s" 339 | wdk_dir = "%s" 340 | runtime_dirs = "%s" 341 | ''' % ( 342 | os.environ['GYP_MSVS_OVERRIDE_PATH'], 343 | os.environ['WINDOWSSDKDIR'], 344 | GetVisualStudioVersion(), 345 | os.environ.get('WDK_DIR', ''), 346 | ';'.join(runtime_dll_dirs or ['None'])) 347 | 348 | 349 | def main(): 350 | commands = { 351 | 'update': Update, 352 | 'get_toolchain_dir': GetToolchainDir, 353 | 'copy_dlls': CopyDlls, 354 | } 355 | if len(sys.argv) < 2 or sys.argv[1] not in commands: 356 | print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands) 357 | return 1 358 | return commands[sys.argv[1]](*sys.argv[2:]) 359 | 360 | 361 | if __name__ == '__main__': 362 | sys.exit(main()) 363 | -------------------------------------------------------------------------------- /src/chrome/VERSION: -------------------------------------------------------------------------------- 1 | MAJOR=49 2 | MINOR=0 3 | BUILD=2623 4 | PATCH=113 5 | -------------------------------------------------------------------------------- /src/chrome/app/delay_load_hook_win.cc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #include "chrome/app/delay_load_hook_win.h" 6 | 7 | #include 8 | 9 | #include "base/logging.h" 10 | #include "base/strings/string_util.h" 11 | #include "base/strings/stringprintf.h" 12 | 13 | // So long as these symbols are supplied to the final binary through an 14 | // object file (as opposed to indirectly through a library), these pointers 15 | // will override the CRT's symbols and direct the notifications to our hook. 16 | // Alternatively referencing the ChromeDelayLoadHook function somehow will 17 | // cause this declaration of these variables to take preference to the delay 18 | // load runtime's defaults (in delayimp.lib). 19 | const PfnDliHook __pfnDliNotifyHook2 = ChromeDelayLoadHook; 20 | const PfnDliHook __pfnDliFailureHook2 = ChromeDelayLoadHook; 21 | 22 | 23 | namespace { 24 | 25 | FARPROC OnPreLoadLibrary(DelayLoadInfo* info) { 26 | // If the DLL name ends with "-delay.dll", this call is about one of our 27 | // custom import libraries. In this case we need to snip the suffix off, 28 | // and bind to the real DLL. 29 | std::string dll_name(info->szDll); 30 | const char kDelaySuffix[] = "-delay.dll"; 31 | if (base::EndsWith(dll_name, kDelaySuffix, 32 | base::CompareCase::INSENSITIVE_ASCII)) { 33 | // Trim the "-delay.dll" suffix from the string. 34 | dll_name.resize(dll_name.length() - (sizeof(kDelaySuffix) - 1)); 35 | dll_name.append(".dll"); 36 | 37 | return reinterpret_cast(::LoadLibraryA(dll_name.c_str())); 38 | } 39 | 40 | return NULL; 41 | } 42 | 43 | } // namespace 44 | 45 | // This function is a delay load notification hook. It is invoked by the 46 | // delay load support in the visual studio runtime. 47 | // See http://msdn.microsoft.com/en-us/library/z9h1h6ty(v=vs.100).aspx for 48 | // details. 49 | extern "C" FARPROC WINAPI ChromeDelayLoadHook(unsigned reason, 50 | DelayLoadInfo* info) { 51 | switch (reason) { 52 | case dliNoteStartProcessing: 53 | case dliNoteEndProcessing: 54 | // Nothing to do here. 55 | break; 56 | 57 | case dliNotePreLoadLibrary: 58 | return OnPreLoadLibrary(info); 59 | break; 60 | 61 | case dliNotePreGetProcAddress: 62 | // Nothing to do here. 63 | break; 64 | 65 | case dliFailLoadLib: 66 | case dliFailGetProc: 67 | // Returning NULL from error notifications will cause the delay load 68 | // runtime to raise a VcppException structured exception, that some code 69 | // might want to handle. 70 | return NULL; 71 | break; 72 | 73 | default: 74 | NOTREACHED() << "Impossible delay load notification."; 75 | break; 76 | } 77 | 78 | // Returning NULL causes the delay load machinery to perform default 79 | // processing for this notification. 80 | return NULL; 81 | } 82 | -------------------------------------------------------------------------------- /src/chrome/browser/permissions/permission_uma_util.cc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #include "chrome/browser/permissions/permission_uma_util.h" 6 | 7 | #include 8 | 9 | #include "base/metrics/histogram_macros.h" 10 | #include "base/strings/stringprintf.h" 11 | #include "chrome/browser/browser_process.h" 12 | #include "chrome/browser/permissions/permission_manager.h" 13 | #include "chrome/browser/permissions/permission_util.h" 14 | #include "chrome/browser/profiles/profile.h" 15 | #include "components/rappor/rappor_service.h" 16 | #include "components/rappor/rappor_utils.h" 17 | #include "content/public/browser/permission_type.h" 18 | #include "content/public/common/origin_util.h" 19 | #include "url/gurl.h" 20 | 21 | // UMA keys need to be statically initialized so plain function would not 22 | // work. Use a Macro instead. 23 | #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ 24 | permission_insecure, action) \ 25 | UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ 26 | if (secure_origin) { \ 27 | UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ 28 | PERMISSION_ACTION_NUM); \ 29 | } else { \ 30 | UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ 31 | PERMISSION_ACTION_NUM); \ 32 | } 33 | 34 | using content::PermissionType; 35 | 36 | namespace { 37 | 38 | // Enum for UMA purposes, make sure you update histograms.xml if you add new 39 | // permission actions. Never delete or reorder an entry; only add new entries 40 | // immediately before PERMISSION_NUM 41 | enum PermissionAction { 42 | GRANTED = 0, 43 | DENIED = 1, 44 | DISMISSED = 2, 45 | IGNORED = 3, 46 | REVOKED = 4, 47 | REENABLED = 5, 48 | REQUESTED = 6, 49 | 50 | // Always keep this at the end. 51 | PERMISSION_ACTION_NUM, 52 | }; 53 | 54 | // Deprecated. This method is used for the single-dimensional RAPPOR metrics 55 | // that are being replaced by the multi-dimensional ones. 56 | const std::string GetRapporMetric(PermissionType permission, 57 | PermissionAction action) { 58 | std::string action_str; 59 | switch (action) { 60 | case GRANTED: 61 | action_str = "Granted"; 62 | break; 63 | case DENIED: 64 | action_str = "Denied"; 65 | break; 66 | case DISMISSED: 67 | action_str = "Dismissed"; 68 | break; 69 | case IGNORED: 70 | action_str = "Ignored"; 71 | break; 72 | case REVOKED: 73 | action_str = "Revoked"; 74 | break; 75 | default: 76 | NOTREACHED(); 77 | break; 78 | } 79 | 80 | std::string permission_str = 81 | PermissionUtil::GetPermissionString(permission); 82 | if (permission_str.empty()) 83 | return ""; 84 | return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", 85 | permission_str.c_str(), action_str.c_str()); 86 | } 87 | 88 | void RecordPermissionAction(PermissionType permission, 89 | PermissionAction action, 90 | const GURL& requesting_origin) { 91 | bool secure_origin = content::IsOriginSecure(requesting_origin); 92 | 93 | switch (permission) { 94 | case PermissionType::GEOLOCATION: 95 | PERMISSION_ACTION_UMA( 96 | secure_origin, 97 | "Permissions.Action.Geolocation", 98 | "Permissions.Action.SecureOrigin.Geolocation", 99 | "Permissions.Action.InsecureOrigin.Geolocation", 100 | action); 101 | break; 102 | case PermissionType::NOTIFICATIONS: 103 | PERMISSION_ACTION_UMA( 104 | secure_origin, 105 | "Permissions.Action.Notifications", 106 | "Permissions.Action.SecureOrigin.Notifications", 107 | "Permissions.Action.InsecureOrigin.Notifications", 108 | action); 109 | break; 110 | case PermissionType::MIDI_SYSEX: 111 | PERMISSION_ACTION_UMA( 112 | secure_origin, 113 | "Permissions.Action.MidiSysEx", 114 | "Permissions.Action.SecureOrigin.MidiSysEx", 115 | "Permissions.Action.InsecureOrigin.MidiSysEx", 116 | action); 117 | break; 118 | case PermissionType::PUSH_MESSAGING: 119 | PERMISSION_ACTION_UMA( 120 | secure_origin, 121 | "Permissions.Action.PushMessaging", 122 | "Permissions.Action.SecureOrigin.PushMessaging", 123 | "Permissions.Action.InsecureOrigin.PushMessaging", 124 | action); 125 | break; 126 | case PermissionType::PROTECTED_MEDIA_IDENTIFIER: 127 | PERMISSION_ACTION_UMA( 128 | secure_origin, 129 | "Permissions.Action.ProtectedMedia", 130 | "Permissions.Action.SecureOrigin.ProtectedMedia", 131 | "Permissions.Action.InsecureOrigin.ProtectedMedia", 132 | action); 133 | break; 134 | case PermissionType::DURABLE_STORAGE: 135 | PERMISSION_ACTION_UMA( 136 | secure_origin, 137 | "Permissions.Action.DurableStorage", 138 | "Permissions.Action.SecureOrigin.DurableStorage", 139 | "Permissions.Action.InsecureOrigin.DurableStorage", 140 | action); 141 | break; 142 | case PermissionType::AUDIO_CAPTURE: 143 | // Media permissions are disabled on insecure origins, so there's no 144 | // need to record metrics for secure/insecue. 145 | UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", action, 146 | PERMISSION_ACTION_NUM); 147 | break; 148 | case PermissionType::VIDEO_CAPTURE: 149 | UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", action, 150 | PERMISSION_ACTION_NUM); 151 | break; 152 | case PermissionType::MIDI: 153 | case PermissionType::NUM: 154 | NOTREACHED() << "PERMISSION " 155 | << PermissionUtil::GetPermissionString(permission) 156 | << " not accounted for"; 157 | } 158 | 159 | // There are two sets of semi-redundant RAPPOR metrics being reported: 160 | // The soon-to-be-deprecated single dimensional ones, and the new 161 | // multi-dimensional ones. 162 | rappor::RapporService* rappor_service = g_browser_process->rappor_service(); 163 | const std::string rappor_metric = GetRapporMetric(permission, action); 164 | if (!rappor_metric.empty()) 165 | rappor::SampleDomainAndRegistryFromGURL( 166 | rappor_service, rappor_metric, requesting_origin); 167 | 168 | // Add multi-dimensional RAPPOR reporting for safe-browsing users. 169 | std::string permission_str = 170 | PermissionUtil::GetPermissionString(permission); 171 | if (!rappor_service || permission_str.empty()) 172 | return; 173 | 174 | scoped_ptr sample = 175 | rappor_service->CreateSample(rappor::SAFEBROWSING_RAPPOR_TYPE); 176 | sample->SetStringField("Scheme", requesting_origin.scheme()); 177 | sample->SetStringField("Host", requesting_origin.host()); 178 | sample->SetStringField("Port", requesting_origin.port()); 179 | sample->SetStringField("Domain", 180 | rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 181 | sample->SetFlagsField("Actions", static_cast(1) << action, 182 | PermissionAction::PERMISSION_ACTION_NUM); 183 | rappor_service->RecordSampleObj("Permissions.Action." + permission_str, 184 | std::move(sample)); 185 | } 186 | 187 | std::string PermissionTypeToString(PermissionType permission_type) { 188 | switch (permission_type) { 189 | case PermissionType::MIDI_SYSEX: 190 | return "MidiSysex"; 191 | case PermissionType::PUSH_MESSAGING: 192 | return "PushMessaging"; 193 | case PermissionType::NOTIFICATIONS: 194 | return "Notifications"; 195 | case PermissionType::GEOLOCATION: 196 | return "Geolocation"; 197 | case PermissionType::PROTECTED_MEDIA_IDENTIFIER: 198 | return "ProtectedMediaIdentifier"; 199 | case PermissionType::DURABLE_STORAGE: 200 | return "DurableStorage"; 201 | case PermissionType::MIDI: 202 | return "Midi"; 203 | case PermissionType::AUDIO_CAPTURE: 204 | return "AudioRecording"; 205 | case PermissionType::VIDEO_CAPTURE: 206 | return "VideoRecording"; 207 | case PermissionType::NUM: 208 | break; 209 | } 210 | NOTREACHED(); 211 | return std::string(); 212 | } 213 | 214 | void RecordPermissionRequest(PermissionType permission, 215 | const GURL& requesting_origin, 216 | const GURL& embedding_origin, 217 | Profile* profile) { 218 | bool secure_origin = content::IsOriginSecure(requesting_origin); 219 | if (permission == PermissionType::GEOLOCATION) { 220 | rappor::SampleDomainAndRegistryFromGURL( 221 | g_browser_process->rappor_service(), 222 | "ContentSettings.PermissionRequested.Geolocation.Url", 223 | requesting_origin); 224 | } else if (permission == PermissionType::NOTIFICATIONS) { 225 | rappor::SampleDomainAndRegistryFromGURL( 226 | g_browser_process->rappor_service(), 227 | "ContentSettings.PermissionRequested.Notifications.Url", 228 | requesting_origin); 229 | } 230 | UMA_HISTOGRAM_ENUMERATION( 231 | "ContentSettings.PermissionRequested", 232 | static_cast(permission), 233 | static_cast(PermissionType::NUM)); 234 | if (secure_origin) { 235 | UMA_HISTOGRAM_ENUMERATION( 236 | "ContentSettings.PermissionRequested_SecureOrigin", 237 | static_cast(permission), 238 | static_cast(PermissionType::NUM)); 239 | } else { 240 | UMA_HISTOGRAM_ENUMERATION( 241 | "ContentSettings.PermissionRequested_InsecureOrigin", 242 | static_cast(permission), 243 | static_cast(PermissionType::NUM)); 244 | } 245 | 246 | // In order to gauge the compatibility risk of implementing an improved 247 | // iframe permissions security model, we would like to know the ratio of 248 | // same-origin to cross-origin permission requests. Our estimate of this 249 | // ratio could be somewhat biased by repeated requests coming from a 250 | // single frame, but we expect this to be insignificant. 251 | if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) { 252 | content::PermissionManager* manager = profile->GetPermissionManager(); 253 | if (!manager) 254 | return; 255 | content::PermissionStatus embedding_permission_status = 256 | manager->GetPermissionStatus(permission, embedding_origin, 257 | embedding_origin); 258 | 259 | base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( 260 | "Permissions.Requested.CrossOrigin_" + 261 | PermissionTypeToString(permission), 262 | 1, content::PERMISSION_STATUS_LAST, content::PERMISSION_STATUS_LAST + 1, 263 | base::HistogramBase::kUmaTargetedHistogramFlag); 264 | histogram->Add(embedding_permission_status); 265 | } else { 266 | UMA_HISTOGRAM_ENUMERATION( 267 | "Permissions.Requested.SameOrigin", 268 | static_cast(permission), 269 | static_cast(PermissionType::NUM)); 270 | } 271 | } 272 | 273 | } // namespace 274 | 275 | // Make sure you update histograms.xml permission histogram_suffix if you 276 | // add new permission 277 | void PermissionUmaUtil::PermissionRequested(PermissionType permission, 278 | const GURL& requesting_origin, 279 | const GURL& embedding_origin, 280 | Profile* profile) { 281 | RecordPermissionRequest(permission, requesting_origin, embedding_origin, 282 | profile); 283 | } 284 | 285 | void PermissionUmaUtil::PermissionGranted(PermissionType permission, 286 | const GURL& requesting_origin) { 287 | RecordPermissionAction(permission, GRANTED, requesting_origin); 288 | } 289 | 290 | void PermissionUmaUtil::PermissionDenied(PermissionType permission, 291 | const GURL& requesting_origin) { 292 | RecordPermissionAction(permission, DENIED, requesting_origin); 293 | } 294 | 295 | void PermissionUmaUtil::PermissionDismissed(PermissionType permission, 296 | const GURL& requesting_origin) { 297 | RecordPermissionAction(permission, DISMISSED, requesting_origin); 298 | } 299 | 300 | void PermissionUmaUtil::PermissionIgnored(PermissionType permission, 301 | const GURL& requesting_origin) { 302 | RecordPermissionAction(permission, IGNORED, requesting_origin); 303 | } 304 | 305 | void PermissionUmaUtil::PermissionRevoked(PermissionType permission, 306 | const GURL& revoked_origin) { 307 | // TODO(tsergeant): Expand metrics definitions for revocation to include all 308 | // permissions. 309 | if (permission == PermissionType::NOTIFICATIONS || 310 | permission == PermissionType::GEOLOCATION || 311 | permission == PermissionType::AUDIO_CAPTURE || 312 | permission == PermissionType::VIDEO_CAPTURE) { 313 | RecordPermissionAction(permission, REVOKED, revoked_origin); 314 | } 315 | } 316 | -------------------------------------------------------------------------------- /src/chrome/browser/ui/browser_ui_prefs.cc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #include "chrome/browser/ui/browser_ui_prefs.h" 6 | 7 | #include "base/prefs/pref_registry_simple.h" 8 | #include "base/prefs/pref_service.h" 9 | #include "base/prefs/scoped_user_pref_update.h" 10 | #include "build/build_config.h" 11 | #include "chrome/browser/first_run/first_run.h" 12 | #include "chrome/browser/profiles/profile.h" 13 | #include "chrome/common/pref_names.h" 14 | #include "components/pref_registry/pref_registry_syncable.h" 15 | #include "components/translate/core/common/translate_pref_names.h" 16 | #include "content/public/common/webrtc_ip_handling_policy.h" 17 | 18 | #if defined(OS_WIN) 19 | #include "base/win/windows_version.h" 20 | #endif 21 | 22 | namespace chrome { 23 | 24 | void RegisterBrowserPrefs(PrefRegistrySimple* registry) { 25 | registry->RegisterIntegerPref(prefs::kOptionsWindowLastTabIndex, 0); 26 | registry->RegisterBooleanPref(prefs::kAllowFileSelectionDialogs, true); 27 | registry->RegisterIntegerPref(prefs::kShowFirstRunBubbleOption, 28 | first_run::FIRST_RUN_BUBBLE_DONT_SHOW); 29 | } 30 | 31 | void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { 32 | registry->RegisterBooleanPref( 33 | prefs::kHomePageIsNewTabPage, 34 | true, 35 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 36 | registry->RegisterBooleanPref( 37 | prefs::kShowHomeButton, 38 | true, 39 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 40 | registry->RegisterBooleanPref( 41 | prefs::kDeleteBrowsingHistory, 42 | true, 43 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 44 | registry->RegisterBooleanPref( 45 | prefs::kDeleteDownloadHistory, 46 | true, 47 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 48 | registry->RegisterBooleanPref( 49 | prefs::kDeleteCache, 50 | true, 51 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 52 | registry->RegisterBooleanPref( 53 | prefs::kDeleteCookies, 54 | true, 55 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 56 | registry->RegisterBooleanPref( 57 | prefs::kDeletePasswords, 58 | false, 59 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 60 | registry->RegisterBooleanPref( 61 | prefs::kDeleteFormData, 62 | false, 63 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 64 | registry->RegisterBooleanPref( 65 | prefs::kDeleteHostedAppsData, 66 | false, 67 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 68 | registry->RegisterIntegerPref( 69 | prefs::kDeleteTimePeriod, 70 | 0, 71 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 72 | registry->RegisterInt64Pref(prefs::kLastClearBrowsingDataTime, 0); 73 | registry->RegisterIntegerPref(prefs::kModuleConflictBubbleShown, 0); 74 | registry->RegisterBooleanPref(prefs::kCheckDefaultBrowser, true); 75 | bool reset_check_default = false; 76 | #if defined(OS_WIN) 77 | reset_check_default = base::win::GetVersion() >= base::win::VERSION_WIN10; 78 | #endif 79 | registry->RegisterBooleanPref(prefs::kResetCheckDefaultBrowser, 80 | reset_check_default); 81 | registry->RegisterBooleanPref(prefs::kWebAppCreateOnDesktop, true); 82 | registry->RegisterBooleanPref(prefs::kWebAppCreateInAppsMenu, true); 83 | registry->RegisterBooleanPref(prefs::kWebAppCreateInQuickLaunchBar, true); 84 | registry->RegisterBooleanPref( 85 | prefs::kEnableTranslate, 86 | true, 87 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 88 | registry->RegisterStringPref(prefs::kCloudPrintEmail, std::string()); 89 | registry->RegisterBooleanPref(prefs::kCloudPrintProxyEnabled, true); 90 | registry->RegisterBooleanPref(prefs::kCloudPrintSubmitEnabled, true); 91 | registry->RegisterBooleanPref(prefs::kDevToolsDisabled, false); 92 | registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacement); 93 | registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacementPopup); 94 | registry->RegisterDictionaryPref(prefs::kAppWindowPlacement); 95 | registry->RegisterBooleanPref(prefs::kImportAutofillFormData, true); 96 | registry->RegisterBooleanPref(prefs::kImportBookmarks, true); 97 | registry->RegisterBooleanPref(prefs::kImportHistory, true); 98 | registry->RegisterBooleanPref(prefs::kImportHomepage, true); 99 | registry->RegisterBooleanPref(prefs::kImportSavedPasswords, true); 100 | registry->RegisterBooleanPref(prefs::kImportSearchEngine, true); 101 | registry->RegisterBooleanPref( 102 | prefs::kEnableDoNotTrack, 103 | true, 104 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 105 | #if defined(ENABLE_WEBRTC) 106 | // TODO(guoweis): Remove next 2 options at M50. 107 | registry->RegisterBooleanPref(prefs::kWebRTCMultipleRoutesEnabled, true); 108 | registry->RegisterBooleanPref(prefs::kWebRTCNonProxiedUdpEnabled, true); 109 | registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy, 110 | content::kWebRTCIPHandlingDefault); 111 | #endif 112 | 113 | // Dictionaries to keep track of default tasks in the file browser. 114 | registry->RegisterDictionaryPref( 115 | prefs::kDefaultTasksByMimeType, 116 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 117 | registry->RegisterDictionaryPref( 118 | prefs::kDefaultTasksBySuffix, 119 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 120 | 121 | // We need to register the type of these preferences in order to query 122 | // them even though they're only typically controlled via policy. 123 | registry->RegisterBooleanPref(prefs::kPluginsAllowOutdated, false); 124 | registry->RegisterBooleanPref(prefs::kPluginsAlwaysAuthorize, false); 125 | registry->RegisterBooleanPref(prefs::kClearPluginLSODataEnabled, true); 126 | registry->RegisterBooleanPref(prefs::kHideWebStoreIcon, false); 127 | #if defined(OS_MACOSX) 128 | // This really belongs in platform code, but there's no good place to 129 | // initialize it between the time when the AppController is created 130 | // (where there's no profile) and the time the controller gets another 131 | // crack at the start of the main event loop. By that time, 132 | // StartupBrowserCreator has already created the browser window, and it's too 133 | // late: we need the pref to be already initialized. Doing it here also saves 134 | // us from having to hard-code pref registration in the several unit tests 135 | // that use this preference. 136 | registry->RegisterBooleanPref(prefs::kShowUpdatePromotionInfoBar, true); 137 | registry->RegisterBooleanPref( 138 | prefs::kHideFullscreenToolbar, 139 | false, 140 | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 141 | #else 142 | registry->RegisterBooleanPref(prefs::kFullscreenAllowed, true); 143 | #endif 144 | } 145 | 146 | } // namespace chrome 147 | -------------------------------------------------------------------------------- /src/chrome/browser/ui/startup/google_api_keys_infobar_delegate.cc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #include "chrome/browser/ui/startup/google_api_keys_infobar_delegate.h" 6 | 7 | #include "chrome/browser/infobars/infobar_service.h" 8 | #include "chrome/grit/chromium_strings.h" 9 | #include "components/infobars/core/infobar.h" 10 | #include "content/public/browser/web_contents.h" 11 | #include "google_apis/google_api_keys.h" 12 | #include "grit/components_strings.h" 13 | #include "ui/base/l10n/l10n_util.h" 14 | 15 | 16 | // static 17 | void GoogleApiKeysInfoBarDelegate::Create(InfoBarService* infobar_service) { 18 | return; 19 | } 20 | 21 | GoogleApiKeysInfoBarDelegate::GoogleApiKeysInfoBarDelegate() 22 | : ConfirmInfoBarDelegate() { 23 | } 24 | 25 | GoogleApiKeysInfoBarDelegate::~GoogleApiKeysInfoBarDelegate() { 26 | } 27 | 28 | infobars::InfoBarDelegate::InfoBarIdentifier 29 | GoogleApiKeysInfoBarDelegate::GetIdentifier() const { 30 | return GOOGLE_API_KEYS_INFOBAR_DELEGATE; 31 | } 32 | 33 | base::string16 GoogleApiKeysInfoBarDelegate::GetMessageText() const { 34 | return l10n_util::GetStringUTF16(IDS_MISSING_GOOGLE_API_KEYS); 35 | } 36 | 37 | int GoogleApiKeysInfoBarDelegate::GetButtons() const { 38 | return BUTTON_NONE; 39 | } 40 | 41 | base::string16 GoogleApiKeysInfoBarDelegate::GetLinkText() const { 42 | return l10n_util::GetStringUTF16(IDS_LEARN_MORE); 43 | } 44 | 45 | GURL GoogleApiKeysInfoBarDelegate::GetLinkURL() const { 46 | return GURL(google_apis::kAPIKeysDevelopersHowToURL); 47 | } 48 | -------------------------------------------------------------------------------- /src/chrome/browser/ui/startup/obsolete_system_infobar_delegate.cc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #include "chrome/browser/ui/startup/obsolete_system_infobar_delegate.h" 6 | 7 | #include "base/prefs/pref_service.h" 8 | #include "chrome/browser/browser_process.h" 9 | #include "chrome/browser/infobars/infobar_service.h" 10 | #include "chrome/browser/obsolete_system/obsolete_system.h" 11 | #include "chrome/common/pref_names.h" 12 | #include "chrome/common/url_constants.h" 13 | #include "chrome/grit/chromium_strings.h" 14 | #include "components/infobars/core/infobar.h" 15 | #include "content/public/browser/web_contents.h" 16 | #include "grit/components_strings.h" 17 | #include "ui/base/l10n/l10n_util.h" 18 | 19 | // static 20 | void ObsoleteSystemInfoBarDelegate::Create(InfoBarService* infobar_service) { 21 | return; 22 | } 23 | 24 | ObsoleteSystemInfoBarDelegate::ObsoleteSystemInfoBarDelegate() 25 | : ConfirmInfoBarDelegate() { 26 | } 27 | 28 | ObsoleteSystemInfoBarDelegate::~ObsoleteSystemInfoBarDelegate() { 29 | } 30 | 31 | infobars::InfoBarDelegate::InfoBarIdentifier 32 | ObsoleteSystemInfoBarDelegate::GetIdentifier() const { 33 | return OBSOLETE_SYSTEM_INFOBAR_DELEGATE; 34 | } 35 | 36 | base::string16 ObsoleteSystemInfoBarDelegate::GetMessageText() const { 37 | return ObsoleteSystem::LocalizedObsoleteString(); 38 | } 39 | 40 | int ObsoleteSystemInfoBarDelegate::GetButtons() const { 41 | return BUTTON_NONE; 42 | } 43 | 44 | base::string16 ObsoleteSystemInfoBarDelegate::GetLinkText() const { 45 | return l10n_util::GetStringUTF16(IDS_LEARN_MORE); 46 | } 47 | 48 | GURL ObsoleteSystemInfoBarDelegate::GetLinkURL() const { 49 | return GURL(ObsoleteSystem::GetLinkURL()); 50 | } 51 | -------------------------------------------------------------------------------- /src/chrome/installer/mini_installer/chrome.release: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | # Use of this source code is governed by a BSD-style license that can be 3 | # found in the LICENSE file. 4 | 5 | [GENERAL] 6 | # 7 | # Chrome Application dir entries, sorted alphabetically. 8 | # 9 | chrome.exe: %(ChromeDir)s\ 10 | wow_helper.exe: %(ChromeDir)s\ 11 | # 12 | # Chrome version dir assembly manifest. 13 | # The name of this file must match the name of the version dir, so we cannot 14 | # hard-code it. 15 | # // TODO(caitkp): Find a way to do this without wildcards. 16 | # 17 | *.*.*.*.manifest: %(VersionDir)s\ 18 | # 19 | # Chrome version dir entries, sorted alphabetically. 20 | # 21 | chrome.dll: %(VersionDir)s\ 22 | chromedriver.exe: %(VersionDir)s\ 23 | chrome_100_percent.pak: %(VersionDir)s\ 24 | chrome_material_100_percent.pak: %(VersionDir)s\ 25 | chrome_child.dll: %(VersionDir)s\ 26 | chrome_elf.dll: %(VersionDir)s\ 27 | chrome_watcher.dll: %(VersionDir)s\ 28 | d3dcompiler_47.dll: %(VersionDir)s\ 29 | ffmpeg.dll: %(VersionDir)s\ 30 | kasko.dll: %(VersionDir)s\ 31 | icudt.dll: %(VersionDir)s\ 32 | icudtl.dat: %(VersionDir)s\ 33 | SwiftShader\3.3.0.1\libEGL.dll: %(VersionDir)s\ 34 | libexif.dll: %(VersionDir)s\ 35 | SwiftShader\3.3.0.1\libGLESv2.dll: %(VersionDir)s\ 36 | nacl64.exe: %(VersionDir)s\ 37 | nacl_irt_x86_32.nexe: %(VersionDir)s\ 38 | nacl_irt_x86_64.nexe: %(VersionDir)s\ 39 | natives_blob.bin: %(VersionDir)s\ 40 | resources.pak: %(VersionDir)s\ 41 | snapshot_blob.bin: %(VersionDir)s\ 42 | syzyasan_rtl.dll: %(VersionDir)s\ 43 | xinput1_3.dll: %(VersionDir)s\ 44 | # 45 | # Sub directories living in the version dir 46 | # 47 | default_apps\*.crx: %(VersionDir)s\default_apps\ 48 | default_apps\external_extensions.json: %(VersionDir)s\default_apps\ 49 | Extensions\*.*: %(VersionDir)s\Extensions\ 50 | locales\*.dll: %(VersionDir)s\Locales 51 | locales\*.pak: %(VersionDir)s\Locales 52 | 53 | [HIDPI] 54 | chrome_200_percent.pak: %(VersionDir)s\ 55 | chrome_material_200_percent.pak: %(VersionDir)s\ 56 | 57 | [TOUCH] 58 | 59 | [GOOGLE_CHROME] 60 | delegate_execute.exe: %(VersionDir)s\ 61 | SecondaryTile.png: %(VersionDir)s\ 62 | widevinecdmadapter.dll: %(VersionDir)s\ 63 | # 64 | # Pepper Flash sub-dir. 65 | # 66 | PepperFlash\manifest.json: %(VersionDir)s\PepperFlash\ 67 | PepperFlash\pepflashplayer.dll: %(VersionDir)s\PepperFlash\ 68 | # 69 | # Win8 sub-dir. 70 | # 71 | # All or none of the following 3 files need to be present as the creation of 72 | # VisualElementsManifest.xml is based on the existence of 73 | # %(VersionDir)\VisualElements. On a similar note, no other files should be 74 | # packaged in this directory. 75 | Logo.png: %(VersionDir)s\VisualElements\ 76 | SmallLogo.png: %(VersionDir)s\VisualElements\ 77 | -------------------------------------------------------------------------------- /src/chrome/tools/build/win/create_installer_archive.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright (c) 2023 The Chromium Authors and Alex313031. All rights reserved. 3 | # Use of this source code is governed by a BSD-style license that can be 4 | # found in the LICENSE file. 5 | 6 | """Script to create Chrome Installer archive. 7 | 8 | This script is used to create an archive of all the files required for a 9 | Chrome install in appropriate directory structure. It reads chrome.release 10 | file as input, creates chrome.7z archive, compresses setup.exe and 11 | generates packed_files.txt for mini_installer project. 12 | 13 | """ 14 | 15 | import ConfigParser 16 | import glob 17 | import optparse 18 | import os 19 | import re 20 | import shutil 21 | import subprocess 22 | import sys 23 | 24 | 25 | ARCHIVE_DIR = "installer_archive" 26 | 27 | # suffix to uncompresed full archive file, appended to options.output_name 28 | ARCHIVE_SUFFIX = ".7z" 29 | BSDIFF_EXEC = "bsdiff.exe" 30 | CHROME_DIR = "Chrome-bin" 31 | CHROME_PATCH_FILE_SUFFIX = "_patch" # prefixed by options.output_name 32 | 33 | # compressed full archive suffix, will be prefixed by options.output_name 34 | COMPRESSED_ARCHIVE_SUFFIX = ".packed.7z" 35 | 36 | COMPRESSED_FILE_EXT = ".packed.7z" # extension of patch archive file 37 | COURGETTE_EXEC = "courgette.exe" 38 | MINI_INSTALLER_INPUT_FILE = "packed_files.txt" 39 | PATCH_FILE_EXT = '.diff' 40 | SETUP_EXEC = "setup.exe" 41 | SETUP_PATCH_FILE_PREFIX = "setup_patch" 42 | TEMP_ARCHIVE_DIR = "temp_installer_archive" 43 | VERSION_FILE = "VERSION" 44 | 45 | 46 | g_archive_inputs = [] 47 | 48 | 49 | def BuildVersion(build_dir): 50 | """Returns the full build version string constructed from information in 51 | VERSION_FILE. Any segment not found in that file will default to '0'. 52 | """ 53 | major = 0 54 | minor = 0 55 | build = 0 56 | patch = 0 57 | for line in open(os.path.join(build_dir, '../../chrome', VERSION_FILE), 'r'): 58 | line = line.rstrip() 59 | if line.startswith('MAJOR='): 60 | major = line[6:] 61 | elif line.startswith('MINOR='): 62 | minor = line[6:] 63 | elif line.startswith('BUILD='): 64 | build = line[6:] 65 | elif line.startswith('PATCH='): 66 | patch = line[6:] 67 | return '%s.%s.%s.%s' % (major, minor, build, patch) 68 | 69 | 70 | def CompressUsingLZMA(build_dir, compressed_file, input_file, verbose): 71 | lzma_exec = GetLZMAExec(build_dir) 72 | cmd = [lzma_exec, 73 | 'a', '-t7z', 74 | # Flags equivalent to -mx9 (ultra) but with the bcj2 turned on (exe 75 | # pre-filter). This results in a ~2.3MB decrease in installer size on 76 | # a 24MB installer. 77 | # Additionally, these settings reflect a 7zip 4.42 and up change in 78 | # the definition of -mx9, increasting the dicionary size moving to 79 | # 26bit = 64MB. This results in an additional ~3.5MB decrease. 80 | # Older 7zip versions can support these settings, as these changes 81 | # rely on existing functionality in the lzma format. 82 | '-m0=BCJ2', 83 | '-m1=LZMA:d27:fb128', 84 | '-m2=LZMA:d22:fb128:mf=bt2', 85 | '-m3=LZMA:d22:fb128:mf=bt2', 86 | '-mb0:1', 87 | '-mb0s1:2', 88 | '-mb0s2:3', 89 | compressed_file, 90 | input_file,] 91 | if os.path.exists(compressed_file): 92 | os.remove(compressed_file) 93 | RunSystemCommand(cmd, verbose) 94 | 95 | 96 | def CopyAllFilesToStagingDir(config, distribution, staging_dir, build_dir, 97 | enable_hidpi): 98 | """Copies the files required for installer archive. 99 | Copies all common files required for various distributions of Chromium and 100 | also files for the specific Chromium build specified by distribution. 101 | """ 102 | CopySectionFilesToStagingDir(config, 'GENERAL', staging_dir, build_dir) 103 | if distribution: 104 | if len(distribution) > 1 and distribution[0] == '_': 105 | distribution = distribution[1:] 106 | CopySectionFilesToStagingDir(config, distribution.upper(), 107 | staging_dir, build_dir) 108 | if enable_hidpi == '1': 109 | CopySectionFilesToStagingDir(config, 'HIDPI', staging_dir, build_dir) 110 | 111 | 112 | def CopySectionFilesToStagingDir(config, section, staging_dir, src_dir): 113 | """Copies installer archive files specified in section from src_dir to 114 | staging_dir. This method reads section from config and copies all the 115 | files specified from src_dir to staging dir. 116 | """ 117 | for option in config.options(section): 118 | if option.endswith('dir'): 119 | continue 120 | 121 | dst_dir = os.path.join(staging_dir, config.get(section, option)) 122 | src_paths = glob.glob(os.path.join(src_dir, option)) 123 | if src_paths and not os.path.exists(dst_dir): 124 | os.makedirs(dst_dir) 125 | for src_path in src_paths: 126 | dst_path = os.path.join(dst_dir, os.path.basename(src_path)) 127 | if not os.path.exists(dst_path): 128 | g_archive_inputs.append(src_path) 129 | shutil.copy(src_path, dst_dir) 130 | 131 | def GenerateDiffPatch(options, orig_file, new_file, patch_file): 132 | if (options.diff_algorithm == "COURGETTE"): 133 | exe_file = os.path.join(options.last_chrome_installer, COURGETTE_EXEC) 134 | cmd = '%s -gen "%s" "%s" "%s"' % (exe_file, orig_file, new_file, patch_file) 135 | else: 136 | exe_file = os.path.join(options.build_dir, BSDIFF_EXEC) 137 | cmd = [exe_file, orig_file, new_file, patch_file,] 138 | RunSystemCommand(cmd, options.verbose) 139 | 140 | def GetLZMAExec(build_dir): 141 | lzma_exec = os.path.join(build_dir, "..", "..", "third_party", 142 | "lzma_sdk", "Executable", "7za.exe") 143 | return lzma_exec 144 | 145 | def GetPrevVersion(build_dir, temp_dir, last_chrome_installer, output_name): 146 | if not last_chrome_installer: 147 | return '' 148 | 149 | lzma_exec = GetLZMAExec(build_dir) 150 | prev_archive_file = os.path.join(last_chrome_installer, 151 | output_name + ARCHIVE_SUFFIX) 152 | cmd = [lzma_exec, 153 | 'x', 154 | '-o"%s"' % temp_dir, 155 | prev_archive_file, 156 | 'Chrome-bin/*/chrome.dll',] 157 | RunSystemCommand(cmd, options.verbose) 158 | dll_path = glob.glob(os.path.join(temp_dir, 'Chrome-bin', '*', 'chrome.dll')) 159 | return os.path.split(os.path.split(dll_path[0])[0])[1] 160 | 161 | def MakeStagingDirectories(staging_dir): 162 | """Creates a staging path for installer archive. If directory exists already, 163 | deletes the existing directory. 164 | """ 165 | file_path = os.path.join(staging_dir, TEMP_ARCHIVE_DIR) 166 | if os.path.exists(file_path): 167 | shutil.rmtree(file_path) 168 | os.makedirs(file_path) 169 | 170 | temp_file_path = os.path.join(staging_dir, TEMP_ARCHIVE_DIR) 171 | if os.path.exists(temp_file_path): 172 | shutil.rmtree(temp_file_path) 173 | os.makedirs(temp_file_path) 174 | return (file_path, temp_file_path) 175 | 176 | def Readconfig(input_file, current_version): 177 | """Reads config information from input file after setting default value of 178 | global variabes. 179 | """ 180 | variables = {} 181 | variables['ChromeDir'] = CHROME_DIR 182 | variables['VersionDir'] = os.path.join(variables['ChromeDir'], 183 | current_version) 184 | config = ConfigParser.SafeConfigParser(variables) 185 | config.read(input_file) 186 | return config 187 | 188 | def RunSystemCommand(cmd, verbose): 189 | """Runs |cmd|, prints the |cmd| and its output if |verbose|; otherwise 190 | captures its output and only emits it on failure. 191 | """ 192 | if verbose: 193 | print 'Running', cmd 194 | 195 | try: 196 | # Run |cmd|, redirecting stderr to stdout in order for captured errors to be 197 | # inline with corresponding stdout. 198 | output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) 199 | if verbose: 200 | print output 201 | except subprocess.CalledProcessError as e: 202 | raise Exception("Error while running cmd: %s\n" 203 | "Exit code: %s\n" 204 | "Command output:\n%s" % 205 | (e.cmd, e.returncode, e.output)) 206 | 207 | def CreateArchiveFile(options, staging_dir, current_version, prev_version): 208 | """Creates a new installer archive file after deleting any existing old file. 209 | """ 210 | # First create an uncompressed archive file for the current build (chrome.7z) 211 | lzma_exec = GetLZMAExec(options.build_dir) 212 | archive_file = os.path.join(options.output_dir, 213 | options.output_name + ARCHIVE_SUFFIX) 214 | if options.depfile: 215 | # If a depfile was requested, do the glob of the staging dir and generate 216 | # a list of dependencies in .d format. We list the files that were copied 217 | # into the staging dir, not the files that are actually in the staging dir 218 | # because the ones in the staging dir will never be edited, and we want 219 | # to have the build be triggered when the thing-that-was-copied-there 220 | # changes. 221 | 222 | def path_fixup(path): 223 | """Fixes path for depfile format: backslash to forward slash, and 224 | backslash escaping for spaces.""" 225 | return path.replace('\\', '/').replace(' ', '\\ ') 226 | 227 | # Gather the list of files in the staging dir that will be zipped up. We 228 | # only gather this list to make sure that g_archive_inputs is complete (i.e. 229 | # that there's not file copies that got missed). 230 | staging_contents = [] 231 | for root, dirs, files in os.walk(os.path.join(staging_dir, CHROME_DIR)): 232 | for filename in files: 233 | staging_contents.append(path_fixup(os.path.join(root, filename))) 234 | 235 | # Make sure there's an archive_input for each staging dir file. 236 | for staging_file in staging_contents: 237 | for archive_input in g_archive_inputs: 238 | archive_rel = path_fixup(archive_input) 239 | if (os.path.basename(staging_file).lower() == 240 | os.path.basename(archive_rel).lower()): 241 | break 242 | else: 243 | raise Exception('Did not find an archive input file for "%s"' % 244 | staging_file) 245 | 246 | # Finally, write the depfile referencing the inputs. 247 | with open(options.depfile, 'wb') as f: 248 | f.write(path_fixup(os.path.relpath(archive_file, options.build_dir)) + 249 | ': \\\n') 250 | f.write(' ' + ' \\\n '.join(path_fixup(x) for x in g_archive_inputs)) 251 | 252 | # It is important to use abspath to create the path to the directory because 253 | # if you use a relative path without any .. sequences then 7za.exe uses the 254 | # entire relative path as part of the file paths in the archive. If you have 255 | # a .. sequence or an absolute path then only the last directory is stored as 256 | # part of the file paths in the archive, which is what we want. 257 | cmd = [lzma_exec, 258 | 'a', 259 | '-t7z', 260 | archive_file, 261 | os.path.abspath(os.path.join(staging_dir, CHROME_DIR)), 262 | '-mx0',] 263 | # There doesnt seem to be any way in 7za.exe to override existing file so 264 | # we always delete before creating a new one. 265 | if not os.path.exists(archive_file): 266 | RunSystemCommand(cmd, options.verbose) 267 | elif options.skip_rebuild_archive != "true": 268 | os.remove(archive_file) 269 | RunSystemCommand(cmd, options.verbose) 270 | 271 | # Do not compress the archive in developer (component) builds. 272 | if options.component_build == '1': 273 | compressed_file = os.path.join( 274 | options.output_dir, options.output_name + COMPRESSED_ARCHIVE_SUFFIX) 275 | if os.path.exists(compressed_file): 276 | os.remove(compressed_file) 277 | return os.path.basename(archive_file) 278 | 279 | # If we are generating a patch, run bsdiff against previous build and 280 | # compress the resulting patch file. If this is not a patch just compress the 281 | # uncompressed archive file. 282 | patch_name_prefix = options.output_name + CHROME_PATCH_FILE_SUFFIX 283 | if options.last_chrome_installer: 284 | prev_archive_file = os.path.join(options.last_chrome_installer, 285 | options.output_name + ARCHIVE_SUFFIX) 286 | patch_file = os.path.join(options.build_dir, patch_name_prefix + 287 | PATCH_FILE_EXT) 288 | GenerateDiffPatch(options, prev_archive_file, archive_file, patch_file) 289 | compressed_archive_file = patch_name_prefix + '_' + \ 290 | current_version + '_from_' + prev_version + \ 291 | COMPRESSED_FILE_EXT 292 | orig_file = patch_file 293 | else: 294 | compressed_archive_file = options.output_name + COMPRESSED_ARCHIVE_SUFFIX 295 | orig_file = archive_file 296 | 297 | compressed_archive_file_path = os.path.join(options.output_dir, 298 | compressed_archive_file) 299 | CompressUsingLZMA(options.build_dir, compressed_archive_file_path, orig_file, 300 | options.verbose) 301 | 302 | return compressed_archive_file 303 | 304 | 305 | def PrepareSetupExec(options, current_version, prev_version): 306 | """Prepares setup.exe for bundling in mini_installer based on options.""" 307 | if options.setup_exe_format == "FULL": 308 | setup_file = SETUP_EXEC 309 | elif options.setup_exe_format == "DIFF": 310 | if not options.last_chrome_installer: 311 | raise Exception( 312 | "To use DIFF for setup.exe, --last_chrome_installer is needed.") 313 | prev_setup_file = os.path.join(options.last_chrome_installer, SETUP_EXEC) 314 | new_setup_file = os.path.join(options.build_dir, SETUP_EXEC) 315 | patch_file = os.path.join(options.build_dir, SETUP_PATCH_FILE_PREFIX + 316 | PATCH_FILE_EXT) 317 | GenerateDiffPatch(options, prev_setup_file, new_setup_file, patch_file) 318 | setup_file = SETUP_PATCH_FILE_PREFIX + '_' + current_version + \ 319 | '_from_' + prev_version + COMPRESSED_FILE_EXT 320 | setup_file_path = os.path.join(options.build_dir, setup_file) 321 | CompressUsingLZMA(options.build_dir, setup_file_path, patch_file, 322 | options.verbose) 323 | else: 324 | cmd = ['makecab.exe', 325 | '/D', 'CompressionType=LZX', 326 | '/V1', 327 | '/L', options.output_dir, 328 | os.path.join(options.build_dir, SETUP_EXEC),] 329 | RunSystemCommand(cmd, options.verbose) 330 | setup_file = SETUP_EXEC[:-1] + "_" 331 | return setup_file 332 | 333 | 334 | _RESOURCE_FILE_HEADER = """\ 335 | // This file is automatically generated by create_installer_archive.py. 336 | // It contains the resource entries that are going to be linked inside 337 | // mini_installer.exe. For each file to be linked there should be two 338 | // lines: 339 | // - The first line contains the output filename (without path) and the 340 | // type of the resource ('BN' - not compressed , 'BL' - LZ compressed, 341 | // 'B7' - LZMA compressed) 342 | // - The second line contains the path to the input file. Uses '/' to 343 | // separate path components. 344 | """ 345 | 346 | 347 | def CreateResourceInputFile( 348 | output_dir, setup_format, archive_file, setup_file, resource_file_path, 349 | component_build, staging_dir, current_version): 350 | """Creates resource input file (packed_files.txt) for mini_installer project. 351 | 352 | This method checks the format of setup.exe being used and according sets 353 | its resource type. 354 | """ 355 | setup_resource_type = "BL" 356 | if (setup_format == "FULL"): 357 | setup_resource_type = "BN" 358 | elif (setup_format == "DIFF"): 359 | setup_resource_type = "B7" 360 | 361 | # An array of (file, type, path) tuples of the files to be included. 362 | resources = [] 363 | resources.append((setup_file, setup_resource_type, 364 | os.path.join(output_dir, setup_file))) 365 | resources.append((archive_file, 'B7', 366 | os.path.join(output_dir, archive_file))) 367 | # Include all files needed to run setup.exe (these are copied into the 368 | # 'Installer' dir by DoComponentBuildTasks). 369 | if component_build: 370 | installer_dir = os.path.join(staging_dir, CHROME_DIR, current_version, 371 | 'Installer') 372 | for file in os.listdir(installer_dir): 373 | resources.append((file, 'BN', os.path.join(installer_dir, file))) 374 | 375 | with open(resource_file_path, 'w') as f: 376 | f.write(_RESOURCE_FILE_HEADER) 377 | for (file, type, path) in resources: 378 | f.write('\n%s %s\n "%s"\n' % (file, type, path.replace("\\","/"))) 379 | 380 | 381 | # Reads |manifest_name| from |build_dir| and writes |manifest_name| to 382 | # |output_dir| with the same content plus |inserted_string| added just before 383 | # |insert_before|. 384 | def CopyAndAugmentManifest(build_dir, output_dir, manifest_name, 385 | inserted_string, insert_before): 386 | with open(os.path.join(build_dir, manifest_name), 'r') as f: 387 | manifest_lines = f.readlines() 388 | 389 | insert_line = -1 390 | insert_pos = -1 391 | for i in xrange(len(manifest_lines)): 392 | insert_pos = manifest_lines[i].find(insert_before) 393 | if insert_pos != -1: 394 | insert_line = i 395 | break 396 | if insert_line == -1: 397 | raise ValueError('Could not find {0} in the manifest:\n{1}'.format( 398 | insert_before, ''.join(manifest_lines))) 399 | old = manifest_lines[insert_line] 400 | manifest_lines[insert_line] = (old[:insert_pos] + '\n' + inserted_string + 401 | '\n' + old[insert_pos:]) 402 | 403 | with open(os.path.join(output_dir, manifest_name), 'w') as f : 404 | f.write(''.join(manifest_lines)) 405 | 406 | 407 | def CopyIfChanged(src, target_dir): 408 | """Copy specified |src| file to |target_dir|, but only write to target if 409 | the file has changed. This avoids a problem during packaging where parts of 410 | the build have not completed and have the runtime DLL locked when we try to 411 | copy over it. See http://crbug.com/305877 for details.""" 412 | assert os.path.isdir(target_dir) 413 | dest = os.path.join(target_dir, os.path.basename(src)) 414 | g_archive_inputs.append(src) 415 | if os.path.exists(dest): 416 | # We assume the files are OK to buffer fully into memory since we know 417 | # they're only 1-2M. 418 | with open(src, 'rb') as fsrc: 419 | src_data = fsrc.read() 420 | with open(dest, 'rb') as fdest: 421 | dest_data = fdest.read() 422 | if src_data != dest_data: 423 | # This may still raise if we get here, but this really should almost 424 | # never happen (it would mean that the contents of e.g. msvcr100d.dll 425 | # had been changed). 426 | shutil.copyfile(src, dest) 427 | else: 428 | shutil.copyfile(src, dest) 429 | 430 | 431 | # Taken and modified from: 432 | # third_party\WebKit\Tools\Scripts\webkitpy\layout_tests\port\factory.py 433 | def _read_configuration_from_gn(build_dir): 434 | """Return the configuration to used based on args.gn, if possible.""" 435 | path = os.path.join(build_dir, 'args.gn') 436 | if not os.path.exists(path): 437 | path = os.path.join(build_dir, 'toolchain.ninja') 438 | if not os.path.exists(path): 439 | # This does not appear to be a GN-based build directory, so we don't 440 | # know how to interpret it. 441 | return None 442 | 443 | # toolchain.ninja exists, but args.gn does not; this can happen when 444 | # `gn gen` is run with no --args. 445 | return 'Debug' 446 | 447 | args = open(path).read() 448 | for l in args.splitlines(): 449 | # See the original of this function and then gn documentation for why this 450 | # regular expression is correct: 451 | # https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/reference.md#GN-build-language-grammar 452 | m = re.match('^\s*is_debug\s*=\s*false(\s*$|\s*#.*$)', l) 453 | if m: 454 | return 'Release' 455 | 456 | # if is_debug is set to anything other than false, or if it 457 | # does not exist at all, we should use the default value (True). 458 | return 'Debug' 459 | 460 | 461 | # Copies component build DLLs and generates required config files and manifests 462 | # in order for chrome.exe and setup.exe to be able to find those DLLs at 463 | # run-time. 464 | # This is meant for developer builds only and should never be used to package 465 | # an official build. 466 | def DoComponentBuildTasks(staging_dir, build_dir, target_arch, current_version): 467 | # Get the required directories for the upcoming operations. 468 | chrome_dir = os.path.join(staging_dir, CHROME_DIR) 469 | version_dir = os.path.join(chrome_dir, current_version) 470 | installer_dir = os.path.join(version_dir, 'Installer') 471 | # |installer_dir| is technically only created post-install, but we need it 472 | # now to add setup.exe's config and manifest to the archive. 473 | if not os.path.exists(installer_dir): 474 | os.mkdir(installer_dir) 475 | 476 | # Explicitly list the component DLLs setup.exe depends on (this list may 477 | # contain wildcards). These will be copied to |installer_dir| in the archive. 478 | # The use of source sets in gn builds means that references to some extra 479 | # DLLs get pulled in to setup.exe (base_i18n.dll, ipc.dll, etc.). Unpacking 480 | # these to |installer_dir| is simpler and more robust than switching setup.exe 481 | # to use libraries instead of source sets. 482 | setup_component_dll_globs = [ 'api-ms-win-*.dll', 483 | 'base.dll', 484 | 'boringssl.dll', 485 | 'crcrypto.dll', 486 | 'icui18n.dll', 487 | 'icuuc.dll', 488 | 'msvc*.dll', 489 | 'ucrtbase*.dll', 490 | 'vcruntime*.dll', 491 | # DLLs needed due to source sets. 492 | 'base_i18n.dll', 493 | 'ipc.dll', 494 | 'net.dll', 495 | 'prefs.dll', 496 | 'protobuf_lite.dll', 497 | 'url_lib.dll' ] 498 | for setup_component_dll_glob in setup_component_dll_globs: 499 | setup_component_dlls = glob.glob(os.path.join(build_dir, 500 | setup_component_dll_glob)) 501 | if len(setup_component_dlls) == 0: 502 | raise Exception('Error: missing expected DLL for component build ' 503 | 'mini_installer: "%s"' % setup_component_dll_glob) 504 | for setup_component_dll in setup_component_dlls: 505 | g_archive_inputs.append(setup_component_dll) 506 | shutil.copy(setup_component_dll, installer_dir) 507 | 508 | # Stage all the component DLLs found in |build_dir| to the |version_dir| (for 509 | # the version assembly to be able to refer to them below and make sure 510 | # chrome.exe can find them at runtime). The component DLLs are considered to 511 | # be all the DLLs which have not already been added to the |version_dir| by 512 | # virtue of chrome.release. 513 | build_dlls = glob.glob(os.path.join(build_dir, '*.dll')) 514 | staged_dll_basenames = [os.path.basename(staged_dll) for staged_dll in \ 515 | glob.glob(os.path.join(version_dir, '*.dll'))] 516 | component_dll_filenames = [] 517 | for component_dll in [dll for dll in build_dlls if \ 518 | os.path.basename(dll) not in staged_dll_basenames]: 519 | component_dll_name = os.path.basename(component_dll) 520 | # ash*.dll remoting_*.dll's don't belong in the archive (it doesn't depend 521 | # on them in gyp). Trying to copy them causes a build race when creating the 522 | # installer archive in component mode. See: crbug.com/180996 and 523 | # crbug.com/586967 524 | if (component_dll_name.startswith('remoting_') or 525 | component_dll_name.startswith('ash')): 526 | continue 527 | 528 | component_dll_filenames.append(component_dll_name) 529 | g_archive_inputs.append(component_dll) 530 | shutil.copy(component_dll, version_dir) 531 | 532 | # Augment {version}.manifest to include all component DLLs as part of the 533 | # assembly it constitutes, which will allow dependents of this assembly to 534 | # find these DLLs. 535 | version_assembly_dll_additions = [] 536 | for dll_filename in component_dll_filenames: 537 | version_assembly_dll_additions.append(" " % dll_filename) 538 | CopyAndAugmentManifest(build_dir, version_dir, 539 | '%s.manifest' % current_version, 540 | '\n'.join(version_assembly_dll_additions), 541 | '') 542 | 543 | 544 | def main(options): 545 | """Main method that reads input file, creates archive file and writes 546 | resource input file. 547 | """ 548 | current_version = BuildVersion(options.build_dir) 549 | 550 | config = Readconfig(options.input_file, current_version) 551 | 552 | (staging_dir, temp_dir) = MakeStagingDirectories(options.staging_dir) 553 | 554 | prev_version = GetPrevVersion(options.build_dir, temp_dir, 555 | options.last_chrome_installer, 556 | options.output_name) 557 | 558 | # Preferentially copy the files we can find from the output_dir, as 559 | # this is where we'll find the Syzygy-optimized executables when 560 | # building the optimized mini_installer. 561 | if options.build_dir != options.output_dir: 562 | CopyAllFilesToStagingDir(config, options.distribution, 563 | staging_dir, options.output_dir, 564 | options.enable_hidpi) 565 | 566 | # Now copy the remainder of the files from the build dir. 567 | CopyAllFilesToStagingDir(config, options.distribution, 568 | staging_dir, options.build_dir, 569 | options.enable_hidpi) 570 | 571 | if options.component_build == '1': 572 | DoComponentBuildTasks(staging_dir, options.build_dir, 573 | options.target_arch, current_version) 574 | 575 | version_numbers = current_version.split('.') 576 | current_build_number = version_numbers[2] + '.' + version_numbers[3] 577 | prev_build_number = '' 578 | if prev_version: 579 | version_numbers = prev_version.split('.') 580 | prev_build_number = version_numbers[2] + '.' + version_numbers[3] 581 | 582 | # Name of the archive file built (for example - chrome.7z or 583 | # patch--.7z or patch-.7z 584 | archive_file = CreateArchiveFile(options, staging_dir, 585 | current_build_number, prev_build_number) 586 | 587 | setup_file = PrepareSetupExec(options, 588 | current_build_number, prev_build_number) 589 | 590 | CreateResourceInputFile(options.output_dir, options.setup_exe_format, 591 | archive_file, setup_file, options.resource_file_path, 592 | options.component_build == '1', staging_dir, 593 | current_version) 594 | 595 | def _ParseOptions(): 596 | parser = optparse.OptionParser() 597 | parser.add_option('-i', '--input_file', 598 | help='Input file describing which files to archive.') 599 | parser.add_option('-b', '--build_dir', 600 | help='Build directory. The paths in input_file are relative to this.') 601 | parser.add_option('--staging_dir', 602 | help='Staging directory where intermediate files and directories ' 603 | 'will be created') 604 | parser.add_option('-o', '--output_dir', 605 | help='The output directory where the archives will be written. ' 606 | 'Defaults to the build_dir.') 607 | parser.add_option('--resource_file_path', 608 | help='The path where the resource file will be output. ' 609 | 'Defaults to %s in the build directory.' % 610 | MINI_INSTALLER_INPUT_FILE) 611 | parser.add_option('-d', '--distribution', 612 | help='Name of Chromium Distribution. Optional.') 613 | parser.add_option('-s', '--skip_rebuild_archive', 614 | default="False", help='Skip re-building Chrome.7z archive if it exists.') 615 | parser.add_option('-l', '--last_chrome_installer', 616 | help='Generate differential installer. The value of this parameter ' 617 | 'specifies the directory that contains base versions of ' 618 | 'setup.exe, courgette.exe (if --diff_algorithm is COURGETTE) ' 619 | '& chrome.7z.') 620 | parser.add_option('-f', '--setup_exe_format', default='COMPRESSED', 621 | help='How setup.exe should be included {COMPRESSED|DIFF|FULL}.') 622 | parser.add_option('-a', '--diff_algorithm', default='BSDIFF', 623 | help='Diff algorithm to use when generating differential patches ' 624 | '{BSDIFF|COURGETTE}.') 625 | parser.add_option('-n', '--output_name', default='chrome', 626 | help='Name used to prefix names of generated archives.') 627 | parser.add_option('--enable_hidpi', default='0', 628 | help='Whether to include HiDPI resource files.') 629 | parser.add_option('--component_build', default='0', 630 | help='Whether this archive is packaging a component build. This will ' 631 | 'also turn off compression of chrome.7z into chrome.packed.7z and ' 632 | 'helpfully delete any old chrome.packed.7z in |output_dir|.') 633 | parser.add_option('--depfile', 634 | help='Generate a depfile with the given name listing the implicit inputs ' 635 | 'to the archive process that can be used with a build system.') 636 | parser.add_option('--target_arch', default='x86', 637 | help='Specify the target architecture for installer - this is used ' 638 | 'to determine which CRT runtime files to pull and package ' 639 | 'with the installer archive {x86|x64}.') 640 | parser.add_option('-v', '--verbose', action='store_true', dest='verbose', 641 | default=False) 642 | 643 | options, _ = parser.parse_args() 644 | if not options.build_dir: 645 | parser.error('You must provide a build dir.') 646 | 647 | options.build_dir = os.path.normpath(options.build_dir) 648 | 649 | if not options.staging_dir: 650 | parser.error('You must provide a staging dir.') 651 | 652 | if not options.input_file: 653 | parser.error('You must provide an input file') 654 | 655 | if not options.output_dir: 656 | options.output_dir = options.build_dir 657 | 658 | if not options.resource_file_path: 659 | options.resource_file_path = os.path.join(options.build_dir, 660 | MINI_INSTALLER_INPUT_FILE) 661 | 662 | return options 663 | 664 | 665 | if '__main__' == __name__: 666 | options = _ParseOptions() 667 | if options.verbose: 668 | print sys.argv 669 | sys.exit(main(options)) 670 | -------------------------------------------------------------------------------- /src/components/search_engines/prepopulated_engines.json: -------------------------------------------------------------------------------- 1 | // Copyright 2023 The Chromium Authors and Alex313031. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | // This file is used during build to generate prepopulated_engine.h/cc. 6 | // For more details see tools/json_to_struct/json_to_struct.py. 7 | 8 | // Engine definitions. See prepopulated_engines_schema.json for the field 9 | // definitions. 10 | 11 | // The following unique IDs are available: 12 | // 7, 11, 12, 13, 14, 18, 19, 20, 22, 24, 26, 28, 29, 30, 32, 33, 34, 39, 37, 13 | // 38, 40, 41, 42, 46, 47, 48, 49, 51, 52, 58, 59, 69, 71, 72, 82, 84, 86, 14 | // 88, 89, 91+ 15 | // 16 | // IDs > 1000 are reserved for distribution custom engines. 17 | // 18 | // NOTES: 19 | // - CHANGE THE ABOVE NUMBERS IF YOU ADD A NEW ENGINE; ID conflicts = bad! 20 | // - Make sure you update the int_variables below as required. 21 | // - NOTIFY the Chrome Webstore team if you add/delete a search engine or 22 | // change domain of an existing one (send email to webstore-eng@google.com). 23 | // They need to know the mapping between an engine's "id" and its URLs. 24 | 25 | { 26 | "int_variables": { 27 | // The following id is for UMA stats only. Please update it if you add new 28 | // engines outside the current range or it will not be counted in stats. 29 | "kMaxPrepopulatedEngineID": 90, 30 | 31 | // Increment this if you change the data in ways that mean users with 32 | // existing data should get a new version. 33 | "kCurrentDataVersion": 88 34 | }, 35 | 36 | // The following engines are included in country lists and are added to the 37 | // list of search engines on the first run depending on user's country. 38 | "elements": { 39 | "aol": { 40 | "name": "AOL", 41 | "keyword": "aol.com", 42 | "favicon_url": "https://search.aol.com/favicon.ico", 43 | "search_url": "https://search.aol.com/aol/search?q={searchTerms}", 44 | "suggest_url": "https://autocomplete.search.aol.com/autocomplete/get?output=json&it=&q={searchTerms}", 45 | "type": "SEARCH_ENGINE_AOL", 46 | "id": 35 47 | }, 48 | 49 | "ask": { 50 | "name": "Ask", 51 | "keyword": "ask.com", 52 | "favicon_url": "https://sp.ask.com/sh/i/a16/favicon/favicon.ico", 53 | "search_url": "https://www.ask.com/web?q={searchTerms}", 54 | "suggest_url": "https://ss.ask.com/query?q={searchTerms}&li=ff", 55 | "type": "SEARCH_ENGINE_ASK", 56 | "id": 4 57 | }, 58 | 59 | "ask_br": { 60 | "name": "Ask Brasil", 61 | "keyword": "br.ask.com", 62 | "favicon_url": "https://sp.br.ask.com/sh/i/a14/favicon/favicon.ico", 63 | "search_url": "https://br.ask.com/web?q={searchTerms}", 64 | "type": "SEARCH_ENGINE_ASK", 65 | "id": 4 66 | }, 67 | 68 | "ask_uk": { 69 | "name": "Ask Jeeves", 70 | "keyword": "uk.ask.com", 71 | "favicon_url": "https://sp.uk.ask.com/sh/i/a16/favicon/favicon.ico", 72 | "search_url": "https://uk.ask.com/web?q={searchTerms}", 73 | "suggest_url": "https://ss.uk.ask.com/query?q={searchTerms}&li=ff", 74 | "type": "SEARCH_ENGINE_ASK", 75 | "id": 4 76 | }, 77 | 78 | "baidu": { 79 | "name": "\u767e\u5ea6", 80 | "keyword": "baidu.com", 81 | "favicon_url": "https://www.baidu.com/favicon.ico", 82 | "search_url": "https://www.baidu.com/#ie={inputEncoding}&wd={searchTerms}", 83 | "suggest_url": "https://suggestion.baidu.com/su?wd={searchTerms}&action=opensearch&ie={inputEncoding}", 84 | "type": "SEARCH_ENGINE_BAIDU", 85 | "id": 21 86 | }, 87 | 88 | "bing": { 89 | "name": "Bing", 90 | "keyword": "bing.com", 91 | "favicon_url": "https://www.bing.com/s/a/bing_p.ico", 92 | "search_url": "https://www.bing.com/search?q={searchTerms}&PC=U316&FORM=CHROMN", 93 | "suggest_url": "https://www.bing.com/osjson.aspx?query={searchTerms}&language={language}&PC=U316", 94 | "new_tab_url": "https://www.bing.com/chrome/newtab", 95 | "type": "SEARCH_ENGINE_BING", 96 | "id": 3 97 | }, 98 | 99 | "daum": { 100 | "name": "Daum", 101 | "keyword": "daum.net", 102 | "favicon_url": "https://search.daum.net/favicon.ico", 103 | "search_url": "https://search.daum.net/search?ie={inputEncoding}&q={searchTerms}", 104 | "suggest_url": "https://sug.search.daum.net/search_nsuggest?mod=fxjson&ie={inputEncoding}&code=utf_in_out&q={searchTerms}", 105 | "type": "SEARCH_ENGINE_DAUM", 106 | "id": 68 107 | }, 108 | 109 | "google": { 110 | "name": "Google", 111 | "keyword": "google.com", 112 | "favicon_url": "https://www.google.com/favicon.ico", 113 | "search_url": "{google:baseURL}search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:iOSSearchLanguage}{google:prefetchSource}{google:searchClient}{google:sourceId}{google:contextualSearchVersion}ie={inputEncoding}", 114 | "suggest_url": "{google:baseSuggestURL}search?{google:searchFieldtrialParameter}client={google:suggestClient}&gs_ri={google:suggestRid}&xssi=t&q={searchTerms}&{google:inputType}{google:omniboxFocusType}{google:cursorPosition}{google:currentPageUrl}{google:pageClassification}{google:clientCacheTimeToLive}{google:searchVersion}{google:sessionToken}{google:prefetchQuery}sugkey={google:suggestAPIKeyParameter}", 115 | "image_url": "{google:baseURL}searchbyimage/upload", 116 | "new_tab_url": "{google:baseURL}_/chrome/newtab?{google:RLZ}{google:instantExtendedEnabledParameter}ie={inputEncoding}", 117 | "contextual_search_url": "{google:baseURL}_/contextualsearch?{google:contextualSearchVersion}{google:contextualSearchContextData}", 118 | "image_url_post_params": "encoded_image={google:imageThumbnail},image_url={google:imageURL},sbisrc={google:imageSearchSource},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight}", 119 | "alternate_urls": [ 120 | "{google:baseURL}#q={searchTerms}", 121 | "{google:baseURL}search#q={searchTerms}", 122 | "{google:baseURL}webhp#q={searchTerms}", 123 | "{google:baseURL}s#q={searchTerms}", 124 | "{google:baseURL}s?q={searchTerms}" 125 | ], 126 | "type": "SEARCH_ENGINE_GOOGLE", 127 | "id": 1 128 | }, 129 | 130 | "kvasir": { 131 | "name": "Kvasir", 132 | "keyword": "kvasir.no", 133 | "favicon_url": "https://kvasir.no/grafikk/favicon.ico", 134 | "search_url": "https://kvasir.no/alle?q={searchTerms}", 135 | "type": "SEARCH_ENGINE_KVASIR", 136 | "id": 73 137 | }, 138 | 139 | "mail_ru": { 140 | "name": "@MAIL.RU", 141 | "keyword": "mail.ru", 142 | "favicon_url": "https://go.imgsmail.ru/favicon.ico", 143 | "search_url": "https://go.mail.ru/search?q={searchTerms}", 144 | "encoding": "windows-1251", 145 | "suggest_url": "https://suggests.go.mail.ru/chrome?q={searchTerms}", 146 | "type": "SEARCH_ENGINE_MAILRU", 147 | "id": 83 148 | }, 149 | 150 | "najdi": { 151 | "name": "Najdi.si", 152 | "keyword": "najdi.si", 153 | "favicon_url": "https://www.najdi.si/assets/PROD-1.4.10/ctx/images/favicon.ico", 154 | "search_url": "https://www.najdi.si/search.jsp?q={searchTerms}", 155 | "type": "SEARCH_ENGINE_NAJDI", 156 | "id": 87 157 | }, 158 | 159 | "naver": { 160 | "name": "\ub124\uc774\ubc84", 161 | "keyword": "naver.com", 162 | "favicon_url": "https://sstatic.naver.net/search/favicon/favicon_140327.ico", 163 | "search_url": "https://search.naver.com/search.naver?ie={inputEncoding}&query={searchTerms}", 164 | "suggest_url": "https://ac.search.naver.com/nx/ac?of=os&ie={inputEncoding}&q={searchTerms}&oe={outputEncoding}", 165 | "type": "SEARCH_ENGINE_NAVER", 166 | "id": 67 167 | }, 168 | 169 | "onet": { 170 | "name": "Onet.pl", 171 | "keyword": "onet.pl", 172 | "favicon_url": "https://szukaj.onet.pl/favicon.ico", 173 | "search_url": "https://szukaj.onet.pl/wyniki.html?qt={searchTerms}", 174 | "type": "SEARCH_ENGINE_ONET", 175 | "id": 75 176 | }, 177 | 178 | "seznam": { 179 | "name": "Seznam", 180 | "keyword": "seznam.cz", 181 | "favicon_url": "https://search.seznam.cz/r/img/favicon.ico", 182 | "search_url": "https://search.seznam.cz/?q={searchTerms}", 183 | "suggest_url": "https://suggest.fulltext.seznam.cz/fulltext_ff?phrase={searchTerms}", 184 | "type": "SEARCH_ENGINE_SEZNAM", 185 | "id": 25 186 | }, 187 | 188 | "sogou": { 189 | "name": "\u641c\u72d7", 190 | "keyword": "sogou.com", 191 | "favicon_url": "https://www.sogou.com/images/logo/old/favicon.ico", 192 | "search_url": "https://www.sogou.com/web?ie={inputEncoding}&query={searchTerms}", 193 | "type": "SEARCH_ENGINE_SOGOU", 194 | "id": 56 195 | }, 196 | 197 | "vinden": { 198 | "name": "Vinden.nl", 199 | "keyword": "vinden.nl", 200 | "favicon_url": "https://www.vinden.nl/favicon.ico", 201 | "search_url": "https://www.vinden.nl/?q={searchTerms}", 202 | "type": "SEARCH_ENGINE_VINDEN", 203 | "id": 53 204 | }, 205 | 206 | "virgilio": { 207 | "name": "Virgilio", 208 | "keyword": "virgilio.it", 209 | "favicon_url": "https://ricerca.virgilio.it/common/favicon.ico", 210 | "search_url": "https://ricerca.virgilio.it/ricerca?qs={searchTerms}", 211 | "encoding": "ISO-8859-1", 212 | "type": "SEARCH_ENGINE_VIRGILIO", 213 | "id": 62 214 | }, 215 | 216 | "yahoo": { 217 | "name": "Yahoo!", 218 | "keyword": "yahoo.com", 219 | "favicon_url": "https://search.yahoo.com/favicon.ico", 220 | "search_url": "https://search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 221 | "suggest_url": "https://search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 222 | "type": "SEARCH_ENGINE_YAHOO", 223 | "id": 2 224 | }, 225 | 226 | "yahoo_ar": { 227 | "name": "Yahoo! Argentina", 228 | "keyword": "ar.yahoo.com", 229 | "favicon_url": "https://ar.search.yahoo.com/favicon.ico", 230 | "search_url": "https://ar.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 231 | "suggest_url": "https://ar.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 232 | "type": "SEARCH_ENGINE_YAHOO", 233 | "id": 2 234 | }, 235 | 236 | "yahoo_at": { 237 | "name": "Yahoo! \u00d6sterreich", 238 | "keyword": "at.yahoo.com", 239 | "favicon_url": "https://at.search.yahoo.com/favicon.ico", 240 | "search_url": "https://at.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 241 | "suggest_url": "https://at.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 242 | "type": "SEARCH_ENGINE_YAHOO", 243 | "id": 2 244 | }, 245 | 246 | "yahoo_au": { 247 | "name": "Yahoo!7", 248 | "keyword": "au.yahoo.com", 249 | "favicon_url": "https://au.search.yahoo.com/favicon.ico", 250 | "search_url": "https://au.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 251 | "suggest_url": "https://au.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 252 | "type": "SEARCH_ENGINE_YAHOO", 253 | "id": 2 254 | }, 255 | 256 | "yahoo_br": { 257 | "name": "Yahoo! Brasil", 258 | "keyword": "br.yahoo.com", 259 | "favicon_url": "https://br.search.yahoo.com/favicon.ico", 260 | "search_url": "https://br.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 261 | "suggest_url": "https://br.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 262 | "type": "SEARCH_ENGINE_YAHOO", 263 | "id": 2 264 | }, 265 | 266 | "yahoo_ca": { 267 | "name": "Yahoo! Canada", 268 | "keyword": "ca.yahoo.com", 269 | "favicon_url": "https://ca.search.yahoo.com/favicon.ico", 270 | "search_url": "https://ca.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 271 | "suggest_url": "https://ca.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 272 | "type": "SEARCH_ENGINE_YAHOO", 273 | "id": 2 274 | }, 275 | 276 | "yahoo_ch": { 277 | "name": "Yahoo! Schweiz", 278 | "keyword": "ch.yahoo.com", 279 | "favicon_url": "https://ch.search.yahoo.com/favicon.ico", 280 | "search_url": "https://ch.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 281 | "suggest_url": "https://ch.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 282 | "type": "SEARCH_ENGINE_YAHOO", 283 | "id": 2 284 | }, 285 | 286 | "yahoo_cl": { 287 | "name": "Yahoo! Chile", 288 | "keyword": "cl.yahoo.com", 289 | "favicon_url": "https://cl.search.yahoo.com/favicon.ico", 290 | "search_url": "https://cl.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 291 | "suggest_url": "https://cl.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 292 | "type": "SEARCH_ENGINE_YAHOO", 293 | "id": 2 294 | }, 295 | 296 | "yahoo_co": { 297 | "name": "Yahoo! Colombia", 298 | "keyword": "co.yahoo.com", 299 | "favicon_url": "https://co.search.yahoo.com/favicon.ico", 300 | "search_url": "https://co.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 301 | "suggest_url": "https://co.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 302 | "type": "SEARCH_ENGINE_YAHOO", 303 | "id": 2 304 | }, 305 | 306 | "yahoo_de": { 307 | "name": "Yahoo! Deutschland", 308 | "keyword": "de.yahoo.com", 309 | "favicon_url": "https://de.search.yahoo.com/favicon.ico", 310 | "search_url": "https://de.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 311 | "suggest_url": "https://de.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 312 | "type": "SEARCH_ENGINE_YAHOO", 313 | "id": 2 314 | }, 315 | 316 | // For regional Yahoo variants without a region-specific suggestion service, 317 | // suggestion is disabled. For some of them, we might consider using one of 318 | // the other language/country URLs as a fallback. 319 | "yahoo_dk": { 320 | "name": "Yahoo! Danmark", 321 | "keyword": "dk.yahoo.com", 322 | "favicon_url": "https://dk.search.yahoo.com/favicon.ico", 323 | "search_url": "https://dk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 324 | "type": "SEARCH_ENGINE_YAHOO", 325 | "id": 2 326 | }, 327 | 328 | "yahoo_es": { 329 | "name": "Yahoo! Espa\u00f1a", 330 | "keyword": "es.yahoo.com", 331 | "favicon_url": "https://es.search.yahoo.com/favicon.ico", 332 | "search_url": "https://es.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 333 | "suggest_url": "https://es.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 334 | "type": "SEARCH_ENGINE_YAHOO", 335 | "id": 2 336 | }, 337 | 338 | "yahoo_fi": { 339 | "name": "Yahoo! Suomi", 340 | "keyword": "fi.yahoo.com", 341 | "favicon_url": "https://fi.search.yahoo.com/favicon.ico", 342 | "search_url": "https://fi.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 343 | "type": "SEARCH_ENGINE_YAHOO", 344 | "id": 2 345 | }, 346 | 347 | "yahoo_fr": { 348 | "name": "Yahoo! France", 349 | "keyword": "fr.yahoo.com", 350 | "favicon_url": "https://fr.search.yahoo.com/favicon.ico", 351 | "search_url": "https://fr.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 352 | "suggest_url": "https://fr.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 353 | "type": "SEARCH_ENGINE_YAHOO", 354 | "id": 5 // Can't be 2 as this has to appear in the Belgium list alongside 355 | // yahoo. 356 | }, 357 | 358 | "yahoo_gr": { 359 | "name": "Yahoo! \u0395\u03bb\u03bb\u03ac\u03b4\u03b1\u03c2", 360 | "keyword": "gr.yahoo.com", 361 | "favicon_url": "https://gr.search.yahoo.com/favicon.ico", 362 | "search_url": "https://gr.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 363 | "type": "SEARCH_ENGINE_YAHOO", 364 | "id": 2 365 | }, 366 | 367 | "yahoo_hk": { 368 | "name": "Yahoo! Hong Kong", 369 | "keyword": "hk.yahoo.com", 370 | "favicon_url": "https://hk.search.yahoo.com/favicon.ico", 371 | "search_url": "https://hk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 372 | "suggest_url": "https://hk.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 373 | "type": "SEARCH_ENGINE_YAHOO", 374 | "id": 2 375 | }, 376 | 377 | "yahoo_id": { 378 | "name": "Yahoo! Indonesia", 379 | "keyword": "id.yahoo.com", 380 | "favicon_url": "https://id.search.yahoo.com/favicon.ico", 381 | "search_url": "https://id.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 382 | "suggest_url": "https://id.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 383 | "type": "SEARCH_ENGINE_YAHOO", 384 | "id": 2 385 | }, 386 | 387 | "yahoo_in": { 388 | "name": "Yahoo! India", 389 | "keyword": "in.yahoo.com", 390 | "favicon_url": "https://in.search.yahoo.com/favicon.ico", 391 | "search_url": "https://in.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 392 | "suggest_url": "https://in.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 393 | "type": "SEARCH_ENGINE_YAHOO", 394 | "id": 2 395 | }, 396 | 397 | "yahoo_jp": { 398 | "name": "Yahoo! JAPAN", 399 | "keyword": "yahoo.co.jp", 400 | "favicon_url": "https://search.yahoo.co.jp/favicon.ico", 401 | "search_url": "https://search.yahoo.co.jp/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 402 | "suggest_url": "https://search.yahooapis.jp/AssistSearchService/V2/webassistSearch?p={searchTerms}&appid=oQsoxcyxg66enp0TYoirkKoryq6rF8bK76mW0KYxZ0v0WPLtn.Lix6wy8F_LwGWHUII-&output=fxjson&fr=crmas", 403 | "type": "SEARCH_ENGINE_YAHOO", 404 | "id": 2 405 | }, 406 | 407 | "yahoo_maktoob": { 408 | "name": "Yahoo!\u200e \u0645\u0643\u062a\u0648\u0628", 409 | "keyword": "maktoob.yahoo.com", 410 | "favicon_url": "https://maktoob.search.yahoo.com/favicon.ico", 411 | "search_url": "https://maktoob.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 412 | "type": "SEARCH_ENGINE_YAHOO", 413 | "id": 2 414 | }, 415 | 416 | "yahoo_mx": { 417 | "name": "Yahoo! M\u00e9xico", 418 | "keyword": "mx.yahoo.com", 419 | "favicon_url": "https://mx.search.yahoo.com/favicon.ico", 420 | "search_url": "https://mx.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 421 | "suggest_url": "https://mx.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 422 | "type": "SEARCH_ENGINE_YAHOO", 423 | "id": 2 424 | }, 425 | 426 | "yahoo_my": { 427 | "name": "Yahoo! Malaysia", 428 | "keyword": "malaysia.yahoo.com", 429 | "favicon_url": "https://malaysia.search.yahoo.com/favicon.ico", 430 | "search_url": "https://malaysia.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 431 | "suggest_url": "https://malaysia.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 432 | "type": "SEARCH_ENGINE_YAHOO", 433 | "id": 2 434 | }, 435 | 436 | "yahoo_nl": { 437 | "name": "Yahoo! Nederland", 438 | "keyword": "nl.yahoo.com", 439 | "favicon_url": "https://nl.search.yahoo.com/favicon.ico", 440 | "search_url": "https://nl.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 441 | "suggest_url": "https://nl.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 442 | "type": "SEARCH_ENGINE_YAHOO", 443 | "id": 2 444 | }, 445 | 446 | "yahoo_nz": { 447 | "name": "Yahoo! New Zealand", 448 | "keyword": "nz.yahoo.com", 449 | "favicon_url": "https://nz.search.yahoo.com/favicon.ico", 450 | "search_url": "https://nz.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 451 | "suggest_url": "https://nz.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 452 | "type": "SEARCH_ENGINE_YAHOO", 453 | "id": 2 454 | }, 455 | 456 | "yahoo_pe": { 457 | "name": "Yahoo! Per\u00fa", 458 | "keyword": "pe.yahoo.com", 459 | "favicon_url": "https://pe.search.yahoo.com/favicon.ico", 460 | "search_url": "https://pe.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 461 | "suggest_url": "https://pe.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 462 | "type": "SEARCH_ENGINE_YAHOO", 463 | "id": 2 464 | }, 465 | 466 | "yahoo_ph": { 467 | "name": "Yahoo! Philippines", 468 | "keyword": "ph.yahoo.com", 469 | "favicon_url": "https://ph.search.yahoo.com/favicon.ico", 470 | "search_url": "https://ph.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 471 | "suggest_url": "https://ph.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 472 | "type": "SEARCH_ENGINE_YAHOO", 473 | "id": 2 474 | }, 475 | 476 | "yahoo_qc": { 477 | "name": "Yahoo! Qu\u00e9bec", 478 | "keyword": "qc.yahoo.com", 479 | "favicon_url": "https://qc.search.yahoo.com/favicon.ico", 480 | "search_url": "https://qc.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 481 | "suggest_url": "https://qc.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 482 | "type": "SEARCH_ENGINE_YAHOO", 483 | "id": 5 // Can't be 2 as this has to appear in the Canada list alongside 484 | // yahoo_ca. 485 | }, 486 | 487 | "yahoo_ro": { 488 | "name": "Yahoo! Rom\u00e2nia", 489 | "keyword": "ro.yahoo.com", 490 | "favicon_url": "https://ro.search.yahoo.com/favicon.ico", 491 | "search_url": "https://ro.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 492 | "type": "SEARCH_ENGINE_YAHOO", 493 | "id": 2 494 | }, 495 | 496 | "yahoo_se": { 497 | "name": "Yahoo! Sverige", 498 | "keyword": "se.yahoo.com", 499 | "favicon_url": "https://se.search.yahoo.com/favicon.ico", 500 | "search_url": "https://se.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 501 | "type": "SEARCH_ENGINE_YAHOO", 502 | "id": 2 503 | }, 504 | 505 | "yahoo_sg": { 506 | "name": "Yahoo! Singapore", 507 | "keyword": "sg.yahoo.com", 508 | "favicon_url": "https://sg.search.yahoo.com/favicon.ico", 509 | "search_url": "https://sg.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 510 | "suggest_url": "https://sg.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 511 | "type": "SEARCH_ENGINE_YAHOO", 512 | "id": 2 513 | }, 514 | 515 | "yahoo_th": { 516 | "name": "Yahoo! \u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22", 517 | "keyword": "th.yahoo.com", 518 | "favicon_url": "https://th.search.yahoo.com/favicon.ico", 519 | "search_url": "https://th.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 520 | "suggest_url": "https://th.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 521 | "type": "SEARCH_ENGINE_YAHOO", 522 | "id": 2 523 | }, 524 | 525 | "yahoo_tr": { 526 | "name": "Yahoo! T\u00fcrkiye", 527 | "keyword": "tr.yahoo.com", 528 | "favicon_url": "https://tr.search.yahoo.com/favicon.ico", 529 | "search_url": "https://tr.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 530 | "type": "SEARCH_ENGINE_YAHOO", 531 | "id": 2 532 | }, 533 | 534 | "yahoo_tw": { 535 | "name": "Yahoo!\u5947\u6469", 536 | "keyword": "tw.yahoo.com", 537 | "favicon_url": "https://tw.search.yahoo.com/favicon.ico", 538 | "search_url": "https://tw.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 539 | "suggest_url": "https://tw.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 540 | "type": "SEARCH_ENGINE_YAHOO", 541 | "id": 2 542 | }, 543 | 544 | "yahoo_uk": { 545 | "name": "Yahoo! UK & Ireland", 546 | "keyword": "uk.yahoo.com", 547 | "favicon_url": "https://uk.search.yahoo.com/favicon.ico", 548 | "search_url": "https://uk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 549 | "suggest_url": "https://uk.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 550 | "type": "SEARCH_ENGINE_YAHOO", 551 | "id": 2 552 | }, 553 | 554 | "yahoo_ve": { 555 | "name": "Yahoo! Venezuela", 556 | "keyword": "ve.yahoo.com", 557 | "favicon_url": "https://ve.search.yahoo.com/favicon.ico", 558 | "search_url": "https://ve.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 559 | "suggest_url": "https://ve.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 560 | "type": "SEARCH_ENGINE_YAHOO", 561 | "id": 2 562 | }, 563 | 564 | "yahoo_vn": { 565 | "name": "Yahoo! Vi\u1ec7t Nam", 566 | "keyword": "vn.yahoo.com", 567 | "favicon_url": "https://vn.search.yahoo.com/favicon.ico", 568 | "search_url": "https://vn.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}", 569 | "suggest_url": "https://vn.search.yahoo.com/sugg/chrome?output=fxjson&appid=crmas&command={searchTerms}", 570 | "type": "SEARCH_ENGINE_YAHOO", 571 | "id": 2 572 | }, 573 | 574 | "yandex_by": { 575 | "name": "\u042f\u043d\u0434\u0435\u043a\u0441", 576 | "keyword": "yandex.by", 577 | "favicon_url": "https://yandex.st/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", 578 | "search_url": "https://yandex.by/{yandex:searchPath}?text={searchTerms}", 579 | "suggest_url": "https://api.browser.yandex.by/suggest/get?part={searchTerms}", 580 | "image_url": "https://yandex.by/images/search/?rpt=imageview", 581 | "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", 582 | "new_tab_url": "https://www.yandex.by/chrome/newtab", 583 | "type": "SEARCH_ENGINE_YANDEX", 584 | "id": 15 585 | }, 586 | 587 | "yandex_kz": { 588 | "name": "\u042f\u043d\u0434\u0435\u043a\u0441", 589 | "keyword": "yandex.kz", 590 | "favicon_url": "https://yandex.st/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", 591 | "search_url": "https://yandex.kz/{yandex:searchPath}?text={searchTerms}", 592 | "suggest_url": "https://api.browser.yandex.kz/suggest/get?part={searchTerms}", 593 | "image_url": "https://yandex.kz/images/search/?rpt=imageview", 594 | "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", 595 | "new_tab_url": "https://www.yandex.kz/chrome/newtab", 596 | "type": "SEARCH_ENGINE_YANDEX", 597 | "id": 15 598 | }, 599 | 600 | "yandex_ru": { 601 | "name": "\u042f\u043d\u0434\u0435\u043a\u0441", 602 | "keyword": "yandex.ru", 603 | "favicon_url": "https://yandex.st/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", 604 | "search_url": "https://yandex.ru/{yandex:searchPath}?text={searchTerms}", 605 | "suggest_url": "https://api.browser.yandex.ru/suggest/get?part={searchTerms}", 606 | "image_url": "https://yandex.ru/images/search/?rpt=imageview", 607 | "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", 608 | "new_tab_url": "https://www.yandex.ru/chrome/newtab", 609 | "type": "SEARCH_ENGINE_YANDEX", 610 | "id": 15 611 | }, 612 | 613 | "yandex_tr": { 614 | "name": "Yandex", 615 | "keyword": "yandex.com.tr", 616 | "favicon_url": "https://yandex.st/lego/_/rBTjd6UOPk5913OSn5ZQVYMTQWQ.ico", 617 | "search_url": "https://www.yandex.com.tr/{yandex:searchPath}?text={searchTerms}", 618 | "suggest_url": "https://api.browser.yandex.com.tr/suggest/get?part={searchTerms}", 619 | "image_url": "https://yandex.com.tr/gorsel/search?rpt=imageview", 620 | "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", 621 | "new_tab_url": "https://www.yandex.com.tr/chrome/newtab", 622 | "type": "SEARCH_ENGINE_YANDEX", 623 | "id": 15 624 | }, 625 | 626 | "yandex_ua": { 627 | "name": "\u042f\u043d\u0434\u0435\u043a\u0441", 628 | "keyword": "yandex.ua", 629 | "favicon_url": "https://yandex.st/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", 630 | "search_url": "https://yandex.ua/{yandex:searchPath}?text={searchTerms}", 631 | "suggest_url": "https://api.browser.yandex.ua/suggest/get?part={searchTerms}", 632 | "image_url": "https://yandex.ua/images/search/?rpt=imageview", 633 | "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", 634 | "new_tab_url": "https://www.yandex.ua/chrome/newtab", 635 | "type": "SEARCH_ENGINE_YANDEX", 636 | "id": 15 637 | }, 638 | 639 | 640 | // UMA-only engines //////////////////////////////////////////////////////// 641 | 642 | // The following engines are not included in any of the country lists. They 643 | // are listed in |kAllEngines|, however, so that GetEngineType can find them 644 | // for UMA reporting purposes. 645 | 646 | "atlas_cz": { 647 | "name": "Atlas.cz", 648 | "keyword": "atlas.cz", 649 | "favicon_url": "https://searchatlas.centrum.cz/favicon.ico", 650 | "search_url": "https://searchatlas.centrum.cz/?q={searchTerms}", 651 | "suggest_url": "https://radce.centrum.cz/?q={searchTerms}&of=1", 652 | "type": "SEARCH_ENGINE_ATLAS", 653 | "id": 27 654 | }, 655 | 656 | "atlas_sk": { 657 | "name": "ATLAS.SK", 658 | "keyword": "atlas.sk", 659 | "favicon_url": "https://static.mediacentrum.sk/katalog/atlas.sk/images/favicon.ico", 660 | "search_url": "https://hladaj.atlas.sk/fulltext/?phrase={searchTerms}", 661 | "id": 27 662 | }, 663 | 664 | "avg": { 665 | "name": "AVG", 666 | "keyword": "search.avg.com", 667 | "favicon_url": "https://search.avg.com/favicon.ico", 668 | "search_url": "https://search.avg.com/search?q={searchTerms}", 669 | "alternate_urls": [ 670 | "https://isearch.avg.com/search?q={searchTerms}", 671 | "https://search.avg.com/route/?q={searchTerms}&lng={language}" 672 | ], 673 | "type": "SEARCH_ENGINE_AVG", 674 | "id": 50 675 | }, 676 | 677 | "babylon": { 678 | "name": "Babylon", 679 | "keyword": "search.babylon.com", 680 | "favicon_url": "https://search.babylon.com/favicon.ico", 681 | "search_url": "https://search.babylon.com/home?q={searchTerms}", 682 | "alternate_urls": [ 683 | "https://search.babylon.com/?q={searchTerms}" 684 | ], 685 | "type": "SEARCH_ENGINE_BABYLON", 686 | "id": 64 687 | }, 688 | 689 | "conduit": { 690 | "name": "Conduit", 691 | "keyword": "conduit.com", 692 | "favicon_url": "https://www.conduit.com/favicon.ico", 693 | "search_url": "https://www.conduit.com/search?q={searchTerms}&ie={inputEncoding}&cx=010301873083402539744%3Anxaq5wgrtuo&cof=forid%3A11", 694 | "alternate_urls": [ 695 | "https://search.conduit.com/Results.aspx?q={searchTerms}" 696 | ], 697 | "type": "SEARCH_ENGINE_CONDUIT", 698 | "id": 36 699 | }, 700 | 701 | "delfi_lt": { 702 | "name": "DELFI", 703 | "keyword": "delfi.lt", 704 | "favicon_url": "https://www.delfi.lt/favicon.ico", 705 | "search_url": "https://www.delfi.lt/paieska/?q={searchTerms}", 706 | "type": "SEARCH_ENGINE_DELFI", 707 | "id": 45 708 | }, 709 | 710 | "delfi_lv": { 711 | "name": "DELFI", 712 | "keyword": "delfi.lv", 713 | "favicon_url": "https://g1.delphi.lv/favicon.ico", 714 | "search_url": "https://www.delfi.lv/search_all/?ie={inputEncoding}&q={searchTerms}&lang={language}&cx=partner-pub-7754285690273419%3A1507605038&cof=FORID%3A10", 715 | "type": "SEARCH_ENGINE_DELFI", 716 | "id": 45 717 | }, 718 | 719 | "delta": { 720 | "name": "Delta", 721 | "keyword": "delta-search.com", 722 | "favicon_url": "https://www.delta-search.com/favicon.ico", 723 | "search_url": "https://www.delta-search.com/home?q={searchTerms}", 724 | "alternate_urls": [ 725 | "https://www.delta-search.com/?q={searchTerms}", 726 | "https://www1.delta-search.com/home?q={searchTerms}", 727 | "https://www1.delta-search.com/?q={searchTerms}", 728 | "https://www2.delta-search.com/home?q={searchTerms}", 729 | "https://www2.delta-search.com/?q={searchTerms}", 730 | "https://www.search.delta-search.com/home?q={searchTerms}", 731 | "https://www.search.delta-search.com/?q={searchTerms}", 732 | "https://www.yhs.delta-search.com/home?q={searchTerms}", 733 | "https://www.yhs.delta-search.com/?q={searchTerms}", 734 | "https://mixidj.delta-search.com/home?q={searchTerms}", 735 | "https://mixidj.delta-search.com/?q={searchTerms}", 736 | "https://www.search.delta-search.com/home?q={searchTerms}", 737 | "https://www.search.delta-search.com/?q={searchTerms}" 738 | ], 739 | "type": "SEARCH_ENGINE_DELTA", 740 | "id": 66 741 | }, 742 | 743 | "funmoods": { 744 | "name": "Funmoods", 745 | "keyword": "searchfunmoods.com", 746 | "favicon_url": "https://searchfunmoods.com/favicon.ico", 747 | "search_url": "https://searchfunmoods.com/results.php?q={searchTerms}", 748 | "type": "SEARCH_ENGINE_FUNMOODS", 749 | "id": 60 750 | }, 751 | 752 | "goo": { 753 | "name": "goo", 754 | "keyword": "search.goo.ne.jp", 755 | "favicon_url": "https://goo.ne.jp/favicon.ico", 756 | "search_url": "https://search.goo.ne.jp/web.jsp?MT={searchTerms}&IE={inputEncoding}", 757 | "suggest_url": "https://search.goo.ne.jp/sgt.jsp?MT={searchTerms}&CL=plugin&FM=json&IE={inputEncoding}", 758 | "encoding": "EUC-JP", 759 | "type": "SEARCH_ENGINE_GOO", 760 | "id": 23 761 | }, 762 | 763 | "imesh": { 764 | "name": "IMesh", 765 | "keyword": "search.imesh.net", 766 | "favicon_url": "https://search.imesh.net/favicon.ico", 767 | "search_url": "https://search.imesh.net/music?hl={language}&si={searchTerms}", 768 | "type": "SEARCH_ENGINE_IMESH", 769 | "id": 81 770 | }, 771 | 772 | "iminent": { 773 | "name": "SearchTheWeb", 774 | "keyword": "iminent.com", 775 | "favicon_url": "https://search.iminent.com/Shared/Images/favicon_gl.ico", 776 | "search_url": "https://search.iminent.com/?q={searchTerms}", 777 | "alternate_urls": [ 778 | "https://search.iminent.com/SearchTheWeb/v6/1033/homepage/Default.aspx#q={searchTerms}", 779 | "https://search.iminent.com/SearchTheWeb/v6/1033/homepage/Result.aspx#q={searchTerms}", 780 | "https://start.iminent.com/?q={searchTerms}", 781 | "https://start.iminent.com/StartWeb/1033/homepage/#q={searchTerms}" 782 | ], 783 | "type": "SEARCH_ENGINE_IMINENT", 784 | "id": 79 785 | }, 786 | 787 | "in": { 788 | "name": "in.gr", 789 | "keyword": "in.gr", 790 | "favicon_url": "https://find.in.gr/Themes/1/Default/Media/Layout/icon_in.png", 791 | "search_url": "https://find.in.gr/?q={searchTerms}&ie={inputEncoding}&cx=partner-pub-3451081775397713%3Aklnvxp4nycj&cof=FORID%3A9", 792 | "type": "SEARCH_ENGINE_IN", 793 | "id": 54 794 | }, 795 | 796 | "incredibar": { 797 | "name": "MyStart", 798 | "keyword": "mystart.incredibar.com", 799 | "favicon_url": "https://search.incredibar.com/favicon.ico", 800 | "search_url": "https://search.incredibar.com/search.php?q={searchTerms}", 801 | "alternate_urls": [ 802 | "https://search.incredibar.com/?q={searchTerms}", 803 | "https://mystart.incredibar.com/?search={searchTerms}" 804 | ], 805 | "type": "SEARCH_ENGINE_INCREDIBAR", 806 | "id": 74 807 | }, 808 | 809 | "libero": { 810 | "name": "Libero", 811 | "keyword": "libero.it", 812 | "favicon_url": "https://ms1.iol.it/graph_hf/v.8.3.04/themes/default/img/favicon.ico", 813 | "search_url": "https://arianna.libero.it/search/abin/integrata.cgi?query={searchTerms}", 814 | "encoding": "ISO-8859-1", 815 | "type": "SEARCH_ENGINE_LIBERO", 816 | "id": 63 817 | }, 818 | 819 | "neti": { 820 | "name": "NETI", 821 | "keyword": "neti.ee", 822 | "favicon_url": "https://www.neti.ee/favicon.ico", 823 | "search_url": "https://www.neti.ee/cgi-bin/otsing?query={searchTerms}", 824 | "suggest_url": "https://www.neti.ee/api/suggestOS?suggestQuery={searchTerms}", 825 | "encoding": "ISO-8859-1", 826 | "type": "SEARCH_ENGINE_NETI", 827 | "id": 44 828 | }, 829 | 830 | "nigma": { 831 | "name": "\u041d\u0438\u0433\u043c\u0430", 832 | "keyword": "nigma.ru", 833 | "favicon_url": "https://nigma.ru/themes/nigma/img/favicon.ico", 834 | "search_url": "https://nigma.ru/?s={searchTerms}", 835 | "suggest_url": "https://autocomplete.nigma.ru/complete/query_help.php?suggest=true&q={searchTerms}", 836 | "type": "SEARCH_ENGINE_NIGMA", 837 | "id": 43 838 | }, 839 | 840 | "ok": { 841 | "name": "OK.hu", 842 | "keyword": "ok.hu", 843 | "favicon_url": "https://ok.hu/gfx/favicon.ico", 844 | "search_url": "https://ok.hu/katalogus?q={searchTerms}", 845 | "encoding": "ISO-8859-2", 846 | "type": "SEARCH_ENGINE_OK", 847 | "id": 6 848 | }, 849 | 850 | "rambler": { 851 | "name": "\u0420\u0430\u043c\u0431\u043b\u0435\u0440", 852 | "keyword": "rambler.ru", 853 | "favicon_url": "https://nova.rambler.ru/static/blocks/images/favicon.ico", 854 | "search_url": "https://nova.rambler.ru/search?query={searchTerms}", 855 | "suggest_url": "https://nova.rambler.ru/suggest?v=3&query={searchTerms}", 856 | "type": "SEARCH_ENGINE_RAMBLER", 857 | "id": 16 858 | }, 859 | 860 | "sapo": { 861 | "name": "SAPO", 862 | "keyword": "sapo.pt", 863 | "favicon_url": "https://imgs.sapo.pt/images/sapo.ico", 864 | "search_url": "https://pesquisa.sapo.pt/?q={searchTerms}", 865 | "suggest_url": "https://pesquisa.sapo.pt/livesapo?q={searchTerms}", 866 | "type": "SEARCH_ENGINE_SAPO", 867 | "id": 77 868 | }, 869 | 870 | "searchnu": { 871 | "name": "searchnu", 872 | "keyword": "searchnu.com", 873 | "favicon_url": "https://www.searchnu.com/favicon.ico", 874 | "search_url": "https://www.searchnu.com/web?hl={language}&si={searchTerms}", 875 | "type": "SEARCH_ENGINE_SEARCHNU", 876 | "id": 61 877 | }, 878 | 879 | "search_results": { 880 | "name": "Search-results", 881 | "keyword": "search-results.com", 882 | "favicon_url": "https://ak.apnstatic.com/media/images/favicon_search-results.ico", 883 | "search_url": "https://dts.search-results.com/sr?lng={language}&src=hmp&q={searchTerms}", 884 | "alternate_urls": [ 885 | "https://www.search-results.com/web?q={searchTerms}" 886 | ], 887 | "type": "SEARCH_ENGINE_SEARCH_RESULTS", 888 | "id": 78 889 | }, 890 | 891 | "snapdo": { 892 | "name": "SnapDo", 893 | "keyword": "search.snapdo.com", 894 | "favicon_url": "https://linkurystoragenorthus.blob.core.windows.net/static/favicon.ico", 895 | "search_url": "https://search.snapdo.com/?q={searchTerms}", 896 | "alternate_urls": [ 897 | "https://search.snap.do/?q={searchTerms}", 898 | "https://feed.snapdo.com/?q={searchTerms}", 899 | "https://feed.snap.do/?q={searchTerms}" 900 | ], 901 | "type": "SEARCH_ENGINE_SNAPDO", 902 | "id": 70 903 | }, 904 | 905 | "softonic": { 906 | "name": "softonic", 907 | "keyword": "search.softonic.com", 908 | "favicon_url": "https://search.softonic.com/img/favicon.ico", 909 | "search_url": "https://search.softonic.com/?q={searchTerms}", 910 | "alternate_urls": [ 911 | "https://en.softonic.com/s/{searchTerms}", 912 | "https://www.softonic.com/s/{searchTerms}", 913 | "https://www.softonic.com.br/s/{searchTerms}", 914 | "https://buscador.softonic.com/?q={searchTerms}", 915 | "https://nl.softonic.com/s/{searchTerms}" 916 | ], 917 | "type": "SEARCH_ENGINE_SOFTONIC", 918 | "id": 80 919 | }, 920 | 921 | "sweetim": { 922 | "name": "SweetIM", 923 | "keyword": "home.sweetim.com", 924 | "favicon_url": "https://search.sweetim.com/favicon.ico", 925 | "search_url": "https://search.sweetim.com/search.asp?q={searchTerms}&ln={language}", 926 | "type": "SEARCH_ENGINE_SWEETPACKS", 927 | "id": 65 928 | }, 929 | 930 | "sweetpacks": { 931 | "name": "Sweetpacks", 932 | "keyword": "start.sweetpacks.com", 933 | "favicon_url": "https://start.sweetpacks.com/favicon.ico", 934 | "search_url": "https://start.sweetpacks.com/search.asp?q={searchTerms}&ln={language}", 935 | "alternate_urls": [ 936 | "https://start.sweetpacks.com/?q={searchTerms}", 937 | "https://mysearch.sweetpacks.com/?q={searchTerms}" 938 | ], 939 | "type": "SEARCH_ENGINE_SWEETPACKS", 940 | "id": 65 941 | }, 942 | 943 | "terra_ar": { 944 | "name": "Terra Argentina", 945 | "keyword": "terra.com.ar", 946 | "favicon_url": "https://buscar.terra.com.ar/favicon.ico", 947 | "search_url": "https://buscar.terra.com.ar/Default.aspx?source=Search&ca=s&query={searchTerms}", 948 | "encoding": "ISO-8859-1", 949 | "type": "SEARCH_ENGINE_TERRA", 950 | "id": 90 951 | }, 952 | 953 | "terra_es": { 954 | "name": "Terra", 955 | "keyword": "terra.es", 956 | "favicon_url": "https://buscador.terra.es/favicon.ico", 957 | "search_url": "https://buscador.terra.es/Default.aspx?source=Search&ca=s&query={searchTerms}", 958 | "encoding": "ISO-8859-1", 959 | "type": "SEARCH_ENGINE_TERRA", 960 | "id": 90 961 | }, 962 | 963 | "tut": { 964 | "name": "TUT.BY", 965 | "keyword": "tut.by", 966 | "favicon_url": "https://search.tut.by/favicon.ico", 967 | "search_url": "https://search.tut.by/?ru=1&query={searchTerms}", 968 | "suggest_url": "https://suggest.yandex.ru/suggest-ff.cgi?part={searchTerms}&limit=10", 969 | "type": "SEARCH_ENGINE_TUT", 970 | "id": 17 971 | }, 972 | 973 | "walla": { 974 | "name": "\u05d5\u05d5\u05d0\u05dc\u05d4!", 975 | "keyword": "walla.co.il", 976 | "favicon_url": "https://www.walla.co.il/favicon.ico", 977 | "search_url": "https://search.walla.co.il/?q={searchTerms}", 978 | "type": "SEARCH_ENGINE_WALLA", 979 | "id": 55 980 | }, 981 | 982 | "wp": { 983 | "name": "Wirtualna Polska", 984 | "keyword": "wp.pl", 985 | "favicon_url": "https://i.wp.pl/a/i/stg/500/favicon.ico", 986 | "search_url": "https://szukaj.wp.pl/szukaj.html?q={searchTerms}", 987 | "type": "SEARCH_ENGINE_WP", 988 | "id": 76 989 | }, 990 | 991 | "zoznam": { 992 | "name": "Zoznam", 993 | "keyword": "zoznam.sk", 994 | "favicon_url": "https://www.zoznam.sk/favicon.ico", 995 | "search_url": "https://www.zoznam.sk/hladaj.fcgi?s={searchTerms}", 996 | "encoding": "windows-1250", 997 | "type": "SEARCH_ENGINE_ZOZNAM", 998 | "id": 85 999 | } 1000 | } 1001 | } 1002 | -------------------------------------------------------------------------------- /src/win8/metro_driver/resources/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/src/win8/metro_driver/resources/Logo.png -------------------------------------------------------------------------------- /src/win8/metro_driver/resources/SmallLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alex313031/chromium-xp/3252452337a619b72f7d71f0bd754eb57555755e/src/win8/metro_driver/resources/SmallLogo.png --------------------------------------------------------------------------------