├── .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
--------------------------------------------------------------------------------