From a4de915b74b0f527ebb8e40eb3ad2da881026b6b Mon Sep 17 00:00:00 2001 From: Electron Bot Date: Mon, 1 Jun 2020 13:34:34 -0700 Subject: [PATCH] chore: bump chromium to d66c2e32380bf5d1eb5e1fe37faef (master) (#23791) * chore: bump chromium in DEPS to db7d7b3e7cb2bc925f2abfde526280cfdfc21a41 * Update patches * chore: bump chromium in DEPS to 5613e1b99a44fcbe22f3910f803ca76903a77ec1 * Update patches * Network service: Remove primary_network_context bool. https://chromium-review.googlesource.com/c/chromium/src/+/2204678 * WebContentsObserver now implements OnRendererResponsive https://chromium-review.googlesource.com/c/chromium/src/+/2211066 * update patches * Fixup printing patch * chore: bump chromium in DEPS to e387b972cdd7160c416fa6c64a724e2258aa0218 * update patches * [printing] Move PrintHostMsg_DidPrintContent_Params to print.mojom https://chromium-review.googlesource.com/c/chromium/src/+/2212110 * [XProto] Move items from ::x11::XProto to ::x11 https://chromium-review.googlesource.com/c/chromium/src/+/2218476 * revert Add IChromeAccessible This was added in https://chromium-review.googlesource.com/c/chromium/src/+/2206224 but it breaks WOA builds because third_party/win_build_output/midl/ui/accessibility/platform/arm64 does not exist. The link above says that the new interface is behind a feature flag which is disabled by default so it is safe to remove for now. * rebaseline ichromeaccessible for Windows arm64 This patch will not be needed once we get the next roll. * Update to 1b9e01844e8bf1aaafc4a52c0c62af7f56d9637b to get arm64 fix * update patches * chore: bump chromium in DEPS to 096aefa04092ea00f7b68d8d19345883f20db3c3 * chore: bump chromium in DEPS to a524a45ffd1d6fd46a7a86138fe2b22df5b6651a * chore: update patches * Window Placement: Gate cross-screen fullscreen behavior on permission https://chromium-review.googlesource.com/c/chromium/src/+/2203268 * chore: add spec for https://crbug.com/1085836 * chore: bump chromium in DEPS to ff6c4f4b826d66c2e32380bf5d1eb5e1fe37faef * update patches Co-authored-by: John Kleinschmidt Co-authored-by: Electron Bot Co-authored-by: deepak1556 --- DEPS | 2 +- patches/chromium/.patches | 1 - ...client_precreatemessageloop_callback.patch | 2 +- .../add_didinstallconditionalfeatures.patch | 18 ++-- ...rustedauthclient_to_urlloaderfactory.patch | 18 ++-- patches/chromium/blink_local_frame.patch | 6 +- patches/chromium/blink_world_context.patch | 25 +++--- .../build_add_electron_tracing_category.patch | 2 +- patches/chromium/build_gn.patch | 2 +- patches/chromium/can_create_window.patch | 34 +++---- ...esources_not_chrome_for_spellchecker.patch | 4 +- .../chromium/content_browser_main_loop.patch | 4 +- patches/chromium/dcheck.patch | 6 +- ...ay_lock_the_protocol_scheme_registry.patch | 4 +- patches/chromium/desktop_media_list.patch | 19 ++-- .../disable_color_correct_rendering.patch | 14 +-- patches/chromium/disable_hidden.patch | 10 +-- ...xpose_setuseragent_on_networkcontext.patch | 12 +-- ..._scheduler_throttling_per_renderview.patch | 32 +++---- ...screen_rendering_with_viz_compositor.patch | 8 +- ...review_disabled_when_printing_to_pdf.patch | 4 +- ...ns_through_the_web_contents_delegate.patch | 4 +- ...h_when_using_xwindow_setxwindowicons.patch | 63 ------------- patches/chromium/frame_host_manager.patch | 16 ++-- ...gpu_notify_when_dxdiag_request_fails.patch | 4 +- ...nse_interceptor_to_point_to_electron.patch | 6 +- .../mas_disable_custom_window_frame.patch | 14 +-- .../chromium/mas_disable_remote_layer.patch | 8 +- patches/chromium/mas_no_private_api.patch | 36 ++++---- ...emote_certificate_verification_logic.patch | 14 +-- .../chromium/notification_provenance.patch | 12 +-- patches/chromium/pepper_plugin_support.patch | 62 ++++++------- patches/chromium/picture-in-picture.patch | 2 +- patches/chromium/preconnect_feature.patch | 6 +- patches/chromium/printing.patch | 84 ++++++------------ ...r_changes_to_the_webcontentsobserver.patch | 16 ++-- .../render_widget_host_view_base.patch | 18 ++-- ...ove_contentrendererclient_shouldfork.patch | 8 +- patches/chromium/scroll_bounce_flag.patch | 4 +- .../support_mixed_sandbox_with_zygote.patch | 10 +-- ...andboxed_ppapi_processes_skip_zygote.patch | 2 +- patches/chromium/web_contents.patch | 6 +- patches/chromium/webview_cross_drag.patch | 4 +- .../worker_context_will_destroy.patch | 8 +- patches/v8/add_realloc.patch | 4 +- patches/v8/build_gn.patch | 8 +- patches/v8/dcheck.patch | 8 +- ...export_private_v8_symbols_on_windows.patch | 4 +- ...ort_symbols_needed_for_windows_build.patch | 2 +- patches/v8/expose_mksnapshot.patch | 4 +- .../api/electron_api_browser_window.cc | 2 +- .../browser/api/electron_api_browser_window.h | 3 +- .../browser/api/electron_api_web_contents.cc | 14 ++- shell/browser/api/electron_api_web_contents.h | 7 +- shell/browser/common_web_contents_delegate.cc | 4 +- shell/browser/common_web_contents_delegate.h | 3 +- shell/browser/native_window_views.cc | 6 +- .../net/system_network_context_manager.cc | 4 - .../printing/print_preview_message_handler.cc | 2 +- shell/browser/ui/x/x_window_utils.cc | 3 +- spec-main/api-browser-window-spec.ts | 7 ++ spec-main/fixtures/apps/xwindow-icon/icon.png | Bin 0 -> 73801 bytes spec-main/fixtures/apps/xwindow-icon/main.js | 13 +++ .../fixtures/apps/xwindow-icon/package.json | 4 + 64 files changed, 328 insertions(+), 408 deletions(-) delete mode 100644 patches/chromium/fix_xserver_crash_when_using_xwindow_setxwindowicons.patch create mode 100644 spec-main/fixtures/apps/xwindow-icon/icon.png create mode 100644 spec-main/fixtures/apps/xwindow-icon/main.js create mode 100644 spec-main/fixtures/apps/xwindow-icon/package.json diff --git a/DEPS b/DEPS index 8dbacacddd3e..a06c035096f6 100644 --- a/DEPS +++ b/DEPS @@ -13,7 +13,7 @@ gclient_gn_args = [ vars = { 'chromium_version': - '9d15054f4cba060901e43deecf74002f11f47be3', + 'ff6c4f4b826d66c2e32380bf5d1eb5e1fe37faef', 'node_version': 'v12.16.3', 'nan_version': diff --git a/patches/chromium/.patches b/patches/chromium/.patches index 935fabe0f120..31a6d6f25056 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -95,6 +95,5 @@ upload_list_add_loadsync_method.patch breakpad_allow_getting_string_values_for_crash_keys.patch crash_allow_disabling_compression_on_linux.patch allow_setting_secondary_label_via_simplemenumodel.patch -fix_xserver_crash_when_using_xwindow_setxwindowicons.patch disable_unnecessary_ischromefirstrun_check.patch disable_dcheck_that_fails_with_software_compositing.patch diff --git a/patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch b/patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch index 213c279c45ed..7c55b8fcf728 100644 --- a/patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch +++ b/patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch @@ -10,7 +10,7 @@ Allows Electron to restore WER when ELECTRON_DEFAULT_ERROR_MODE is set. This should be upstreamed. diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc -index 4f34ae087e6e537869fe95858f943025ee32c82d..b1c939bd735ad6ed6a435258ef50c7a7ebf76481 100644 +index b502af8bb93dd45b5de046850f69ef34f9d04732..a6c84cd7909c6a1c70f3f4b5bd65531bf26f1a94 100644 --- a/content/gpu/gpu_main.cc +++ b/content/gpu/gpu_main.cc @@ -255,6 +255,10 @@ int GpuMain(const MainFunctionParams& parameters) { diff --git a/patches/chromium/add_didinstallconditionalfeatures.patch b/patches/chromium/add_didinstallconditionalfeatures.patch index a73b42482a8e..773098d62235 100644 --- a/patches/chromium/add_didinstallconditionalfeatures.patch +++ b/patches/chromium/add_didinstallconditionalfeatures.patch @@ -23,10 +23,10 @@ index 831a3574055881f31a3e7dbc98c0525b47af5dcb..9626f181ee471fec68af7ddfc968f2d8 int32_t world_id) {} virtual void DidClearWindowObject() {} diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc -index c01f9074c4896d7d67609efa86d5a0e995fa974c..95cec369e38dada721cbf26fe244461171d748f8 100644 +index 0fe316e4d949bf2c0e64a2374a8f639e3afee104..cb612a7002a4ae808ca488e2aa2adbb759310964 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc -@@ -4807,6 +4807,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local context, +@@ -4729,6 +4729,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local context, observer.DidCreateScriptContext(context, world_id); } @@ -40,10 +40,10 @@ index c01f9074c4896d7d67609efa86d5a0e995fa974c..95cec369e38dada721cbf26fe2444611 int world_id) { for (auto& observer : observers_) diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h -index 2d34029a192ad9680d445ae6c5394f1fbfc7e894..9f21385919593cfb1314d9fb659e4b5a3326bf44 100644 +index c8772a65b238f52855a6634dbe1722491a663354..c856fb03735e3a46135492513e71daf3b1dc6c1a 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h -@@ -751,6 +751,8 @@ class CONTENT_EXPORT RenderFrameImpl +@@ -724,6 +724,8 @@ class CONTENT_EXPORT RenderFrameImpl bool ShouldTrackUseCounter(const blink::WebURL& url) override; void DidCreateScriptContext(v8::Local context, int world_id) override; @@ -53,10 +53,10 @@ index 2d34029a192ad9680d445ae6c5394f1fbfc7e894..9f21385919593cfb1314d9fb659e4b5a int world_id) override; void DidChangeScrollOffset() override; diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h -index 5ab90fc0fb34c9bc5920b7d7efcb8819fed358c0..0a86dc4fc70e6c16e4cb27d6512ae5f589cd1125 100644 +index e8286b37ae00d2cbfea0f9138ecb6532c36324fc..1c5aae1c07e0c730a0cab28dccaa5a793d41d6ac 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h -@@ -548,6 +548,9 @@ class BLINK_EXPORT WebLocalFrameClient { +@@ -547,6 +547,9 @@ class BLINK_EXPORT WebLocalFrameClient { virtual void DidCreateScriptContext(v8::Local, int32_t world_id) {} @@ -79,7 +79,7 @@ index 1841d4bea144e2fe0fb69839d52ff2ba4aa6b551..64c5eb7d0da7684531b044de9d6d114f if (World().IsMainWorld()) { GetFrame()->Loader().DispatchDidClearWindowObjectInMainWorld(); diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc -index 8639eecc68c75c311af8ae00c8e028b63624a986..e66039442fbd4d3a456a724afe5eb28314459dc5 100644 +index eae1fafbaab524e590f414b54b366a6d709fad47..97da1b1639618dded697eb72d5959926ce725e24 100644 --- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc +++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc @@ -348,6 +348,13 @@ void LocalFrameClientImpl::DidCreateScriptContext( @@ -97,7 +97,7 @@ index 8639eecc68c75c311af8ae00c8e028b63624a986..e66039442fbd4d3a456a724afe5eb283 v8::Local context, int32_t world_id) { diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h -index 2dd3d3d0d036cce2ad49be52915e00c6872eca43..b7c0f955a3388f2c7758d2058d3077e2ba4e8496 100644 +index 7494f29aebe486454f35209a4a72d42dd46431a0..89f4129124b7fb01c449c51f767f4fe0dcc9c299 100644 --- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h +++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h @@ -78,6 +78,8 @@ class LocalFrameClientImpl final : public LocalFrameClient { @@ -110,7 +110,7 @@ index 2dd3d3d0d036cce2ad49be52915e00c6872eca43..b7c0f955a3388f2c7758d2058d3077e2 int32_t world_id) override; diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h -index b9a8d9bce7a02a6f46b91697efd4a32d62638f57..99d6bbdf43748adabf2084310abe458383a25f77 100644 +index a8443a8bfc2542ffad472206214279c1223d493f..8c7a4dec19d6fbca615b7bc282b0388189eef886 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client.h +++ b/third_party/blink/renderer/core/frame/local_frame_client.h @@ -297,6 +297,8 @@ class CORE_EXPORT LocalFrameClient : public FrameClient { diff --git a/patches/chromium/add_trustedauthclient_to_urlloaderfactory.patch b/patches/chromium/add_trustedauthclient_to_urlloaderfactory.patch index 3b5f05b74fde..47ab43611544 100644 --- a/patches/chromium/add_trustedauthclient_to_urlloaderfactory.patch +++ b/patches/chromium/add_trustedauthclient_to_urlloaderfactory.patch @@ -10,7 +10,7 @@ WebContents, and cancels the authentication if there's no WebContents available, which there isn't in the case of the 'net' module. diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom -index 6ec25efe5bb2819df27d0ba8fc0646f2b80668a8..06ec91de21cb51e0fba363fd54e7bb3a56b8e391 100644 +index 2001e6202cf61d1c70bf81334b62d0502ea8c9ba..9dad884c877ae77d1a2460361112903c06023021 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom @@ -198,6 +198,25 @@ struct CTPolicy { @@ -39,7 +39,7 @@ index 6ec25efe5bb2819df27d0ba8fc0646f2b80668a8..06ec91de21cb51e0fba363fd54e7bb3a interface CertVerifierClient { Verify( int32 default_error, -@@ -645,6 +664,8 @@ struct URLLoaderFactoryParams { +@@ -627,6 +646,8 @@ struct URLLoaderFactoryParams { // impact because of the extra process hops, so use should be minimized. pending_remote? header_client; @@ -49,10 +49,10 @@ index 6ec25efe5bb2819df27d0ba8fc0646f2b80668a8..06ec91de21cb51e0fba363fd54e7bb3a // the per-context allow patterns that is managed via NetworkContext // interface. This still respects the per-context block lists. diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc -index 39c382067febf8c317ceca3569555b12cb060f18..8ea8397c55882827f6ff3e9807dc13c6df5301d3 100644 +index 5d984482a2e5e18216bfc2229a18a513558dbcf4..1662f0878df16639ad585694be428058ab5a6c92 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc -@@ -436,6 +436,7 @@ URLLoader::URLLoader( +@@ -437,6 +437,7 @@ URLLoader::URLLoader( base::WeakPtr keepalive_statistics_recorder, base::WeakPtr network_usage_accumulator, mojom::TrustedURLLoaderHeaderClient* url_loader_header_client, @@ -60,7 +60,7 @@ index 39c382067febf8c317ceca3569555b12cb060f18..8ea8397c55882827f6ff3e9807dc13c6 mojom::OriginPolicyManager* origin_policy_manager, std::unique_ptr trust_token_helper_factory, mojo::PendingRemote cookie_observer) -@@ -495,6 +496,11 @@ URLLoader::URLLoader( +@@ -496,6 +497,11 @@ URLLoader::URLLoader( header_client_.set_disconnect_handler( base::BindOnce(&URLLoader::OnMojoDisconnect, base::Unretained(this))); } @@ -72,7 +72,7 @@ index 39c382067febf8c317ceca3569555b12cb060f18..8ea8397c55882827f6ff3e9807dc13c6 if (want_raw_headers_) { options_ |= mojom::kURLLoadOptionSendSSLInfoWithResponse | mojom::kURLLoadOptionSendSSLInfoForCertificateError; -@@ -990,7 +996,7 @@ void URLLoader::OnReceivedRedirect(net::URLRequest* url_request, +@@ -994,7 +1000,7 @@ void URLLoader::OnReceivedRedirect(net::URLRequest* url_request, void URLLoader::OnAuthRequired(net::URLRequest* url_request, const net::AuthChallengeInfo& auth_info) { @@ -81,7 +81,7 @@ index 39c382067febf8c317ceca3569555b12cb060f18..8ea8397c55882827f6ff3e9807dc13c6 OnAuthCredentials(base::nullopt); return; } -@@ -1006,11 +1012,20 @@ void URLLoader::OnAuthRequired(net::URLRequest* url_request, +@@ -1010,11 +1016,20 @@ void URLLoader::OnAuthRequired(net::URLRequest* url_request, if (url_request->response_headers()) head->headers = url_request->response_headers(); head->auth_challenge_info = auth_info; @@ -108,7 +108,7 @@ index 39c382067febf8c317ceca3569555b12cb060f18..8ea8397c55882827f6ff3e9807dc13c6 auth_challenge_responder_receiver_.set_disconnect_handler( base::BindOnce(&URLLoader::DeleteSelf, base::Unretained(this))); diff --git a/services/network/url_loader.h b/services/network/url_loader.h -index c8c09642661ca9a3c42e2c928bfd221b40830744..b202db0ccf6d40c534aa8d320291e8a85653a2ce 100644 +index 077344d12f001b00590598bccbba2d614c8c1af2..d9c8a41c9c4fe11277392dd428c71f022f22063b 100644 --- a/services/network/url_loader.h +++ b/services/network/url_loader.h @@ -115,6 +115,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) URLLoader @@ -119,7 +119,7 @@ index c8c09642661ca9a3c42e2c928bfd221b40830744..b202db0ccf6d40c534aa8d320291e8a8 mojom::OriginPolicyManager* origin_policy_manager, std::unique_ptr trust_token_helper_factory, -@@ -453,6 +454,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) URLLoader +@@ -454,6 +455,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) URLLoader base::Optional fetch_window_id_; mojo::Remote header_client_; diff --git a/patches/chromium/blink_local_frame.patch b/patches/chromium/blink_local_frame.patch index e83a5e14e75d..86323d2dda1b 100644 --- a/patches/chromium/blink_local_frame.patch +++ b/patches/chromium/blink_local_frame.patch @@ -14,10 +14,10 @@ when there is code doing that. This patch reverts the change to fix the crash in Electron. diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc -index edaeb74fd7c8cd93fd72dd547bf028415ca891f4..d7be295d1113bf2376c8353fa767578d49cd8cde 100644 +index c04ca5b367d6a5b0de3adb9e63d2b79ecee1c83d..10d113e0d15a6379d31f2d44df7bc42b339e963e 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -528,10 +528,6 @@ void LocalFrame::DetachImpl(FrameDetachType type) { +@@ -533,10 +533,6 @@ void LocalFrame::DetachImpl(FrameDetachType type) { } CHECK(!view_ || !view_->IsAttached()); @@ -28,7 +28,7 @@ index edaeb74fd7c8cd93fd72dd547bf028415ca891f4..d7be295d1113bf2376c8353fa767578d if (!Client()) return; -@@ -549,6 +545,10 @@ void LocalFrame::DetachImpl(FrameDetachType type) { +@@ -554,6 +550,10 @@ void LocalFrame::DetachImpl(FrameDetachType type) { // Notify ScriptController that the frame is closing, since its cleanup ends // up calling back to LocalFrameClient via WindowProxy. GetScriptController().ClearForClose(); diff --git a/patches/chromium/blink_world_context.patch b/patches/chromium/blink_world_context.patch index 578d7cdf8160..5ea0221c1e2f 100644 --- a/patches/chromium/blink_world_context.patch +++ b/patches/chromium/blink_world_context.patch @@ -7,24 +7,23 @@ This exposes a method for obtaining a reference to an isolated world, which is otherwise not available in the Blink API. diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h -index 63d2e8e3489d58f8163ae551ebda6bc718367c5c..628bb9667a6fc4830dfbb6711f59b83bff364bec 100644 +index 282839542f03317b919a300aa5b00efbc1045ede..3b22d8712a0437a760d6b0d822f97b01a3a08d22 100644 --- a/third_party/blink/public/web/web_local_frame.h +++ b/third_party/blink/public/web/web_local_frame.h -@@ -337,6 +337,9 @@ class WebLocalFrame : public WebFrame { - // be calling this API. - virtual v8::Local MainWorldScriptContext() const = 0; - +@@ -341,6 +341,8 @@ class WebLocalFrame : public WebFrame { + // Returns the world ID associated with |script_context|. + virtual int32_t GetScriptContextWorldId( + v8::Local script_context) const = 0; + virtual v8::Local WorldScriptContext( + v8::Isolate* isolate, int world_id) const = 0; -+ + // Executes script in the context of the current page and returns the value // that the script evaluated to with callback. Script execution can be - // suspend. diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc -index 8ec99c1f8a5f3327b04ac1682861adc0c325a554..da8858ade5c52301393db79a4b19796aded032f3 100644 +index 73aa50d81c4acf066e31b44614f7bdb375e9a159..37bc11b20b4b0944ac75dc96109980c8cfc13b0b 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc -@@ -945,6 +945,13 @@ v8::Local WebLocalFrameImpl::GlobalProxy() const { +@@ -952,6 +952,13 @@ v8::Local WebLocalFrameImpl::GlobalProxy() const { return MainWorldScriptContext()->Global(); } @@ -39,13 +38,13 @@ index 8ec99c1f8a5f3327b04ac1682861adc0c325a554..da8858ade5c52301393db79a4b19796a return BindingSecurity::ShouldAllowAccessToFrame( CurrentDOMWindow(V8PerIsolateData::MainThreadIsolate()), diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h -index 9997c78cd84282c4bf4ddb3235b2195f4eda1cb4..1e52665009df85961c5685fc62bced18c06ce927 100644 +index 44f6172f65c45e46bd686d2135d09e3dc6844976..5f6a6bc7aad3acb5eb2640aabf029001fbeea267 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h -@@ -159,6 +159,8 @@ class CORE_EXPORT WebLocalFrameImpl final - int argc, - v8::Local argv[]) override; +@@ -161,6 +161,8 @@ class CORE_EXPORT WebLocalFrameImpl final v8::Local MainWorldScriptContext() const override; + int32_t GetScriptContextWorldId( + v8::Local script_context) const override; + v8::Local WorldScriptContext( + v8::Isolate* isolate, int world_id) const override; void RequestExecuteScriptAndReturnValue(const WebScriptSource&, diff --git a/patches/chromium/build_add_electron_tracing_category.patch b/patches/chromium/build_add_electron_tracing_category.patch index fb3b20522956..582255cc43d4 100644 --- a/patches/chromium/build_add_electron_tracing_category.patch +++ b/patches/chromium/build_add_electron_tracing_category.patch @@ -8,7 +8,7 @@ categories in use are known / declared. This patch is required for us to introduce a new Electron category for Electron-specific tracing. diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h -index d02299e1fa84ee99930a4079e1494672be1d8a60..4b3ceec51304913f3ee9172a2c533f159ed81bd5 100644 +index 8f6f08406e743cfabd653c7f9e4bf32802e0cf65..5dfd3cc573d6c56c53f608c4258d7f0abc9f639a 100644 --- a/base/trace_event/builtin_categories.h +++ b/base/trace_event/builtin_categories.h @@ -73,6 +73,7 @@ diff --git a/patches/chromium/build_gn.patch b/patches/chromium/build_gn.patch index 84bd62388ab2..645d0ff8ce63 100644 --- a/patches/chromium/build_gn.patch +++ b/patches/chromium/build_gn.patch @@ -14,7 +14,7 @@ tradeoff is that switching from MAS_BUILD to !MAS_BUILD or vice-versa will rebuild the entire tree. diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn -index 6f5d5f123f89c5ef4dd601eddb6025bd4dc3b9ab..b39aa4b3181489e5ea270c6cd3f30adfbb9847a0 100644 +index 33416d571f2d2a672daf62be21bfb97dfc998b51..a1f21871c1806857723d3a421e5ef3917d7f1ef0 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -123,6 +123,9 @@ if (current_os == "") { diff --git a/patches/chromium/can_create_window.patch b/patches/chromium/can_create_window.patch index 6506a08af59f..3c2b1c6b2073 100644 --- a/patches/chromium/can_create_window.patch +++ b/patches/chromium/can_create_window.patch @@ -9,10 +9,10 @@ potentially prevent a window from being created. TODO(loc): this patch is currently broken. diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc -index fd47808a5a1e51dcca00ac7daff7107e3dfa17e4..f30eeb4f36c86431df1c965273eb188490db4ac0 100644 +index 21ff33131e62938ab04399a70d392ccbe5282034..79abda0cc919e3a79b49ebd417bf86368934bbd1 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc -@@ -4654,6 +4654,7 @@ void RenderFrameHostImpl::CreateNewWindow( +@@ -4691,6 +4691,7 @@ void RenderFrameHostImpl::CreateNewWindow( last_committed_origin_, params->window_container_type, params->target_url, params->referrer.To(), params->frame_name, params->disposition, *params->features, @@ -21,10 +21,10 @@ index fd47808a5a1e51dcca00ac7daff7107e3dfa17e4..f30eeb4f36c86431df1c965273eb1884 &no_javascript_access); diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index a9c62d7efd00fea602cced369f64fb81c068b8cc..c017455770707877008e2df07e65c391068bdb8c 100644 +index d2b8edd094a8585fe14e144e881feafd0917199a..e282718ec461f6c7bcb1fe36d5bb73359f04a30a 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -2955,9 +2955,9 @@ RenderFrameHostDelegate* WebContentsImpl::CreateNewWindow( +@@ -2969,9 +2969,9 @@ RenderFrameHostDelegate* WebContentsImpl::CreateNewWindow( } if (delegate_) { @@ -38,10 +38,10 @@ index a9c62d7efd00fea602cced369f64fb81c068b8cc..c017455770707877008e2df07e65c391 for (auto& observer : observers_) { diff --git a/content/common/frame.mojom b/content/common/frame.mojom -index b6113c360f9e033440c3043a128531704778fe9c..9732b9ad4562b503041e19f2763d697e6c191e1c 100644 +index 21811c17c9ffc37ccae543a7f5d2181987e144ab..697acddd922caa5f5df27219b0e109a1c72b6b2b 100644 --- a/content/common/frame.mojom +++ b/content/common/frame.mojom -@@ -302,6 +302,10 @@ struct CreateNewWindowParams { +@@ -256,6 +256,10 @@ struct CreateNewWindowParams { // The window features to use for the new window. blink.mojom.WindowFeatures features; @@ -53,10 +53,10 @@ index b6113c360f9e033440c3043a128531704778fe9c..9732b9ad4562b503041e19f2763d697e // Operation result when the renderer asks the browser to create a new window. diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc -index ba197ce381396608ab8603d27752b1bfe30e8e84..3c743a74321d54e36248d7b6201d9fdf5b749af6 100644 +index 8cfe2bfebd69be8aa4ed4fd1a8b846e7237be68f..8f36f7277a59d297a0700d1dfd5d8120f6a0ffa1 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc -@@ -524,6 +524,8 @@ bool ContentBrowserClient::CanCreateWindow( +@@ -530,6 +530,8 @@ bool ContentBrowserClient::CanCreateWindow( const std::string& frame_name, WindowOpenDisposition disposition, const blink::mojom::WindowFeatures& features, @@ -66,7 +66,7 @@ index ba197ce381396608ab8603d27752b1bfe30e8e84..3c743a74321d54e36248d7b6201d9fdf bool opener_suppressed, bool* no_javascript_access) { diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h -index d6c203ab546dde5106383c4d357d52c88965c467..491d6e7260dd329f312916c2f4aaba0aa177cc6a 100644 +index 21c7cfe08903cf92948af5fe069d7b25035c23fe..463fcc56d05a2e18c1d3752b5e7e275c8797eca8 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h @@ -146,6 +146,7 @@ class NetworkService; @@ -77,7 +77,7 @@ index d6c203ab546dde5106383c4d357d52c88965c467..491d6e7260dd329f312916c2f4aaba0a } // namespace network namespace rappor { -@@ -845,6 +846,8 @@ class CONTENT_EXPORT ContentBrowserClient { +@@ -851,6 +852,8 @@ class CONTENT_EXPORT ContentBrowserClient { const std::string& frame_name, WindowOpenDisposition disposition, const blink::mojom::WindowFeatures& features, @@ -109,7 +109,7 @@ index 6017278cc0fa8d029477e7ef46a9c0cacae438be..18161c8f836134e470333381a16425e3 const OpenURLParams& params) { return nullptr; diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h -index 7757c7720406aa9915a2a413b939be968c3cd988..7b329848850638941a7d8564dfe3786ae6f489ff 100644 +index 3844c78d8e56c43e08786af3128a1bcda3fc5839..089291f17512d24697ace85c93d1b3d4e024edf2 100644 --- a/content/public/browser/web_contents_delegate.h +++ b/content/public/browser/web_contents_delegate.h @@ -16,6 +16,7 @@ @@ -135,7 +135,7 @@ index 7757c7720406aa9915a2a413b939be968c3cd988..7b329848850638941a7d8564dfe3786a // typically happens when popups are created. virtual void WebContentsCreated(WebContents* source_contents, diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc -index 20ec8fc88cba99266ca9cf5f22f2565a762a97b3..00333d9aa46d643bf65db07cfac7a3a8959a14a3 100644 +index 0d7c504ce1fb7cbd72e7b176f6d88d1734034cc0..80278388015825fee05771aff7af3376d327058a 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -68,6 +68,7 @@ @@ -146,7 +146,7 @@ index 20ec8fc88cba99266ca9cf5f22f2565a762a97b3..00333d9aa46d643bf65db07cfac7a3a8 #include "content/renderer/media/audio/audio_device_factory.h" #include "content/renderer/render_frame_impl.h" #include "content/renderer/render_frame_proxy.h" -@@ -1250,6 +1251,10 @@ WebView* RenderViewImpl::CreateView( +@@ -1245,6 +1246,10 @@ WebView* RenderViewImpl::CreateView( } params->features = ConvertWebWindowFeaturesToMojoWindowFeatures(features); @@ -158,10 +158,10 @@ index 20ec8fc88cba99266ca9cf5f22f2565a762a97b3..00333d9aa46d643bf65db07cfac7a3a8 // moved on send. bool is_background_tab = diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc -index f963cc714c49c90b66195e84b4fdda9b1f38ad28..c6e10685403a1f6dd3f326b001d9ee5e2e351e67 100644 +index c69a7f463fbf629320c88f65a9c0f6ce9c3bf0db..6d7f47624414c4e9e77680e415facd8f3e2130ee 100644 --- a/content/shell/browser/web_test/web_test_content_browser_client.cc +++ b/content/shell/browser/web_test/web_test_content_browser_client.cc -@@ -401,6 +401,8 @@ bool WebTestContentBrowserClient::CanCreateWindow( +@@ -400,6 +400,8 @@ bool WebTestContentBrowserClient::CanCreateWindow( const std::string& frame_name, WindowOpenDisposition disposition, const blink::mojom::WindowFeatures& features, @@ -206,10 +206,10 @@ index 4f735ad0d97eaac9a57dad137e479f8a7ec33a36..0a3c5821962c85609b64b3625fa6b8d6 } // namespace blink diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc -index 1d5c3315671f0c414572ee0610fe6ac399b6e1e8..ee2c97cd344ea5f6e3aadd34304d290dbf5d2587 100644 +index 5137d99c8e94b8f2dfb903b3de87d2dfcfd14380..5859fa66f7878b77ccea0c41f22845f617123684 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc -@@ -1874,6 +1874,7 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate, +@@ -1837,6 +1837,7 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate, } WebWindowFeatures window_features = GetWindowFeaturesFromString(features); diff --git a/patches/chromium/chore_use_electron_resources_not_chrome_for_spellchecker.patch b/patches/chromium/chore_use_electron_resources_not_chrome_for_spellchecker.patch index fa8f3609abf9..c0416ef10b61 100644 --- a/patches/chromium/chore_use_electron_resources_not_chrome_for_spellchecker.patch +++ b/patches/chromium/chore_use_electron_resources_not_chrome_for_spellchecker.patch @@ -7,10 +7,10 @@ spellchecker uses a few IDS_ resources. We need to load these from Electrons grit header instead of Chromes diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index c404e7a7171288e9f169fe2c80a35c53b7f27949..f846309e2139507cba9ba927d4eb401e4b2e2ec1 100644 +index c2b29ac310b445a9544bc7d81d3e54003f327c90..8740a49e0c3cf822da7cda504052ee7b93826bb8 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -5388,6 +5388,7 @@ static_library("browser") { +@@ -5403,6 +5403,7 @@ static_library("browser") { deps += [ "//components/spellcheck/browser", "//components/spellcheck/common", diff --git a/patches/chromium/content_browser_main_loop.patch b/patches/chromium/content_browser_main_loop.patch index 9f13928f486c..b9b48046af64 100644 --- a/patches/chromium/content_browser_main_loop.patch +++ b/patches/chromium/content_browser_main_loop.patch @@ -8,10 +8,10 @@ run before shutdown. This is required to cleanup WebContents asynchronously in atom::CommonWebContentsDelegate::ResetManageWebContents. diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc -index d014ef7e1d8d10d049efb4687dac55191355a5d8..51b0ed369be74cec504abf6e933917fdf7a62aad 100644 +index d01f1fcfd6259c82b0fab35345b05b771c6a933b..554170ffdb2f9f852ade0be8173a2c306840401d 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc -@@ -1488,7 +1488,7 @@ void BrowserMainLoop::MainMessageLoopRun() { +@@ -1482,7 +1482,7 @@ void BrowserMainLoop::MainMessageLoopRun() { NOTREACHED(); #else base::RunLoop run_loop; diff --git a/patches/chromium/dcheck.patch b/patches/chromium/dcheck.patch index cdcd95493f99..71c6bd451fe1 100644 --- a/patches/chromium/dcheck.patch +++ b/patches/chromium/dcheck.patch @@ -17,10 +17,10 @@ only one or two specific checks fail. Then it's better to simply comment out the failing checks and allow the rest of the target to have them enabled. diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc -index ddb106d49ab6c175ada8bbc20bee1a00df236c73..aea2b686251738d686f249cd760ca40822b70cb4 100644 +index 86a9e8c358ca6c70b07e17cf8dbcdb013472a3be..633f93d28840c350e8cda3dde96b98ac019bc9e7 100644 --- a/content/browser/frame_host/navigation_controller_impl.cc +++ b/content/browser/frame_host/navigation_controller_impl.cc -@@ -1289,8 +1289,10 @@ NavigationType NavigationControllerImpl::ClassifyNavigation( +@@ -1253,8 +1253,10 @@ NavigationType NavigationControllerImpl::ClassifyNavigation( return NAVIGATION_TYPE_NEW_SUBFRAME; } @@ -33,7 +33,7 @@ index ddb106d49ab6c175ada8bbc20bee1a00df236c73..aea2b686251738d686f249cd760ca408 if (rfh->GetParent()) { // All manual subframes would be did_create_new_entry and handled above, so -@@ -1545,7 +1547,10 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage( +@@ -1510,7 +1512,10 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage( new_entry->GetFavicon() = GetLastCommittedEntry()->GetFavicon(); } diff --git a/patches/chromium/delay_lock_the_protocol_scheme_registry.patch b/patches/chromium/delay_lock_the_protocol_scheme_registry.patch index 2b379107b0bc..8e6c50756b74 100644 --- a/patches/chromium/delay_lock_the_protocol_scheme_registry.patch +++ b/patches/chromium/delay_lock_the_protocol_scheme_registry.patch @@ -19,10 +19,10 @@ https://chromium-review.googlesource.com/c/chromium/src/+/1901591, we should try re-submitting the patch. diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc -index 474f742a909b0a425c6b1f3e93da211b4bcee919..16b9f816d56dbb6b6943cca6d6b3610afa322f4e 100644 +index 0d752de291c071e9a6054d7ced3ac1930fa38471..05e1e711e1a4abc1aab79fdbb4cda63cbf282e94 100644 --- a/content/app/content_main_runner_impl.cc +++ b/content/app/content_main_runner_impl.cc -@@ -634,7 +634,7 @@ int ContentMainRunnerImpl::Initialize(const ContentMainParams& params) { +@@ -656,7 +656,7 @@ int ContentMainRunnerImpl::Initialize(const ContentMainParams& params) { } #endif diff --git a/patches/chromium/desktop_media_list.patch b/patches/chromium/desktop_media_list.patch index 4789095565fc..cb55a4637296 100644 --- a/patches/chromium/desktop_media_list.patch +++ b/patches/chromium/desktop_media_list.patch @@ -29,10 +29,10 @@ index a489bf6ea2179059f53e53563e993db9c7cd123b..93e237569fe94ec8526f67d915e1a735 virtual content::DesktopMediaID::Type GetMediaListType() const = 0; }; diff --git a/chrome/browser/media/webrtc/desktop_media_list_base.cc b/chrome/browser/media/webrtc/desktop_media_list_base.cc -index ba64a40697c7bb91d6e944ad9ea8fa50dd970633..d2600791197082c8c2e179ee4df66965234c4542 100644 +index 147d5be9f7f56fb71468b56e86eb33b59d51cd66..5930fe95e33a9e5a3108c31e8c34daa9c724511c 100644 --- a/chrome/browser/media/webrtc/desktop_media_list_base.cc +++ b/chrome/browser/media/webrtc/desktop_media_list_base.cc -@@ -22,6 +22,11 @@ DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period) +@@ -20,6 +20,11 @@ DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period) DesktopMediaListBase::~DesktopMediaListBase() {} @@ -44,7 +44,7 @@ index ba64a40697c7bb91d6e944ad9ea8fa50dd970633..d2600791197082c8c2e179ee4df66965 void DesktopMediaListBase::SetUpdatePeriod(base::TimeDelta period) { DCHECK(!observer_); update_period_ = period; -@@ -56,7 +61,7 @@ void DesktopMediaListBase::Update(UpdateCallback callback) { +@@ -54,7 +59,7 @@ void DesktopMediaListBase::Update(UpdateCallback callback) { DCHECK(sources_.empty()); DCHECK(!refresh_callback_); refresh_callback_ = std::move(callback); @@ -53,7 +53,7 @@ index ba64a40697c7bb91d6e944ad9ea8fa50dd970633..d2600791197082c8c2e179ee4df66965 } int DesktopMediaListBase::GetSourceCount() const { -@@ -70,6 +75,11 @@ const DesktopMediaList::Source& DesktopMediaListBase::GetSource( +@@ -68,6 +73,11 @@ const DesktopMediaList::Source& DesktopMediaListBase::GetSource( return sources_[index]; } @@ -65,7 +65,7 @@ index ba64a40697c7bb91d6e944ad9ea8fa50dd970633..d2600791197082c8c2e179ee4df66965 DesktopMediaID::Type DesktopMediaListBase::GetMediaListType() const { return type_; } -@@ -81,6 +91,12 @@ DesktopMediaListBase::SourceDescription::SourceDescription( +@@ -79,6 +89,12 @@ DesktopMediaListBase::SourceDescription::SourceDescription( void DesktopMediaListBase::UpdateSourcesList( const std::vector& new_sources) { @@ -111,16 +111,15 @@ index ad7f766a36b1b6b2a8bc0f96369f1aaadf6681f7..f6c6c14a0937430df62c9b9c1132c591 protected: virtual ~DesktopMediaListObserver() {} diff --git a/chrome/browser/media/webrtc/native_desktop_media_list.cc b/chrome/browser/media/webrtc/native_desktop_media_list.cc -index c81645e60a2a31429051fdfbf29666a09fa19c61..b3a6ed705f2f8bbbe74ec7e84ab07dc64f231dfd 100644 +index 622d9a22c8e53ba13f00c078a8240c0449c0900a..a190f487c7c388631e83bb951420d699b913bdea 100644 --- a/chrome/browser/media/webrtc/native_desktop_media_list.cc +++ b/chrome/browser/media/webrtc/native_desktop_media_list.cc -@@ -10,14 +10,15 @@ +@@ -10,13 +10,14 @@ #include "base/hash/hash.h" #include "base/message_loop/message_pump_type.h" #include "base/single_thread_task_runner.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" - #include "base/task/post_task.h" #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "chrome/browser/media/webrtc/desktop_media_list.h" @@ -131,8 +130,8 @@ index c81645e60a2a31429051fdfbf29666a09fa19c61..b3a6ed705f2f8bbbe74ec7e84ab07dc6 #include "media/base/video_util.h" #include "third_party/libyuv/include/libyuv/scale_argb.h" #include "third_party/skia/include/core/SkBitmap.h" -@@ -223,6 +224,8 @@ void NativeDesktopMediaList::Worker::RefreshThumbnails( - FROM_HERE, {BrowserThread::UI}, +@@ -221,6 +222,8 @@ void NativeDesktopMediaList::Worker::RefreshThumbnails( + FROM_HERE, base::BindOnce(&NativeDesktopMediaList::UpdateNativeThumbnailsFinished, media_list_)); + diff --git a/patches/chromium/disable_color_correct_rendering.patch b/patches/chromium/disable_color_correct_rendering.patch index a7dab4f37c57..3b66a6f4aa35 100644 --- a/patches/chromium/disable_color_correct_rendering.patch +++ b/patches/chromium/disable_color_correct_rendering.patch @@ -204,10 +204,10 @@ index 1efef99651721d7cdb159ef9fe1aea6c5fb299f0..efcdc1dbe7207f66862a7ab93f0f226c + +#undef PATCH_CS diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc -index ae8f3b65971935237d98893fcd266ce7d32a625b..75ee5e40bbef5448c7e33457ebc0f3d04698d379 100644 +index 2ed4bf758cdc24de04b1cd37d5b0c0c195e5561d..f87824a4d6cf0f724f4b86c66f9d2a1c7f60b7ca 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc -@@ -210,6 +210,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus( +@@ -209,6 +209,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus( // Command-line switches to propagate to the GPU process. static const char* const kSwitchNames[] = { @@ -216,10 +216,10 @@ index ae8f3b65971935237d98893fcd266ce7d32a625b..75ee5e40bbef5448c7e33457ebc0f3d0 service_manager::switches::kGpuSandboxAllowSysVShm, service_manager::switches::kGpuSandboxFailuresFatal, diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 11b18f08dbaba89a483908faef465adfb6bd4019..02b0fa9444c07396aee177b9a5d5bc1c6da5e081 100644 +index 0e84525e677131b3428e5fe73dfb7b48bf65a692..c473f13efc218c98942166715504006d56f9a862 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -230,6 +230,7 @@ +@@ -226,6 +226,7 @@ #include "ui/accessibility/accessibility_switches.h" #include "ui/base/ui_base_switches.h" #include "ui/display/display_switches.h" @@ -227,7 +227,7 @@ index 11b18f08dbaba89a483908faef465adfb6bd4019..02b0fa9444c07396aee177b9a5d5bc1c #include "ui/gl/gl_switches.h" #include "ui/native_theme/native_theme_features.h" #include "url/origin.h" -@@ -3252,6 +3253,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3246,6 +3247,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( // Propagate the following switches to the renderer command line (along // with any associated values) if present in the browser command line. static const char* const kSwitchNames[] = { @@ -236,7 +236,7 @@ index 11b18f08dbaba89a483908faef465adfb6bd4019..02b0fa9444c07396aee177b9a5d5bc1c service_manager::switches::kDisableInProcessStackTraces, service_manager::switches::kDisableSeccompFilterSandbox, diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc -index 56397e6a28846508730dfcfe6f0009f944ffd18d..9e8b76407029b3b768c94a16622bcf7df8bd50e2 100644 +index 85dae05a77b3189dac8d506705555dd96eea07a7..523a971c8e2c7a52eb8b7857cc8aa17e5bb9bf85 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -2548,6 +2548,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings( @@ -250,7 +250,7 @@ index 56397e6a28846508730dfcfe6f0009f944ffd18d..9e8b76407029b3b768c94a16622bcf7d // is what the renderer uses if its not threaded. settings.enable_checker_imaging = diff --git a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc -index 570ac93ad8cffda1bf6a8a9847a8052c2daa0d1e..b9ff54463e950c39f282794191e55a721bc7a25a 100644 +index 6bf7541499dd849439f191cfddae92dded99ef85..a023ddd9f8311bff998bb6655445bb44baa96cfc 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc @@ -4,6 +4,7 @@ diff --git a/patches/chromium/disable_hidden.patch b/patches/chromium/disable_hidden.patch index eb07f3165c6b..df60225cce6d 100644 --- a/patches/chromium/disable_hidden.patch +++ b/patches/chromium/disable_hidden.patch @@ -6,10 +6,10 @@ Subject: disable_hidden.patch Electron uses this to disable background throttling for hidden windows. diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc -index 073eeea86fd18d19320b13b701012cc3518bd4b4..77526d78e8113f7071fe269cbcdf63bb772db6e4 100644 +index a60ee2a3568046caa1a35ad0430d3c244c6e49a3..e660c0e072a6fa855102ec7e4d8a883a923e46ae 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc -@@ -646,6 +646,9 @@ void RenderWidgetHostImpl::WasHidden() { +@@ -645,6 +645,9 @@ void RenderWidgetHostImpl::WasHidden() { if (is_hidden_) return; @@ -20,10 +20,10 @@ index 073eeea86fd18d19320b13b701012cc3518bd4b4..77526d78e8113f7071fe269cbcdf63bb blink::mojom::PointerLockResult::kWrongDocument); diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h -index 16d5f4083e5674a561c9e4b0fedd23dd2876c8d0..eed9bac1384df3f1248dd49d092ace3765a6691e 100644 +index 34be0a2ee98bcfc46acc9a9c7202451c72ea9631..294964841b1d3be15ca87c74da27fa4cdc0a8da3 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h -@@ -180,6 +180,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl +@@ -181,6 +181,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl // RenderWidgetHostImpl. static RenderWidgetHostImpl* From(RenderWidgetHost* rwh); @@ -34,7 +34,7 @@ index 16d5f4083e5674a561c9e4b0fedd23dd2876c8d0..eed9bac1384df3f1248dd49d092ace37 const base::TimeDelta& delay) { new_content_rendering_delay_ = delay; diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc -index 45ac5ece9e975b8213845d80a9a309a17eb1de03..e0157ea857cd4cb8984e983e8631f95db90f2fc2 100644 +index 4802fcfbccc628d186c30f9941e5a6a7eeea06a0..099ac6cccd9d7b46d41c3356423f82d863fcca66 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -641,7 +641,7 @@ void RenderWidgetHostViewAura::HideImpl() { diff --git a/patches/chromium/expose_setuseragent_on_networkcontext.patch b/patches/chromium/expose_setuseragent_on_networkcontext.patch index 04af2da9cb4d..1d7b3ee6de94 100644 --- a/patches/chromium/expose_setuseragent_on_networkcontext.patch +++ b/patches/chromium/expose_setuseragent_on_networkcontext.patch @@ -33,10 +33,10 @@ index 0ccfe130f00ec3b6c75cd8ee04d5a2777e1fd00c..653829457d58bf92057cc36aa8a28970 DISALLOW_COPY_AND_ASSIGN(StaticHttpUserAgentSettings); }; diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index e62538f061cccddea14759ea5d92f14b539992fc..6e896ac16194b2a031d012a9ccd5b2726338800d 100644 +index 5f2feba6f09327088badc56d76872d2c3920866f..803315067b4ceccd3ceb3c97ea186b5de7f64f1f 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -1013,6 +1013,13 @@ void NetworkContext::SetNetworkConditions( +@@ -1009,6 +1009,13 @@ void NetworkContext::SetNetworkConditions( std::move(network_conditions)); } @@ -51,10 +51,10 @@ index e62538f061cccddea14759ea5d92f14b539992fc..6e896ac16194b2a031d012a9ccd5b272 // This may only be called on NetworkContexts created with the constructor // that calls MakeURLRequestContext(). diff --git a/services/network/network_context.h b/services/network/network_context.h -index 0b35920f4dbaf8fbaf8245c9ae976459c6baa7b8..ef5c5c05bb9b49b13a16421a8cc68fee46e187e8 100644 +index 0bc906026e988819f66554749c8d6aa2f2accc49..b76ab13a2c02b5d61ff931564af743260fbeeae8 100644 --- a/services/network/network_context.h +++ b/services/network/network_context.h -@@ -242,6 +242,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -235,6 +235,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext void CloseIdleConnections(CloseIdleConnectionsCallback callback) override; void SetNetworkConditions(const base::UnguessableToken& throttling_profile_id, mojom::NetworkConditionsPtr conditions) override; @@ -63,10 +63,10 @@ index 0b35920f4dbaf8fbaf8245c9ae976459c6baa7b8..ef5c5c05bb9b49b13a16421a8cc68fee void SetEnableReferrers(bool enable_referrers) override; #if defined(OS_CHROMEOS) diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom -index 2b2033797906f36fa829008c65e3b66b6e06eaa2..6ec25efe5bb2819df27d0ba8fc0646f2b80668a8 100644 +index 248108042a5be07a3ddf6a11880ddbf04470d673..2001e6202cf61d1c70bf81334b62d0502ea8c9ba 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1049,6 +1049,9 @@ interface NetworkContext { +@@ -1031,6 +1031,9 @@ interface NetworkContext { SetNetworkConditions(mojo_base.mojom.UnguessableToken throttling_profile_id, NetworkConditions? conditions); diff --git a/patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch b/patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch index e501a4cf4a3b..2fe2b2763a31 100644 --- a/patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch +++ b/patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch @@ -6,10 +6,10 @@ Subject: feat: allow disabling blink scheduler throttling per RenderView This allows us to disable throttling for hidden windows. diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc -index 8c6deced5a7a46623abfdba1d6e1ce5b85c4df33..24664f95f102029f16c084eb7e7574a527c0dbd7 100644 +index 938ff3a2c996a6eb22a1d5913941bf51d9ccebc0..df8c37c8aede6916ef8fb3e85f8c225146555c96 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc -@@ -490,6 +490,10 @@ void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) { +@@ -491,6 +491,10 @@ void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) { GetWidget()->GetAssociatedFrameWidget()->SetBackgroundOpaque(opaque); } @@ -21,10 +21,10 @@ index 8c6deced5a7a46623abfdba1d6e1ce5b85c4df33..24664f95f102029f16c084eb7e7574a5 return is_active(); } diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h -index 9d3783d1b990672c5754cdc482af280ec460cc85..ab7d088668f4346e9b76a438663d09108f20d60f 100644 +index dd5cf0829c91f1331ca07a3b799f8351947b05a2..ffb9b0c7e2842ad2d5939264e04e8970a12edf30 100644 --- a/content/browser/renderer_host/render_view_host_impl.h +++ b/content/browser/renderer_host/render_view_host_impl.h -@@ -110,6 +110,7 @@ class CONTENT_EXPORT RenderViewHostImpl +@@ -111,6 +111,7 @@ class CONTENT_EXPORT RenderViewHostImpl SiteInstanceImpl* GetSiteInstance() override; bool IsRenderViewLive() override; void NotifyMoveOrResizeStarted() override; @@ -47,7 +47,7 @@ index 85a8c7e9e283b20ad5ace2f8e02479d1ff212899..ccf8bb322ff8258a7006e4ecbee94bca IPC_MESSAGE_ROUTED1(ViewMsg_UpdateWebPreferences, content::WebPreferences) diff --git a/content/public/browser/render_view_host.h b/content/public/browser/render_view_host.h -index 893c45a5c71b4e55ea323ae60e11d12ddb099efd..db9a1ff0fe1a912db83692ab17c620cff7446bcb 100644 +index dfd856eb481114fea9da3e26b4080c9a8473acf6..604a95a0427705eca523e91b08a136f806da68f0 100644 --- a/content/public/browser/render_view_host.h +++ b/content/public/browser/render_view_host.h @@ -96,6 +96,9 @@ class CONTENT_EXPORT RenderViewHost : public IPC::Sender { @@ -61,10 +61,10 @@ index 893c45a5c71b4e55ea323ae60e11d12ddb099efd..db9a1ff0fe1a912db83692ab17c620cf // // Returns the current WebKit preferences. Note: WebPreferences is cached, so diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc -index 00333d9aa46d643bf65db07cfac7a3a8959a14a3..5a389d142d809ac8835c85a4d35fa1f7e1311e22 100644 +index 80278388015825fee05771aff7af3376d327058a..c681eb0fb52c0db810d1bb23f06929fd71873089 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc -@@ -1181,6 +1181,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { +@@ -1180,6 +1180,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) @@ -73,7 +73,7 @@ index 00333d9aa46d643bf65db07cfac7a3a8959a14a3..5a389d142d809ac8835c85a4d35fa1f7 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) -@@ -1685,6 +1687,12 @@ bool RenderViewImpl::GetContentStateImmediately() { +@@ -1680,6 +1682,12 @@ bool RenderViewImpl::GetContentStateImmediately() { return send_content_state_immediately_; } @@ -87,7 +87,7 @@ index 00333d9aa46d643bf65db07cfac7a3a8959a14a3..5a389d142d809ac8835c85a4d35fa1f7 webkit_preferences_ = prefs; ApplyWebPreferences(webkit_preferences_, GetWebView()); diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h -index 3ee43ead214b826d158026feac0aeb21767b2543..253bd39e0c5f5e10d04b614ca4a4b4b141d4b2ca 100644 +index dac8651a96409c60684a99a7cf4d735b40decc33..438d0f79767665cc851115970525909d623a582d 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -392,6 +392,7 @@ class CONTENT_EXPORT RenderViewImpl : public blink::WebViewClient, @@ -99,7 +99,7 @@ index 3ee43ead214b826d158026feac0aeb21767b2543..253bd39e0c5f5e10d04b614ca4a4b4b1 void OnUpdateTargetURLAck(); void OnUpdateWebPreferences(const WebPreferences& prefs); diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/web/web_view.h -index 2403a3d668c807a930e163a1282cb6463c14094c..a0eb764c56d5a0d4e7eb4a21a9d734ffd6ddedd0 100644 +index 53faedcea05f045e42b87bf13db5961964f9c298..851409ebf365e74e4b2c9de4a658f67f3062052a 100644 --- a/third_party/blink/public/web/web_view.h +++ b/third_party/blink/public/web/web_view.h @@ -380,6 +380,7 @@ class WebView { @@ -111,10 +111,10 @@ index 2403a3d668c807a930e163a1282cb6463c14094c..a0eb764c56d5a0d4e7eb4a21a9d734ff // Visibility ----------------------------------------------------------- diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc -index f593e3d5c95b5ea5fb6543500ad0d1902c349830..0acd8981a2d4da85eaa9bc13858fd0454681c248 100644 +index 78b796cc46c479525b1c99ee39ed9576efc17d5b..d1b65d3570d1ad218cc8447e0ab9422306d7f2f4 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc -@@ -3290,6 +3290,13 @@ PageScheduler* WebViewImpl::Scheduler() const { +@@ -3342,6 +3342,13 @@ PageScheduler* WebViewImpl::Scheduler() const { return GetPage()->GetPageScheduler(); } @@ -128,7 +128,7 @@ index f593e3d5c95b5ea5fb6543500ad0d1902c349830..0acd8981a2d4da85eaa9bc13858fd045 void WebViewImpl::SetVisibilityState( mojom::blink::PageVisibilityState visibility_state, bool is_initial_state) { -@@ -3300,7 +3307,8 @@ void WebViewImpl::SetVisibilityState( +@@ -3352,7 +3359,8 @@ void WebViewImpl::SetVisibilityState( } GetPage()->SetVisibilityState(visibility_state, is_initial_state); GetPage()->GetPageScheduler()->SetPageVisible( @@ -139,10 +139,10 @@ index f593e3d5c95b5ea5fb6543500ad0d1902c349830..0acd8981a2d4da85eaa9bc13858fd045 mojom::blink::PageVisibilityState WebViewImpl::GetVisibilityState() { diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h -index cce7153c37c33e4fe5ada710dcccc56471a10bca..35defe5d1eef12e66f050321dcf776c1853788b9 100644 +index 4ee975c80501c77e5bf7d599a69983a62a07989d..c5d174f045f8f9d6225aadc70dfe13ceca408dd4 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.h +++ b/third_party/blink/renderer/core/exported/web_view_impl.h -@@ -323,6 +323,7 @@ class CORE_EXPORT WebViewImpl final : public WebView, +@@ -325,6 +325,7 @@ class CORE_EXPORT WebViewImpl final : public WebView, LocalDOMWindow* PagePopupWindow() const; PageScheduler* Scheduler() const override; @@ -150,7 +150,7 @@ index cce7153c37c33e4fe5ada710dcccc56471a10bca..35defe5d1eef12e66f050321dcf776c1 void SetVisibilityState(mojom::blink::PageVisibilityState visibility_state, bool is_initial_state) override; mojom::blink::PageVisibilityState GetVisibilityState() override; -@@ -683,6 +684,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, +@@ -681,6 +682,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, // WebViewImpl::Close while handling an input event. bool debug_inside_input_handling_ = false; diff --git a/patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch b/patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch index 15473d5ee34b..fbd357a87c43 100644 --- a/patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch +++ b/patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch @@ -455,10 +455,10 @@ index 2bb30e5318b6b48c2e6d4b1f64a6a36c68f963d1..9e805f27a9d7d1c0aa68cdf9f48895c0 waiting_on_draw_ack_ = true; diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc -index ffb3a04236be821e7ba1c7370258eb0610497c8e..5fd16e51508dc3227798a7166226ff5d01dcd921 100644 +index 0e1b4bf9d45582dcfa8882b73e4cd239baa0b1f1..645b4359f49e931f769d6ea7e3be98e8a70dd3f0 100644 --- a/content/browser/compositor/viz_process_transport_factory.cc +++ b/content/browser/compositor/viz_process_transport_factory.cc -@@ -404,8 +404,13 @@ void VizProcessTransportFactory::OnEstablishedGpuChannel( +@@ -403,8 +403,13 @@ void VizProcessTransportFactory::OnEstablishedGpuChannel( compositor_data.display_private.reset(); root_params->display_private = compositor_data.display_private.BindNewEndpointAndPassReceiver(); @@ -527,7 +527,7 @@ index 6b7fbb6cf13dc8ee6ade0878a9a2c1efc5d4d3f1..e2af75168cb914a7b3b4a6c9b6a28549 + Draw(gfx.mojom.Rect damage_rect) => (); }; diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h -index 48cd5ff63d76899b24e460bc2b074fa6b2e38fd2..434be7569f45e21d2b3e95fc80a6b5bc1f4ce316 100644 +index e47736aae80be8433fdb5afd4678efde1a60e6d4..de0560a32863d2bd5089aadcfd74202a6fe2b560 100644 --- a/ui/compositor/compositor.h +++ b/ui/compositor/compositor.h @@ -74,6 +74,7 @@ class DisplayPrivate; @@ -564,7 +564,7 @@ index 48cd5ff63d76899b24e460bc2b074fa6b2e38fd2..434be7569f45e21d2b3e95fc80a6b5bc // Sets the root of the layer tree drawn by this Compositor. The root layer // must have no parent. The compositor's root layer is reset if the root layer // is destroyed. NULL can be passed to reset the root layer, in which case the -@@ -417,6 +430,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient, +@@ -419,6 +432,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient, std::unique_ptr pending_begin_frame_args_; diff --git a/patches/chromium/fix_account_for_print_preview_disabled_when_printing_to_pdf.patch b/patches/chromium/fix_account_for_print_preview_disabled_when_printing_to_pdf.patch index 96aadc8282ae..081b0055d1e0 100644 --- a/patches/chromium/fix_account_for_print_preview_disabled_when_printing_to_pdf.patch +++ b/patches/chromium/fix_account_for_print_preview_disabled_when_printing_to_pdf.patch @@ -10,10 +10,10 @@ understanding, it seems like we slightly misuse the print preview API and this is fallout from using it in a way the code doesn't expect. diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc -index 1db0c6cad6cc27b3a548b78d701d2ada7023dad1..3078f6c976086eeef6bc76efd490832c8798d6ce 100644 +index e566b1d22a5bb0aa40f15db83f1dc89e9099f62c..8e8663d561d3ee1956ba5e980c23172bf784d080 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc -@@ -1495,6 +1495,7 @@ PrintRenderFrameHelper::CreatePreviewDocument() { +@@ -1494,6 +1494,7 @@ PrintRenderFrameHelper::CreatePreviewDocument() { const std::vector& pages = print_pages_params_->pages; bool require_document_metafile = diff --git a/patches/chromium/fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch b/patches/chromium/fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch index 8984f1cd06d4..9aa2cb0a12ab 100644 --- a/patches/chromium/fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch +++ b/patches/chromium/fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch @@ -13,10 +13,10 @@ This patch can be removed once app.allowRendererProcessReuse is forced to true as then Chromiums assumptions around processes become correct. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index c017455770707877008e2df07e65c391068bdb8c..31b30a3f729258accab5a135eeddba7b79990e81 100644 +index e282718ec461f6c7bcb1fe36d5bb73359f04a30a..725e9f890bf5479d4435b9e7366b8fe2a10e0919 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -2368,11 +2368,13 @@ bool WebContentsImpl::HandleMouseEvent(const blink::WebMouseEvent& event) { +@@ -2385,11 +2385,13 @@ bool WebContentsImpl::HandleMouseEvent(const blink::WebMouseEvent& event) { WebContentsImpl* outermost = GetOutermostWebContents(); if (event.button == blink::WebPointerProperties::Button::kBack && outermost->controller_.CanGoBack()) { diff --git a/patches/chromium/fix_xserver_crash_when_using_xwindow_setxwindowicons.patch b/patches/chromium/fix_xserver_crash_when_using_xwindow_setxwindowicons.patch deleted file mode 100644 index acc18cacaeb1..000000000000 --- a/patches/chromium/fix_xserver_crash_when_using_xwindow_setxwindowicons.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: deepak1556 -Date: Fri, 22 May 2020 12:05:07 -0700 -Subject: Fix XServer crash when using XWindow::SetXWindowIcons - -This patch should be removed once https://bugs.chromium.org/p/chromium/issues/detail?id=1085836 -is addressed. - -diff --git a/ui/base/x/x11_window.cc b/ui/base/x/x11_window.cc -index 03282473ab22d2669d1b7ba9ada3ec483748dc57..b67f8104bd9f9b1dc517654f8658487c84d9a032 100644 ---- a/ui/base/x/x11_window.cc -+++ b/ui/base/x/x11_window.cc -@@ -64,17 +64,17 @@ gfx::Rect SanitizeBounds(const gfx::Rect& bounds) { - } - - void SerializeImageRepresentation(const gfx::ImageSkiaRep& rep, -- std::vector* data) { -- uint32_t width = rep.GetWidth(); -+ std::vector* data) { -+ int width = rep.GetWidth(); - data->push_back(width); - -- uint32_t height = rep.GetHeight(); -+ int height = rep.GetHeight(); - data->push_back(height); - - const SkBitmap& bitmap = rep.GetBitmap(); - -- for (uint32_t y = 0; y < height; ++y) -- for (uint32_t x = 0; x < width; ++x) -+ for (int y = 0; y < height; ++y) -+ for (int x = 0; x < width; ++x) - data->push_back(bitmap.getColor(x, y)); - } - -@@ -787,7 +787,7 @@ void XWindow::SetXWindowIcons(const gfx::ImageSkia& window_icon, - // so that we can pass to the WM. - // - // All of this could be made much, much better. -- std::vector data; -+ std::vector data; - - if (!window_icon.isNull()) - SerializeImageRepresentation(window_icon.GetRepresentation(1.0f), &data); -@@ -796,8 +796,16 @@ void XWindow::SetXWindowIcons(const gfx::ImageSkia& window_icon, - SerializeImageRepresentation(app_icon.GetRepresentation(1.0f), &data); - - if (!data.empty()) { -- ui::SetArrayProperty(xwindow_, gfx::GetAtom("_NET_WM_ICON"), -- x11::Atom::CARDINAL, data); -+ // XChangeProperty() expects values of type 32 to be longs. -+ std::unique_ptr value(new Atom[data.size()]); -+ for (size_t i = 0; i < data.size(); ++i) -+ value[i] = data[i]; -+ XChangeProperty( -+ gfx::GetXDisplay(), xwindow_, -+ XInternAtom(gfx::GetXDisplay(), "_NET_WM_ICON", x11::False), -+ XA_CARDINAL, 32, PropModeReplace, -+ reinterpret_cast(value.get()), -+ data.size()); - } - } - diff --git a/patches/chromium/frame_host_manager.patch b/patches/chromium/frame_host_manager.patch index f048036dc9a7..e4d5b9d1b165 100644 --- a/patches/chromium/frame_host_manager.patch +++ b/patches/chromium/frame_host_manager.patch @@ -42,10 +42,10 @@ index 06f0961e122f326e41610dd7a1b32fa752f0c68f..a041189f79cea5b59e1792b79c1348e3 // another SiteInstance for the same site. void RegisterSiteInstance(SiteInstanceImpl* site_instance); diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc -index f81f412ed1b8c238adb6d0635cd23b1e1da50090..d77d6ee893b2481b2748c7931189be8b18301174 100644 +index fa3ed4e33b4fbe274738442f22e07ba233056ce8..e8e4eb7963b443b95e98a173df497d1662f9226b 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc -@@ -1275,6 +1275,24 @@ void NavigationRequest::BeginNavigation() { +@@ -1278,6 +1278,24 @@ void NavigationRequest::BeginNavigation() { // it immediately. EnterChildTraceEvent("ResponseStarted", this); @@ -71,10 +71,10 @@ index f81f412ed1b8c238adb6d0635cd23b1e1da50090..d77d6ee893b2481b2748c7931189be8b render_frame_host_ = frame_tree_node_->render_manager()->GetFrameHostForNavigation(this); diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc -index 98475dc9b06182951a473c9d33fcbd23fe4892db..646cbacbdaaf33be896c9fee3259d0779f03c451 100644 +index 829a14c0cc306fa74c80b7c123ddaa309c0c18c9..49a47e1f8d1fc4161684a13b6fdaceb6762234ad 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc -@@ -2406,6 +2406,16 @@ bool RenderFrameHostManager::InitRenderView( +@@ -2464,6 +2464,16 @@ bool RenderFrameHostManager::InitRenderView( scoped_refptr RenderFrameHostManager::GetSiteInstanceForNavigationRequest( NavigationRequest* request) { @@ -91,7 +91,7 @@ index 98475dc9b06182951a473c9d33fcbd23fe4892db..646cbacbdaaf33be896c9fee3259d077 SiteInstance* current_site_instance = render_frame_host_->GetSiteInstance(); // All children of MHTML documents must be MHTML documents. They all live in -@@ -2425,10 +2435,60 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest( +@@ -2483,10 +2493,60 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest( // // TODO(clamy): We should also consider as a candidate SiteInstance the // speculative SiteInstance that was computed on redirects. @@ -156,7 +156,7 @@ index 98475dc9b06182951a473c9d33fcbd23fe4892db..646cbacbdaaf33be896c9fee3259d077 // Account for renderer-initiated reload as well. // Needed as a workaround for https://crbug.com/1045524, remove it when it is -@@ -2493,6 +2553,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest( +@@ -2551,6 +2611,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest( request->ResetStateForSiteInstanceChange(); } @@ -194,7 +194,7 @@ index 10dd6f03af22bd7d0f7b65a58d4a58430c129b49..88504adb27e6461648f7dce48c93e2e1 size_t GetRelatedActiveContentsCount() override; bool RequiresDedicatedProcess() override; diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc -index 3c743a74321d54e36248d7b6201d9fdf5b749af6..13418cab6cce233a14110eca7a887eb549cf438b 100644 +index 8f36f7277a59d297a0700d1dfd5d8120f6a0ffa1..4858b868972c02f580789a6e396fd5db52154bad 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc @@ -59,6 +59,21 @@ @@ -220,7 +220,7 @@ index 3c743a74321d54e36248d7b6201d9fdf5b749af6..13418cab6cce233a14110eca7a887eb5 const MainFunctionParams& parameters) { return nullptr; diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h -index 491d6e7260dd329f312916c2f4aaba0aa177cc6a..a9119a722935a8320e463e2e24cdd39b9e8b1773 100644 +index 463fcc56d05a2e18c1d3752b5e7e275c8797eca8..df1e5d1ed6e9e40ac14f1aef289801b6d63fa78d 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h @@ -236,8 +236,45 @@ class CONTENT_EXPORT ContentBrowserClient { diff --git a/patches/chromium/gpu_notify_when_dxdiag_request_fails.patch b/patches/chromium/gpu_notify_when_dxdiag_request_fails.patch index d9e316d7eeb2..261248e0036a 100644 --- a/patches/chromium/gpu_notify_when_dxdiag_request_fails.patch +++ b/patches/chromium/gpu_notify_when_dxdiag_request_fails.patch @@ -40,10 +40,10 @@ index ce8f9551f1b17c7508a0e0bd0ecc55eca2c0ac6e..2e71ce71ff9f18e2fc68f51ddbeedc39 // Update the GPU feature info. This updates the blacklist and enabled status // of GPU rasterization. In the future this will be used for more features. diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc -index e4ebd7fcd4a1b9045552e72fef23cd5cc7941b5b..8c52a512c272a19edb0076efe22473928ddc1522 100644 +index f65d5d0eb7d10ec6887fc156d23ab948e10c1bc3..0e34fb12f6e08039fb541890ee869c1ad1e08948 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.cc +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc -@@ -923,6 +923,10 @@ void GpuDataManagerImplPrivate::TerminateInfoCollectionGpuProcess() { +@@ -922,6 +922,10 @@ void GpuDataManagerImplPrivate::TerminateInfoCollectionGpuProcess() { host->ForceShutdown(); } diff --git a/patches/chromium/hack_plugin_response_interceptor_to_point_to_electron.patch b/patches/chromium/hack_plugin_response_interceptor_to_point_to_electron.patch index fb9172421727..e8d3cfa67bc1 100644 --- a/patches/chromium/hack_plugin_response_interceptor_to_point_to_electron.patch +++ b/patches/chromium/hack_plugin_response_interceptor_to_point_to_electron.patch @@ -8,13 +8,13 @@ require a largeish patch to get working, so just redirect it to our implementation instead. diff --git a/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc b/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc -index 6d6a5fa9530d2a7309c46385b853af42bd25569f..bbb7789cb89a23eea592179d23379cff2fedbefa 100644 +index a692d5e33cfdad762eb0c59c6e14fab2675c603b..121424e9523a7977be64cbcd5b99ccb2947dff7e 100644 --- a/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc +++ b/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc -@@ -10,8 +10,8 @@ +@@ -9,8 +9,8 @@ + #include "base/bind.h" #include "base/feature_list.h" #include "base/guid.h" - #include "base/task/post_task.h" -#include "chrome/browser/extensions/api/streams_private/streams_private_api.h" -#include "chrome/browser/plugins/plugin_utils.h" +#include "electron/shell/browser/extensions/api/streams_private/streams_private_api.h" diff --git a/patches/chromium/mas_disable_custom_window_frame.patch b/patches/chromium/mas_disable_custom_window_frame.patch index 4acb20b02f92..e4f2b279752e 100644 --- a/patches/chromium/mas_disable_custom_window_frame.patch +++ b/patches/chromium/mas_disable_custom_window_frame.patch @@ -95,10 +95,10 @@ index e03bbc724cfd01967e71998394361556df1c4915..783745b11365c04c1e1052197d20d494 // The NSWindow used by BridgedNativeWidget. Provides hooks into AppKit that // can only be accomplished by overriding methods. diff --git a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm -index 5e5a39c2920b748823d21f15bc054733d7aa6441..980c4cef13bacb46e92264bf38f3934626515190 100644 +index 757c72d98de11f611309f4f5af8d0d9aab639181..a6319a0760308df6bac6b39ad3500ad77c1b6525 100644 --- a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm +++ b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm -@@ -15,7 +15,9 @@ +@@ -16,7 +16,9 @@ #import "ui/base/cocoa/window_size_constants.h" @interface NSWindow (Private) @@ -108,7 +108,7 @@ index 5e5a39c2920b748823d21f15bc054733d7aa6441..980c4cef13bacb46e92264bf38f39346 - (BOOL)hasKeyAppearance; - (long long)_resizeDirectionForMouseLocation:(CGPoint)location; - (BOOL)_isConsideredOpenForPersistentState; -@@ -57,6 +59,8 @@ +@@ -58,6 +60,8 @@ } @end @@ -116,8 +116,8 @@ index 5e5a39c2920b748823d21f15bc054733d7aa6441..980c4cef13bacb46e92264bf38f39346 + @implementation NativeWidgetMacNSWindowTitledFrame - (void)mouseDown:(NSEvent*)event { - if (self.window.isMovable) -@@ -83,6 +87,8 @@ + if (base::mac::IsAtMostOS10_11() && self.window.isMovable) +@@ -84,6 +88,8 @@ } @end @@ -126,7 +126,7 @@ index 5e5a39c2920b748823d21f15bc054733d7aa6441..980c4cef13bacb46e92264bf38f39346 @implementation NativeWidgetMacNSWindow { @private base::scoped_nsobject _commandDispatcher; -@@ -164,6 +170,8 @@ +@@ -165,6 +171,8 @@ // NSWindow overrides. @@ -135,7 +135,7 @@ index 5e5a39c2920b748823d21f15bc054733d7aa6441..980c4cef13bacb46e92264bf38f39346 + (Class)frameViewClassForStyleMask:(NSWindowStyleMask)windowStyle { if (windowStyle & NSWindowStyleMaskTitled) { if (Class customFrame = [NativeWidgetMacNSWindowTitledFrame class]) -@@ -175,6 +183,8 @@ +@@ -176,6 +184,8 @@ return [super frameViewClassForStyleMask:windowStyle]; } diff --git a/patches/chromium/mas_disable_remote_layer.patch b/patches/chromium/mas_disable_remote_layer.patch index ee3a78d2d75e..219210aefb40 100644 --- a/patches/chromium/mas_disable_remote_layer.patch +++ b/patches/chromium/mas_disable_remote_layer.patch @@ -17,7 +17,7 @@ cases where performance improves when disabling remote CoreAnimation (remote CoreAnimation is really only about battery usage). diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.h b/gpu/ipc/service/image_transport_surface_overlay_mac.h -index a298747e3b755acd4f8d366d625142371ed1995e..9c9bdc53016637c6d6dbb27f3581b343ec96fb97 100644 +index 3307998ec566e24a9050434af4e6e3bb09557d43..456603c97bfc2214b0d08fecd592ff1e2c26ceb6 100644 --- a/gpu/ipc/service/image_transport_surface_overlay_mac.h +++ b/gpu/ipc/service/image_transport_surface_overlay_mac.h @@ -20,7 +20,9 @@ @@ -30,7 +30,7 @@ index a298747e3b755acd4f8d366d625142371ed1995e..9c9bdc53016637c6d6dbb27f3581b343 @class CALayer; namespace ui { -@@ -97,7 +99,9 @@ class ImageTransportSurfaceOverlayMacBase : public BaseClass, +@@ -111,7 +113,9 @@ class ImageTransportSurfaceOverlayMacBase : public BaseClass, base::WeakPtr delegate_; bool use_remote_layer_api_; @@ -41,7 +41,7 @@ index a298747e3b755acd4f8d366d625142371ed1995e..9c9bdc53016637c6d6dbb27f3581b343 gfx::Size pixel_size_; diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm -index eb46993b8f40fdc7da35dae1b850dad637f6b47d..05a9ae47620d17b5a53f991c0b3a0a5c153b599c 100644 +index 7c97709a8dfe55fb91b5bdae3f7a83d8bdf93f1b..77d930293ff0b552a504464898ed809067b2cac0 100644 --- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm +++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm @@ -63,6 +63,7 @@ ImageTransportSurfaceOverlayMacBase< @@ -60,7 +60,7 @@ index eb46993b8f40fdc7da35dae1b850dad637f6b47d..05a9ae47620d17b5a53f991c0b3a0a5c return true; } -@@ -139,7 +141,9 @@ ImageTransportSurfaceOverlayMacBase::SwapBuffersInternal( +@@ -140,7 +142,9 @@ ImageTransportSurfaceOverlayMacBase::SwapBuffersInternal( "GLImpl", static_cast(gl::GetGLImplementation()), "width", pixel_size_.width()); if (use_remote_layer_api_) { diff --git a/patches/chromium/mas_no_private_api.patch b/patches/chromium/mas_no_private_api.patch index 69915055577d..535a08b43360 100644 --- a/patches/chromium/mas_no_private_api.patch +++ b/patches/chromium/mas_no_private_api.patch @@ -50,7 +50,7 @@ index 5124b17f020849671a7f03d92bda052eff84d169..f9730f71c122965f7ce7815a1b9a7b32 // is concerned. @property(nonatomic, readonly) NSString* subrole; diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm -index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce03e97c09 100644 +index a35b6dae73540518443a4b4d5745178e248c64f0..38ca03b2365e0d3a2c15abda6fb05256851deb57 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm @@ -206,6 +206,7 @@ NSString* const @@ -124,7 +124,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce {NSAccessibilitySizeAttribute, @"size"}, {NSAccessibilitySortDirectionAttribute, @"sortDirection"}, {NSAccessibilitySubroleAttribute, @"subrole"}, -@@ -1289,6 +1301,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1290,6 +1302,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; ax::mojom::Restriction::kDisabled]; } @@ -132,7 +132,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce // Returns a text marker that points to the last character in the document that // can be selected with VoiceOver. - (id)endTextMarker { -@@ -1299,6 +1312,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1300,6 +1313,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0); return CreateTextMarker(position->CreatePositionAtEndOfAnchor()); } @@ -140,7 +140,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce - (NSNumber*)expanded { if (![self instanceActive]) -@@ -1448,6 +1462,8 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1449,6 +1463,8 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return nil; } @@ -149,7 +149,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce - (NSNumber*)insertionPointLineNumber { if (![self instanceActive]) return nil; -@@ -1470,6 +1486,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1471,6 +1487,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; caretPosition->AsTextPosition()->text_offset()); return @(std::distance(lineBreaks.begin(), iterator)); } @@ -157,7 +157,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce // Returns whether or not this node should be ignored in the // accessibility tree. -@@ -2146,6 +2163,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2147,6 +2164,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return ret; } @@ -165,7 +165,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce - (NSString*)selectedText { if (![self instanceActive]) return nil; -@@ -2157,11 +2175,13 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2158,11 +2176,13 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return nil; return base::SysUTF16ToNSString(range.GetText()); } @@ -179,7 +179,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce - (NSValue*)selectedTextRange { if (![self instanceActive]) return nil; -@@ -2182,12 +2202,15 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2183,12 +2203,15 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; int selLength = range.GetText().length(); return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; } @@ -195,7 +195,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce - (NSValue*)size { if (![self instanceActive]) -@@ -2220,6 +2243,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2221,6 +2244,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return nil; } @@ -203,7 +203,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce // Returns a text marker that points to the first character in the document that // can be selected with VoiceOver. - (id)startTextMarker { -@@ -2230,6 +2254,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2231,6 +2255,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0); return CreateTextMarker(position->CreatePositionAtStartOfAnchor()); } @@ -211,7 +211,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce // Returns a subrole based upon the role. - (NSString*)subrole { -@@ -2552,11 +2577,13 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2553,11 +2578,13 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; NSMutableAttributedString* attributedInnerText = [[[NSMutableAttributedString alloc] initWithString:base::SysUTF16ToNSString(innerText)] autorelease]; @@ -225,7 +225,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce return [attributedInnerText attributedSubstringFromRange:range]; } -@@ -2660,9 +2687,8 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2661,9 +2688,8 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return ToBrowserAccessibilityCocoa(cell); } @@ -237,7 +237,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce BrowserAccessibilityPositionInstance position = CreatePositionFromTextMarker(parameter); if (!position->IsNullPosition()) -@@ -2975,6 +3001,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2976,6 +3002,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return CreateTextMarker(root->CreatePositionAt(index)); } @@ -245,7 +245,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce if ([attribute isEqualToString: NSAccessibilityBoundsForRangeParameterizedAttribute]) { -@@ -3010,6 +3037,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -3011,6 +3038,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return nil; } @@ -253,7 +253,7 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce if ([attribute isEqualToString: NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) { -@@ -3124,6 +3152,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -3125,6 +3153,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; return @(child->GetIndexInParent()); } @@ -262,10 +262,10 @@ index 558839d8847479cb10e747576a2d0cd57701bda0..975054ba2605dae54800e6d087f9d1ce return nil; } diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm -index 07645b4165bedc04eb83f7e736ab1254e5b2901d..f69c39341af7ef87f2c6aab8954b748ff9d3ec0e 100644 +index 83d0106f0f237dea75dfafe011bf527d97240d0d..462577a0dbd0fcc1baf17acd9678317cb27503fa 100644 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm -@@ -526,6 +526,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: +@@ -525,6 +525,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: [user_info setObject:native_focus_object forKey:NSAccessibilityTextChangeElement]; @@ -273,7 +273,7 @@ index 07645b4165bedc04eb83f7e736ab1254e5b2901d..f69c39341af7ef87f2c6aab8954b748f id selected_text = [native_focus_object selectedTextMarkerRange]; if (selected_text) { NSString* const NSAccessibilitySelectedTextMarkerRangeAttribute = -@@ -533,6 +534,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: +@@ -532,6 +533,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: [user_info setObject:selected_text forKey:NSAccessibilitySelectedTextMarkerRangeAttribute]; } diff --git a/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch b/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch index 24a541c6e8cd..af335ad26f84 100644 --- a/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch +++ b/patches/chromium/network_service_allow_remote_certificate_verification_logic.patch @@ -7,7 +7,7 @@ This adds a callback from the network service that's used to implement session.setCertificateVerifyCallback. diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index 2c3f75ea4ad177a63d64081f5d8028b60771edb8..e62538f061cccddea14759ea5d92f14b539992fc 100644 +index 3cd537df5ee9b1c9da6571c63c0058b5a9b820fa..5f2feba6f09327088badc56d76872d2c3920866f 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc @@ -111,6 +111,11 @@ @@ -102,7 +102,7 @@ index 2c3f75ea4ad177a63d64081f5d8028b60771edb8..e62538f061cccddea14759ea5d92f14b constexpr uint32_t NetworkContext::kMaxOutstandingRequestsPerProcess; NetworkContext::PendingCertVerify::PendingCertVerify() = default; -@@ -496,6 +574,13 @@ void NetworkContext::SetClient( +@@ -492,6 +570,13 @@ void NetworkContext::SetClient( client_.Bind(std::move(client)); } @@ -177,7 +177,7 @@ index 2c3f75ea4ad177a63d64081f5d8028b60771edb8..e62538f061cccddea14759ea5d92f14b std::unique_ptr network_delegate = std::make_unique( diff --git a/services/network/network_context.h b/services/network/network_context.h -index 5b26275cffb8155841498f22b994970e05997af2..0b35920f4dbaf8fbaf8245c9ae976459c6baa7b8 100644 +index 669fdf6d6c1ffb292a25b7ec608149f433312800..0bc906026e988819f66554749c8d6aa2f2accc49 100644 --- a/services/network/network_context.h +++ b/services/network/network_context.h @@ -86,6 +86,7 @@ class DomainReliabilityMonitor; @@ -188,7 +188,7 @@ index 5b26275cffb8155841498f22b994970e05997af2..0b35920f4dbaf8fbaf8245c9ae976459 class CookieManager; class ExpectCTReporter; class HostResolver; -@@ -189,6 +190,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -182,6 +183,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext void CreateURLLoaderFactory( mojo::PendingReceiver receiver, mojom::URLLoaderFactoryParamsPtr params) override; @@ -197,7 +197,7 @@ index 5b26275cffb8155841498f22b994970e05997af2..0b35920f4dbaf8fbaf8245c9ae976459 void ResetURLLoaderFactories() override; void GetCookieManager( mojo::PendingReceiver receiver) override; -@@ -650,6 +653,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -643,6 +646,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext std::unique_ptr nss_temp_certs_cache_; #endif @@ -207,7 +207,7 @@ index 5b26275cffb8155841498f22b994970e05997af2..0b35920f4dbaf8fbaf8245c9ae976459 // CertNetFetcher is not used by the current platform. scoped_refptr cert_net_fetcher_; diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom -index 4fc3dc0a66e975da82f8c5186378443569b01c13..2b2033797906f36fa829008c65e3b66b6e06eaa2 100644 +index 61c78d520becdb041f7b163bce5bb3fada44223a..248108042a5be07a3ddf6a11880ddbf04470d673 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom @@ -198,6 +198,17 @@ struct CTPolicy { @@ -228,7 +228,7 @@ index 4fc3dc0a66e975da82f8c5186378443569b01c13..2b2033797906f36fa829008c65e3b66b // Parameters for constructing a network context. struct NetworkContextParams { // Name used by memory tools to identify the context. -@@ -855,6 +866,9 @@ interface NetworkContext { +@@ -837,6 +848,9 @@ interface NetworkContext { // Sets a client for this network context. SetClient(pending_remote client); diff --git a/patches/chromium/notification_provenance.patch b/patches/chromium/notification_provenance.patch index 3f7224cd1dfd..a064e37aac4e 100644 --- a/patches/chromium/notification_provenance.patch +++ b/patches/chromium/notification_provenance.patch @@ -68,10 +68,10 @@ index 619ad99bb52d489826d1e442a7719d985f0696ec..f7c9d3cac66879ce2be06a7a27ea96bf notification_service_remote_.BindNewPipeAndPassReceiver()); diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc -index 2d76a71e57eade4f5fc01ff45a587ee9466baee0..62c0bb383813f07ef3a6d47988223f8c9e2788b0 100644 +index d221f2747086452c59474f17211adbfeec5a58b0..feee9f0b5f783cb4fbc60d3c29bddfaf5b4b6c46 100644 --- a/content/browser/notifications/platform_notification_context_impl.cc +++ b/content/browser/notifications/platform_notification_context_impl.cc -@@ -209,12 +209,13 @@ void PlatformNotificationContextImpl::Shutdown() { +@@ -208,12 +208,13 @@ void PlatformNotificationContextImpl::Shutdown() { } void PlatformNotificationContextImpl::CreateService( @@ -108,10 +108,10 @@ index 4bf25bf1fa69f7d3869369172d375e2e489e62a1..f80ef2cecc8b111dc54e109646573a59 mojo::PendingReceiver receiver); diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 09252dcdf267aad57653a23def406653265eee13..64e781e055df605a2e205106eaed8264ebd3f4b8 100644 +index 49af7bd3719fe3c9848050f3f336bc02cfbfd2fb..f33eb6d5a0e98e06cd3ba318e9b578df4bc9ab2c 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -2125,7 +2125,7 @@ void RenderProcessHostImpl::CreateNotificationService( +@@ -2120,7 +2120,7 @@ void RenderProcessHostImpl::CreateNotificationService( mojo::PendingReceiver receiver) { DCHECK_CURRENTLY_ON(BrowserThread::UI); storage_partition_impl_->GetPlatformNotificationContext()->CreateService( @@ -142,10 +142,10 @@ index ca61088079c4150fcf389504ddcf26bcf6bf69cd..d9c034c39890eef1fe3d95c6d7c0ae68 const GURL& origin, const blink::PlatformNotificationData& notification_data, diff --git a/content/test/mock_platform_notification_service.cc b/content/test/mock_platform_notification_service.cc -index 73a1af201b12bf818af2eafadad478b8c422826c..fc7e74c0bf900d475fc134a7b606c5f9e404f934 100644 +index 639a93ac8d4f295910fcfb64d69d1498c9dbbe94..25d7b29b53b426d02664bc904f1c646662d9a5d5 100644 --- a/content/test/mock_platform_notification_service.cc +++ b/content/test/mock_platform_notification_service.cc -@@ -31,6 +31,7 @@ MockPlatformNotificationService::MockPlatformNotificationService( +@@ -30,6 +30,7 @@ MockPlatformNotificationService::MockPlatformNotificationService( MockPlatformNotificationService::~MockPlatformNotificationService() = default; void MockPlatformNotificationService::DisplayNotification( diff --git a/patches/chromium/pepper_plugin_support.patch b/patches/chromium/pepper_plugin_support.patch index f3c0257bce50..4bfa1a224c29 100644 --- a/patches/chromium/pepper_plugin_support.patch +++ b/patches/chromium/pepper_plugin_support.patch @@ -35,13 +35,13 @@ index 2e328c0fb5a6598c3ae911655b3e5016a02b7405..304364f7e02c19d2ad7d16433e92dcfe // Permissions for the following interfaces will be checked at the // time of the corresponding instance's methods calls (because diff --git a/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc -index d72a867594acee97d50c5f905fc1a4df9aa9352e..8a4cc159cb490ebadbb1b54aa88223c0cbf8ffdb 100644 +index 82fa5b7026e62cfe69700f30fcc84731fc30afe8..f4ad9fbc72a5cb27ed22ab014ccb2fcb4cb49284 100644 --- a/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc -@@ -7,10 +7,12 @@ +@@ -6,10 +6,12 @@ + #include - #include "base/task/post_task.h" +#if 0 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/profiles/profile.h" @@ -51,7 +51,7 @@ index d72a867594acee97d50c5f905fc1a4df9aa9352e..8a4cc159cb490ebadbb1b54aa88223c0 #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" -@@ -59,6 +61,7 @@ int32_t PepperBrokerMessageFilter::OnIsAllowed( +@@ -58,6 +60,7 @@ int32_t PepperBrokerMessageFilter::OnIsAllowed( RenderProcessHost::FromID(render_process_id_); if (!render_process_host) return PP_ERROR_FAILED; @@ -59,7 +59,7 @@ index d72a867594acee97d50c5f905fc1a4df9aa9352e..8a4cc159cb490ebadbb1b54aa88223c0 Profile* profile = Profile::FromBrowserContext(render_process_host->GetBrowserContext()); HostContentSettingsMap* content_settings = -@@ -68,5 +71,6 @@ int32_t PepperBrokerMessageFilter::OnIsAllowed( +@@ -67,5 +70,6 @@ int32_t PepperBrokerMessageFilter::OnIsAllowed( std::string()); if (setting == CONTENT_SETTING_ALLOW) return PP_OK; @@ -68,11 +68,11 @@ index d72a867594acee97d50c5f905fc1a4df9aa9352e..8a4cc159cb490ebadbb1b54aa88223c0 + return PP_OK; } diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc -index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d020866781 100644 +index 839b95e6a27e1296bae5e1bc98d5aedd7b2c3041..677b65e44440825d7fbba18f736ff970a8da3559 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc -@@ -8,9 +8,11 @@ - #include "base/task/post_task.h" +@@ -7,9 +7,11 @@ + #include "base/bind.h" #include "base/time/time.h" #include "build/build_config.h" +#if 0 @@ -83,7 +83,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_task_traits.h" -@@ -41,6 +43,7 @@ using content::RenderProcessHost; +@@ -40,6 +42,7 @@ using content::RenderProcessHost; namespace { @@ -91,7 +91,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 // Get the CookieSettings on the UI thread for the given render process ID. scoped_refptr GetCookieSettings( int render_process_id) { -@@ -54,6 +57,7 @@ scoped_refptr GetCookieSettings( +@@ -53,6 +56,7 @@ scoped_refptr GetCookieSettings( } return nullptr; } @@ -99,7 +99,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 void BindWakeLockProviderOnUIThread( mojo::PendingReceiver receiver) { -@@ -67,7 +71,9 @@ PepperFlashBrowserHost::PepperFlashBrowserHost(BrowserPpapiHost* host, +@@ -66,7 +70,9 @@ PepperFlashBrowserHost::PepperFlashBrowserHost(BrowserPpapiHost* host, PP_Instance instance, PP_Resource resource) : ResourceHost(host->GetPpapiHost(), instance, resource), @@ -109,7 +109,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 delay_timer_(FROM_HERE, base::TimeDelta::FromSeconds(45), this, -@@ -120,6 +126,7 @@ int32_t PepperFlashBrowserHost::OnGetLocalTimeZoneOffset( +@@ -119,6 +125,7 @@ int32_t PepperFlashBrowserHost::OnGetLocalTimeZoneOffset( int32_t PepperFlashBrowserHost::OnGetLocalDataRestrictions( ppapi::host::HostMessageContext* context) { @@ -117,7 +117,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 // Getting the Flash LSO settings requires using the CookieSettings which // belong to the profile which lives on the UI thread. We lazily initialize // |cookie_settings_| by grabbing the reference from the UI thread and then -@@ -140,9 +147,11 @@ int32_t PepperFlashBrowserHost::OnGetLocalDataRestrictions( +@@ -138,9 +145,11 @@ int32_t PepperFlashBrowserHost::OnGetLocalDataRestrictions( context->MakeReplyMessageContext(), document_url, plugin_url)); } @@ -130,7 +130,7 @@ index c1fdd9dd86e4a205c6e2b51910f2bd2901501c75..77d65652808f2405881a8e1bb53d70d0 void PepperFlashBrowserHost::GetLocalDataRestrictions( ppapi::host::ReplyMessageContext reply_context, const GURL& document_url, -@@ -171,6 +180,7 @@ void PepperFlashBrowserHost::GetLocalDataRestrictions( +@@ -169,6 +178,7 @@ void PepperFlashBrowserHost::GetLocalDataRestrictions( PpapiPluginMsg_Flash_GetLocalDataRestrictionsReply( static_cast(restrictions))); } @@ -186,10 +186,10 @@ index 6b13bae8def62d9a26d68ac8396b4bf6f7439c1a..d92b5a5855c0cebf94922a31f686e15e DISALLOW_COPY_AND_ASSIGN(PepperFlashBrowserHost); diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc -index 7c8c292d6d422139be89632dcb6a9d44106b3ac9..276d2fa32b25984e50eb5422e60a650fcb67fb71 100644 +index 7b774366e2ebd2405e0b85cdfbf1885c394afd0d..26996b7540d652ddb454cbb2fe3510d2a8aa31bf 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc -@@ -21,6 +21,7 @@ +@@ -20,6 +20,7 @@ #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/render_frame_host.h" #include "content/public/common/pepper_plugin_info.h" @@ -197,7 +197,7 @@ index 7c8c292d6d422139be89632dcb6a9d44106b3ac9..276d2fa32b25984e50eb5422e60a650f #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" #include "ppapi/host/host_message_context.h" -@@ -128,7 +129,9 @@ PepperFlashDRMHost::PepperFlashDRMHost(BrowserPpapiHost* host, +@@ -127,7 +128,9 @@ PepperFlashDRMHost::PepperFlashDRMHost(BrowserPpapiHost* host, content::ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( render_process_id, voucher_file); @@ -207,7 +207,7 @@ index 7c8c292d6d422139be89632dcb6a9d44106b3ac9..276d2fa32b25984e50eb5422e60a650f monitor_finder_ = new MonitorFinder(render_process_id, render_frame_id); monitor_finder_->GetMonitor(); } -@@ -151,12 +154,18 @@ int32_t PepperFlashDRMHost::OnResourceMessageReceived( +@@ -150,12 +153,18 @@ int32_t PepperFlashDRMHost::OnResourceMessageReceived( int32_t PepperFlashDRMHost::OnHostMsgGetDeviceID( ppapi::host::HostMessageContext* context) { @@ -227,7 +227,7 @@ index 7c8c292d6d422139be89632dcb6a9d44106b3ac9..276d2fa32b25984e50eb5422e60a650f } int32_t PepperFlashDRMHost::OnHostMsgGetHmonitor( -@@ -185,6 +194,7 @@ int32_t PepperFlashDRMHost::OnHostMsgMonitorIsExternal( +@@ -184,6 +193,7 @@ int32_t PepperFlashDRMHost::OnHostMsgMonitorIsExternal( return PP_OK; } @@ -235,7 +235,7 @@ index 7c8c292d6d422139be89632dcb6a9d44106b3ac9..276d2fa32b25984e50eb5422e60a650f void PepperFlashDRMHost::GotDeviceID( ppapi::host::ReplyMessageContext reply_context, const std::string& id, -@@ -197,3 +207,4 @@ void PepperFlashDRMHost::GotDeviceID( +@@ -196,3 +206,4 @@ void PepperFlashDRMHost::GotDeviceID( host()->SendReply(reply_context, PpapiPluginMsg_FlashDRM_GetDeviceIDReply(id)); } @@ -265,13 +265,13 @@ index b9d2ce7f7f6837ee7b304daac82d21a3147c6faf..4d4b023d62d12b4d119acbfdee64f415 base::WeakPtrFactory weak_factory_{this}; diff --git a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc -index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f99fd42e9e 100644 +index 0a04a1e0ec56126a7e44537141d024332b22a190..5384d7ac2f2eaf708bf001dd885f401783ac7133 100644 --- a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc -@@ -8,17 +8,21 @@ +@@ -7,17 +7,21 @@ + #include #include "base/stl_util.h" - #include "base/task/post_task.h" +#if 0 #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" @@ -290,7 +290,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" #include "ppapi/host/host_message_context.h" -@@ -27,12 +31,11 @@ +@@ -26,12 +30,11 @@ #include "ppapi/shared_impl/file_system_util.h" #include "storage/browser/file_system/isolated_context.h" @@ -304,7 +304,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 namespace { -@@ -42,6 +45,7 @@ const char* kPredefinedAllowedCrxFsOrigins[] = { +@@ -41,6 +44,7 @@ const char* kPredefinedAllowedCrxFsOrigins[] = { }; } // namespace @@ -312,7 +312,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 // static PepperIsolatedFileSystemMessageFilter* -@@ -69,8 +73,10 @@ PepperIsolatedFileSystemMessageFilter::PepperIsolatedFileSystemMessageFilter( +@@ -68,8 +72,10 @@ PepperIsolatedFileSystemMessageFilter::PepperIsolatedFileSystemMessageFilter( profile_directory_(profile_directory), document_url_(document_url), ppapi_host_(ppapi_host) { @@ -323,7 +323,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 } PepperIsolatedFileSystemMessageFilter:: -@@ -95,6 +101,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnResourceMessageReceived( +@@ -94,6 +100,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnResourceMessageReceived( return PP_ERROR_FAILED; } @@ -331,7 +331,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 Profile* PepperIsolatedFileSystemMessageFilter::GetProfile() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ProfileManager* profile_manager = g_browser_process->profile_manager(); -@@ -121,6 +128,7 @@ PepperIsolatedFileSystemMessageFilter::CreateCrxFileSystem(Profile* profile) { +@@ -120,6 +127,7 @@ PepperIsolatedFileSystemMessageFilter::CreateCrxFileSystem(Profile* profile) { return storage::IsolatedContext::ScopedFSHandle(); #endif } @@ -339,7 +339,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem( ppapi::host::HostMessageContext* context, -@@ -129,7 +137,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem( +@@ -128,7 +136,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem( case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_INVALID: break; case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_CRX: @@ -348,7 +348,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE: return OpenPluginPrivateFileSystem(context); } -@@ -139,6 +147,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem( +@@ -138,6 +146,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem( return PP_ERROR_FAILED; } @@ -356,7 +356,7 @@ index c94e1947dc1b1ea83b27107c36e87c3dad5a61b1..b38862b776713958c54c3523b61a36f9 int32_t PepperIsolatedFileSystemMessageFilter::OpenCrxFileSystem( ppapi::host::HostMessageContext* context) { #if BUILDFLAG(ENABLE_EXTENSIONS) -@@ -179,6 +188,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OpenCrxFileSystem( +@@ -178,6 +187,7 @@ int32_t PepperIsolatedFileSystemMessageFilter::OpenCrxFileSystem( return PP_ERROR_NOTSUPPORTED; #endif } diff --git a/patches/chromium/picture-in-picture.patch b/patches/chromium/picture-in-picture.patch index fe90245efc13..8f984f28e293 100644 --- a/patches/chromium/picture-in-picture.patch +++ b/patches/chromium/picture-in-picture.patch @@ -35,7 +35,7 @@ index e9b64a823ae7e25361f37190d247af0fa6a6f68a..43fdb0ad50d2b11a1bc28aa0f358c6dd #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/color_palette.h" diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.cc b/chrome/browser/ui/views/overlay/overlay_window_views.cc -index 883958a432fc791824e2f94cf2bcba633ac74467..c90787bbbbcd49b278490362c72a9434deed4fb4 100644 +index 9b857313673a0233af1b20b72ecfeb52b2cff79d..3879843e937e134b74ea1a0a85a3ef5921a66eff 100644 --- a/chrome/browser/ui/views/overlay/overlay_window_views.cc +++ b/chrome/browser/ui/views/overlay/overlay_window_views.cc @@ -19,7 +19,7 @@ diff --git a/patches/chromium/preconnect_feature.patch b/patches/chromium/preconnect_feature.patch index f71db3d06b0f..ba3c11a8accd 100644 --- a/patches/chromium/preconnect_feature.patch +++ b/patches/chromium/preconnect_feature.patch @@ -8,10 +8,10 @@ this patch removes that dependency so we can reuse it. Ideally we would change this class in upstream to not depend on Profile. diff --git a/chrome/browser/predictors/preconnect_manager.cc b/chrome/browser/predictors/preconnect_manager.cc -index 50adee35887f799fea11a35eca1240851a0d1126..9935e068983de3342382f73889be41acc3fe8f4e 100644 +index e6524169e022c98d07ca29fa7988c22b06f0a2e1..199837a907a8b9df0ef7d2cb9b369503ab655bf6 100644 --- a/chrome/browser/predictors/preconnect_manager.cc +++ b/chrome/browser/predictors/preconnect_manager.cc -@@ -69,7 +69,7 @@ PreresolveJob::PreresolveJob(PreresolveJob&& other) = default; +@@ -68,7 +68,7 @@ PreresolveJob::PreresolveJob(PreresolveJob&& other) = default; PreresolveJob::~PreresolveJob() = default; PreconnectManager::PreconnectManager(base::WeakPtr delegate, @@ -20,7 +20,7 @@ index 50adee35887f799fea11a35eca1240851a0d1126..9935e068983de3342382f73889be41ac : delegate_(std::move(delegate)), profile_(profile), inflight_preresolves_count_(0) { -@@ -328,11 +328,13 @@ network::mojom::NetworkContext* PreconnectManager::GetNetworkContext() const { +@@ -325,11 +325,13 @@ network::mojom::NetworkContext* PreconnectManager::GetNetworkContext() const { if (network_context_) return network_context_; diff --git a/patches/chromium/printing.patch b/patches/chromium/printing.patch index ff45c2c39d2a..f8403d8ca25b 100644 --- a/patches/chromium/printing.patch +++ b/patches/chromium/printing.patch @@ -10,38 +10,11 @@ majority of changes originally come from these PRs: This patch also fixes callback for manual user cancellation and success. -diff --git a/chrome/browser/printing/print_job.cc b/chrome/browser/printing/print_job.cc -index d23770fb402a1989027db54397fba80ceff9a296..61de329e09a08a9253eff554f6759fbef8214520 100644 ---- a/chrome/browser/printing/print_job.cc -+++ b/chrome/browser/printing/print_job.cc -@@ -57,7 +57,7 @@ enum class PrintRasterizationMode { - kMaxValue = kFast, - }; - --bool PrintWithReducedRasterization(PrefService* prefs) { -+ALLOW_UNUSED_TYPE bool PrintWithReducedRasterization(PrefService* prefs) { - // Managed preference takes precedence over user preference and field trials. - if (prefs->IsManagedPreference(prefs::kPrintRasterizationMode)) { - int value = prefs->GetInteger(prefs::kPrintRasterizationMode); -@@ -350,10 +350,13 @@ void PrintJob::StartPdfToEmfConversion( - settings.print_text_with_gdi() && !settings.printer_is_xps() && - base::FeatureList::IsEnabled(::features::kGdiTextPrinting); - -+ #if 0 - Profile* profile = Profile::FromBrowserContext( - worker_->GetWebContents()->GetBrowserContext()); - bool print_with_reduced_rasterization = - PrintWithReducedRasterization(profile->GetPrefs()); -+ #endif -+ bool print_with_reduced_rasterization = base::FeatureList::IsEnabled(features::kPrintWithReducedRasterization); - - using RenderMode = PdfRenderSettings::Mode; - RenderMode mode; diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc -index 9122bbf4f15c46eefd5269946659b5886156348a..211ca535d4572f11de7256c108aa84a160169557 100644 +index 25fd623deb7a5d580d80dfa4d99d4628c6800eb3..dd76a610f05e636a6f01e4f21a11507f65867a15 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc -@@ -21,7 +21,6 @@ +@@ -20,7 +20,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/printing/print_job.h" @@ -49,7 +22,7 @@ index 9122bbf4f15c46eefd5269946659b5886156348a..211ca535d4572f11de7256c108aa84a1 #include "components/crash/core/common/crash_keys.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" -@@ -29,6 +28,7 @@ +@@ -28,6 +27,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "printing/backend/print_backend.h" @@ -57,7 +30,7 @@ index 9122bbf4f15c46eefd5269946659b5886156348a..211ca535d4572f11de7256c108aa84a1 #include "printing/print_job_constants.h" #include "printing/printed_document.h" #include "printing/printing_utils.h" -@@ -224,16 +224,21 @@ void PrintJobWorker::UpdatePrintSettings(base::Value new_settings, +@@ -223,16 +223,21 @@ void PrintJobWorker::UpdatePrintSettings(base::Value new_settings, print_backend->GetPrinterDriverInfo(printer_name)); } @@ -82,7 +55,7 @@ index 9122bbf4f15c46eefd5269946659b5886156348a..211ca535d4572f11de7256c108aa84a1 } #if defined(OS_CHROMEOS) -@@ -249,6 +254,13 @@ void PrintJobWorker::UpdatePrintSettingsFromPOD( +@@ -248,6 +253,13 @@ void PrintJobWorker::UpdatePrintSettingsFromPOD( void PrintJobWorker::GetSettingsDone(SettingsCallback callback, PrintingContext::Result result) { @@ -97,10 +70,10 @@ index 9122bbf4f15c46eefd5269946659b5886156348a..211ca535d4572f11de7256c108aa84a1 } diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc -index 5531a6e8cbc83cff104f70d4da3576f5af03209c..0d70e8132669aae179738086a7989bd60c0c28ee 100644 +index 8a743d0dd74b087059ff812019ae568a22c5fa01..20c43be03706617a276d210190897dc473bbd0da 100644 --- a/chrome/browser/printing/print_view_manager_base.cc +++ b/chrome/browser/printing/print_view_manager_base.cc -@@ -28,10 +28,7 @@ +@@ -27,10 +27,7 @@ #include "chrome/browser/printing/print_view_manager_common.h" #include "chrome/browser/printing/printer_query.h" #include "chrome/browser/profiles/profile.h" @@ -315,10 +288,10 @@ index 94b65e85561e1440b60086b668865bda07303d35..7044463d163fd74e55ff1a042c36739f // This means we are _blocking_ until all the necessary pages have been // rendered or the print settings are being loaded. diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc -index 86ee19d5926df13cea1c8bb9bbe223061b8d7a79..7177042770391880b235a1e25ec75567229d3115 100644 +index f4094c54075b9d4cdcbf1aa78c7264882889c76e..1643c637cf0b05427b9dd72e60045a60952ca04f 100644 --- a/chrome/browser/printing/printing_message_filter.cc +++ b/chrome/browser/printing/printing_message_filter.cc -@@ -22,6 +22,7 @@ +@@ -21,6 +21,7 @@ #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h" #include "components/printing/browser/print_manager_utils.h" #include "components/printing/common/print_messages.h" @@ -326,7 +299,7 @@ index 86ee19d5926df13cea1c8bb9bbe223061b8d7a79..7177042770391880b235a1e25ec75567 #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" -@@ -90,20 +91,23 @@ void PrintingMessageFilter::SetDelegateForTesting(TestDelegate* delegate) { +@@ -89,19 +90,22 @@ void PrintingMessageFilter::SetDelegateForTesting(TestDelegate* delegate) { g_test_delegate = delegate; } @@ -347,13 +320,12 @@ index 86ee19d5926df13cea1c8bb9bbe223061b8d7a79..7177042770391880b235a1e25ec75567 base::Unretained(this))); + #if 0 is_printing_enabled_.Init(prefs::kPrintingEnabled, profile->GetPrefs()); - is_printing_enabled_.MoveToSequence( - base::CreateSingleThreadTaskRunner({BrowserThread::IO})); + is_printing_enabled_.MoveToSequence(content::GetIOThreadTaskRunner({})); + #endif } PrintingMessageFilter::~PrintingMessageFilter() { -@@ -135,11 +139,13 @@ bool PrintingMessageFilter::OnMessageReceived(const IPC::Message& message) { +@@ -133,11 +137,13 @@ bool PrintingMessageFilter::OnMessageReceived(const IPC::Message& message) { void PrintingMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) { DCHECK_CURRENTLY_ON(BrowserThread::IO); @@ -367,7 +339,7 @@ index 86ee19d5926df13cea1c8bb9bbe223061b8d7a79..7177042770391880b235a1e25ec75567 std::unique_ptr printer_query = queue_->PopPrinterQuery(0); if (!printer_query) { printer_query = -@@ -225,12 +231,13 @@ void PrintingMessageFilter::OnScriptedPrintReply( +@@ -223,12 +229,13 @@ void PrintingMessageFilter::OnScriptedPrintReply( void PrintingMessageFilter::OnUpdatePrintSettings(int document_cookie, base::Value job_settings, IPC::Message* reply_msg) { @@ -382,7 +354,7 @@ index 86ee19d5926df13cea1c8bb9bbe223061b8d7a79..7177042770391880b235a1e25ec75567 if (!job_settings.is_dict() || !job_settings.FindIntKey(kSettingPrinterType)) { // Reply with null query. -@@ -263,7 +270,9 @@ void PrintingMessageFilter::OnUpdatePrintSettingsReply( +@@ -261,7 +268,9 @@ void PrintingMessageFilter::OnUpdatePrintSettingsReply( std::unique_ptr printer_query, IPC::Message* reply_msg) { PrintMsg_PrintPages_Params params; @@ -419,10 +391,10 @@ index 49296adb525eeb511d4aad5f25ff1196f9f1333e..2d705bb98f47e79f0922af9675c42800 // content::BrowserMessageFilter: bool OnMessageReceived(const IPC::Message& message) override; diff --git a/components/printing/common/print.mojom b/components/printing/common/print.mojom -index 912652847ab45c811400dbee81bc5161d5865c56..5fb26c8952117c5110707b1c6b45158090b37ded 100644 +index 5398362ff64fe948b492aa6dd362f2aa6ab19231..3ff75b7850e8ebb03cc202a2cc3f70fba0b1174f 100644 --- a/components/printing/common/print.mojom +++ b/components/printing/common/print.mojom -@@ -93,7 +93,7 @@ interface PrintPreviewUI { +@@ -104,7 +104,7 @@ interface PrintPreviewUI { interface PrintRenderFrame { // Tells the RenderFrame to switch the CSS to print media type, render every // requested page, and then switch back the CSS to display media type. @@ -432,7 +404,7 @@ index 912652847ab45c811400dbee81bc5161d5865c56..5fb26c8952117c5110707b1c6b451580 // Tells the RenderFrame to switch the CSS to print media type, render every // requested page using the print preview document's frame/node, and then diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc -index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada7023dad1 100644 +index a5aa97ab6254c27d04beaf758fbf9916189e3284..e566b1d22a5bb0aa40f15db83f1dc89e9099f62c 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc @@ -44,6 +44,7 @@ @@ -443,7 +415,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada #include "printing/units.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/common/css/page_orientation.h" -@@ -1174,7 +1175,8 @@ void PrintRenderFrameHelper::ScriptedPrint(bool user_initiated) { +@@ -1173,7 +1174,8 @@ void PrintRenderFrameHelper::ScriptedPrint(bool user_initiated) { web_frame->DispatchBeforePrintEvent(); if (!weak_this) return; @@ -453,7 +425,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada if (weak_this) web_frame->DispatchAfterPrintEvent(); } -@@ -1195,7 +1197,7 @@ void PrintRenderFrameHelper::BindPrintRenderFrameReceiver( +@@ -1194,7 +1196,7 @@ void PrintRenderFrameHelper::BindPrintRenderFrameReceiver( receivers_.Add(this, std::move(receiver)); } @@ -462,7 +434,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr()); if (ipc_nesting_level_ > 1) return; -@@ -1209,7 +1211,7 @@ void PrintRenderFrameHelper::PrintRequestedPages() { +@@ -1208,7 +1210,7 @@ void PrintRenderFrameHelper::PrintRequestedPages() { // If we are printing a PDF extension frame, find the plugin node and print // that instead. auto plugin = delegate_->GetPdfElement(frame); @@ -471,7 +443,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada if (!render_frame_gone_) frame->DispatchAfterPrintEvent(); // WARNING: |this| may be gone at this point. Do not do any more work here and -@@ -1226,7 +1228,7 @@ void PrintRenderFrameHelper::PrintForSystemDialog() { +@@ -1225,7 +1227,7 @@ void PrintRenderFrameHelper::PrintForSystemDialog() { return; } Print(frame, print_preview_context_.source_node(), @@ -480,7 +452,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada if (!render_frame_gone_) frame->DispatchAfterPrintEvent(); // WARNING: |this| may be gone at this point. Do not do any more work here and -@@ -1274,6 +1276,8 @@ void PrintRenderFrameHelper::PrintPreview(base::Value settings) { +@@ -1273,6 +1275,8 @@ void PrintRenderFrameHelper::PrintPreview(base::Value settings) { if (ipc_nesting_level_ > 1) return; @@ -489,7 +461,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada print_preview_context_.OnPrintPreview(); base::UmaHistogramEnumeration(print_preview_context_.IsForArc() -@@ -1785,7 +1789,9 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { +@@ -1784,7 +1788,9 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { auto self = weak_ptr_factory_.GetWeakPtr(); Print(duplicate_node.GetDocument().GetFrame(), duplicate_node, @@ -500,7 +472,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada // Check if |this| is still valid. if (!self) return; -@@ -1796,7 +1802,9 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { +@@ -1795,7 +1801,9 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, const blink::WebNode& node, @@ -511,7 +483,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada // If still not finished with earlier print request simply ignore. if (prep_frame_view_) return; -@@ -1804,7 +1812,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, +@@ -1803,7 +1811,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, FrameReference frame_ref(frame); int expected_page_count = 0; @@ -520,7 +492,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada DidFinishPrinting(FAIL_PRINT_INIT); return; // Failed to init print page settings. } -@@ -1824,8 +1832,11 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, +@@ -1823,8 +1831,11 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, PrintMsg_PrintPages_Params print_settings; auto self = weak_ptr_factory_.GetWeakPtr(); @@ -534,7 +506,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada // Check if |this| is still valid. if (!self) return; -@@ -2061,10 +2072,23 @@ void PrintRenderFrameHelper::IPCProcessed() { +@@ -2060,10 +2071,23 @@ void PrintRenderFrameHelper::IPCProcessed() { base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); } @@ -561,7 +533,7 @@ index ccd164ad24e4c401be746c0ac9716d1d259c0a85..1db0c6cad6cc27b3a548b78d701d2ada // Check if the printer returned any settings, if the settings is empty, we // can safely assume there are no printer drivers configured. So we safely // terminate. -@@ -2084,12 +2108,14 @@ bool PrintRenderFrameHelper::InitPrintSettings(bool fit_to_paper_size) { +@@ -2083,12 +2107,14 @@ bool PrintRenderFrameHelper::InitPrintSettings(bool fit_to_paper_size) { return result; } diff --git a/patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch b/patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch index 5f18d45afbed..7e3923110f51 100644 --- a/patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch +++ b/patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch @@ -8,7 +8,7 @@ Chrome moved the SetCursor IPC message to mojo, which we use to tell OSR about ` Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2172779 diff --git a/content/browser/renderer_host/render_widget_host_delegate.h b/content/browser/renderer_host/render_widget_host_delegate.h -index 2edad62668474c690adb283224400dc4e7163fbf..1c7928e66955e188f70d4f1c475f2ad33db80cb0 100644 +index 7e9bddc9f002b938ed7804af7c484f4500988a9e..f77130c39b853ed6ba30e62dd59c4afec93d8d31 100644 --- a/content/browser/renderer_host/render_widget_host_delegate.h +++ b/content/browser/renderer_host/render_widget_host_delegate.h @@ -15,6 +15,7 @@ @@ -30,10 +30,10 @@ index 2edad62668474c690adb283224400dc4e7163fbf..1c7928e66955e188f70d4f1c475f2ad3 // RenderWidgetHost on the main frame, and false otherwise. virtual bool IsWidgetForMainFrame(RenderWidgetHostImpl*); diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc -index 77526d78e8113f7071fe269cbcdf63bb772db6e4..933377708dd4ef1793863fb042fd74c0aaef3f4c 100644 +index e660c0e072a6fa855102ec7e4d8a883a923e46ae..856f72a6c0fe0f55ff33cedcd6c777f17b7e7231 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc -@@ -1599,6 +1599,8 @@ void RenderWidgetHostImpl::SetCursor(const WebCursor& cursor) { +@@ -1646,6 +1646,8 @@ void RenderWidgetHostImpl::SetCursor(const WebCursor& cursor) { if (!view_) return; view_->UpdateCursor(cursor); @@ -43,10 +43,10 @@ index 77526d78e8113f7071fe269cbcdf63bb772db6e4..933377708dd4ef1793863fb042fd74c0 void RenderWidgetHostImpl::OnCursorVisibilityStateChanged(bool is_visible) { diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index 402450783e76fedd1264d6d7f47352dd233be621..bf744d187a84df4c3ea93ec16ef2cc1ef5013d92 100644 +index 9def30b2994eddef546509f90b6beba0da5815f1..004045e3223bf89d7e71f3dee5e221dbd1dc06cd 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -3454,6 +3454,11 @@ bool WebContentsImpl::OnUpdateDragCursor() { +@@ -3468,6 +3468,11 @@ bool WebContentsImpl::OnUpdateDragCursor() { browser_plugin_embedder_->OnUpdateDragCursor(); } @@ -59,7 +59,7 @@ index 402450783e76fedd1264d6d7f47352dd233be621..bf744d187a84df4c3ea93ec16ef2cc1e RenderWidgetHostImpl* render_widget_host) { return render_widget_host == GetMainFrame()->GetRenderWidgetHost(); diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h -index 71ddac828df2e3df42214aee30d8b0fa866938fe..acae46fdac0d8dc2a26c72595b6e4b49dc21106a 100644 +index 3316e61f8c1c1295748d5fc279fc3f14140fc59d..2558f46121c3635a54b22dde070def374d511bb3 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -912,6 +912,7 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, @@ -71,7 +71,7 @@ index 71ddac828df2e3df42214aee30d8b0fa866938fe..acae46fdac0d8dc2a26c72595b6e4b49 bool AddDomainInfoToRapporSample(rappor::Sample* sample) override; bool IsShowingContextMenuOnPage() const override; diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h -index d84c9abf8e8e46606a23d5e66ce740afeac01179..111d867f8a9076cf32e09d357dce9ff9aa1cadc2 100644 +index da2c6572dd7e9bbd6f59b864edc73dae56ca2103..4eb46a9b37f66fe41ae9e62ac8848801e065acda 100644 --- a/content/public/browser/web_contents_observer.h +++ b/content/public/browser/web_contents_observer.h @@ -14,6 +14,7 @@ @@ -82,7 +82,7 @@ index d84c9abf8e8e46606a23d5e66ce740afeac01179..111d867f8a9076cf32e09d357dce9ff9 #include "content/public/browser/allow_service_worker_result.h" #include "content/public/browser/cookie_access_details.h" #include "content/public/browser/navigation_controller.h" -@@ -354,6 +355,9 @@ class CONTENT_EXPORT WebContentsObserver : public IPC::Listener { +@@ -365,6 +366,9 @@ class CONTENT_EXPORT WebContentsObserver : public IPC::Listener { // Invoked every time the WebContents changes visibility. virtual void OnVisibilityChanged(Visibility visibility) {} diff --git a/patches/chromium/render_widget_host_view_base.patch b/patches/chromium/render_widget_host_view_base.patch index 2ef9f307438f..7529d6b85a5b 100644 --- a/patches/chromium/render_widget_host_view_base.patch +++ b/patches/chromium/render_widget_host_view_base.patch @@ -6,10 +6,10 @@ Subject: render_widget_host_view_base.patch ... something to do with OSR? and maybe as well? terrifying. diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc -index 403a8c870a59d9dd46d20aa51b5bf966d47ed162..5914d502c879d32023a2659fac754aa925752145 100644 +index 2a5c601db29a774abb1ca8805500844a75806c8a..30668e00754990228560c5addb9ae4b9e43e33a9 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.cc +++ b/content/browser/renderer_host/render_widget_host_view_base.cc -@@ -608,6 +608,13 @@ bool RenderWidgetHostViewBase::ScreenRectIsUnstableFor( +@@ -617,6 +617,13 @@ bool RenderWidgetHostViewBase::ScreenRectIsUnstableFor( return false; } @@ -24,12 +24,12 @@ index 403a8c870a59d9dd46d20aa51b5bf966d47ed162..5914d502c879d32023a2659fac754aa9 const blink::WebMouseEvent& event, const ui::LatencyInfo& latency) { diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h -index 39f1c8d6ee464ba577d483308e73bc028c901d27..880ddb6b20c3ef19a537fd96511a096a7d29c606 100644 +index d224ea8b2c6be728639336949de0221fe381be48..09513e385d46d2a57c54bd437893eb5a72bebc1b 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.h +++ b/content/browser/renderer_host/render_widget_host_view_base.h -@@ -23,9 +23,11 @@ - #include "components/viz/common/surfaces/surface_id.h" +@@ -24,9 +24,11 @@ #include "components/viz/host/hit_test/hit_test_query.h" + #include "content/browser/renderer_host/display_feature.h" #include "content/browser/renderer_host/event_with_latency_info.h" +#include "content/browser/web_contents/web_contents_view.h" #include "content/common/content_export.h" @@ -39,7 +39,7 @@ index 39f1c8d6ee464ba577d483308e73bc028c901d27..880ddb6b20c3ef19a537fd96511a096a #include "content/public/browser/render_widget_host_view.h" #include "content/public/common/screen_info.h" #include "content/public/common/widget_type.h" -@@ -65,9 +67,11 @@ class CursorManager; +@@ -66,9 +68,11 @@ class CursorManager; class MouseWheelPhaseHandler; class RenderWidgetHostImpl; class RenderWidgetHostViewBaseObserver; @@ -50,8 +50,8 @@ index 39f1c8d6ee464ba577d483308e73bc028c901d27..880ddb6b20c3ef19a537fd96511a096a +class WebContentsView; class WebCursor; class DelegatedFrameHost; - struct TextInputState; -@@ -126,6 +130,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase + struct DisplayFeature; +@@ -128,6 +132,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase bool show_reason_unoccluded, bool show_reason_bfcache_restore) final; @@ -61,7 +61,7 @@ index 39f1c8d6ee464ba577d483308e73bc028c901d27..880ddb6b20c3ef19a537fd96511a096a // This only needs to be overridden by RenderWidgetHostViewBase subclasses // that handle content embedded within other RenderWidgetHostViews. gfx::PointF TransformPointToRootCoordSpaceF( -@@ -310,6 +317,11 @@ class CONTENT_EXPORT RenderWidgetHostViewBase +@@ -312,6 +319,11 @@ class CONTENT_EXPORT RenderWidgetHostViewBase virtual void ProcessGestureEvent(const blink::WebGestureEvent& event, const ui::LatencyInfo& latency); diff --git a/patches/chromium/revert_remove_contentrendererclient_shouldfork.patch b/patches/chromium/revert_remove_contentrendererclient_shouldfork.patch index 171850d9c5d6..20dc20c65c77 100644 --- a/patches/chromium/revert_remove_contentrendererclient_shouldfork.patch +++ b/patches/chromium/revert_remove_contentrendererclient_shouldfork.patch @@ -74,10 +74,10 @@ index ea6d8e6357233f519c3cf41a96d8453993a9ce71..c513aff3e1c3da45e45954bc0beb8046 blink::WebLocalFrame* frame, ui::PageTransition transition_type, diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h -index de0274d03ff1a0838f0ab0002c5a6b6ea7e10bfd..892366cd9d2f70498e2e7429a66dcf135d79bb27 100644 +index 9d321040de33acac09e83cc582f685740f425009..8f328979cc232c4f81a7f040e2424273a8248015 100644 --- a/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h -@@ -227,6 +227,13 @@ class CONTENT_EXPORT ContentRendererClient { +@@ -228,6 +228,13 @@ class CONTENT_EXPORT ContentRendererClient { bool is_redirect); #endif @@ -92,10 +92,10 @@ index de0274d03ff1a0838f0ab0002c5a6b6ea7e10bfd..892366cd9d2f70498e2e7429a66dcf13 // |url|. If the function returns a valid |new_url|, the request must be // updated to use it. The |force_ignore_site_for_cookies| output parameter diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc -index 95cec369e38dada721cbf26fe244461171d748f8..e9d835953e19488a4477051fc34c8e489f333c91 100644 +index cb612a7002a4ae808ca488e2aa2adbb759310964..6442139eba458788125c7dbb03d1af6a8c156255 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc -@@ -5575,6 +5575,23 @@ void RenderFrameImpl::BeginNavigation( +@@ -5502,6 +5502,23 @@ void RenderFrameImpl::BeginNavigation( // we can do a per-frame check here rather than a process-wide check. bool should_fork = HasWebUIScheme(url) || HasWebUIScheme(old_url) || (enabled_bindings_ & kWebUIBindingsPolicyMask); diff --git a/patches/chromium/scroll_bounce_flag.patch b/patches/chromium/scroll_bounce_flag.patch index f56a5ac44647..3975d12df279 100644 --- a/patches/chromium/scroll_bounce_flag.patch +++ b/patches/chromium/scroll_bounce_flag.patch @@ -6,10 +6,10 @@ Subject: scroll_bounce_flag.patch Patch to make scrollBounce option work. diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index 071f1a0b5994c6709b5b0e39f4ed33c90f282c39..0257f74577641adca495473aa0ca0224602e107e 100644 +index 1c01ee6dda5857559b089022d4fdde5b33273745..9b311fe4c118db35a9008a9ad153a52a71625771 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -1350,7 +1350,7 @@ bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { +@@ -1355,7 +1355,7 @@ bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { } bool RenderThreadImpl::IsElasticOverscrollEnabled() { diff --git a/patches/chromium/support_mixed_sandbox_with_zygote.patch b/patches/chromium/support_mixed_sandbox_with_zygote.patch index 5ad707cb873d..6a144546189d 100644 --- a/patches/chromium/support_mixed_sandbox_with_zygote.patch +++ b/patches/chromium/support_mixed_sandbox_with_zygote.patch @@ -22,10 +22,10 @@ However, the patch would need to be reviewed by the security team, as it does touch a security-sensitive class. diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 64e781e055df605a2e205106eaed8264ebd3f4b8..11b18f08dbaba89a483908faef465adfb6bd4019 100644 +index f33eb6d5a0e98e06cd3ba318e9b578df4bc9ab2c..0e84525e677131b3428e5fe73dfb7b48bf65a692 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -416,6 +416,11 @@ class RendererSandboxedProcessLauncherDelegate +@@ -412,6 +412,11 @@ class RendererSandboxedProcessLauncherDelegate { } @@ -37,7 +37,7 @@ index 64e781e055df605a2e205106eaed8264ebd3f4b8..11b18f08dbaba89a483908faef465adf ~RendererSandboxedProcessLauncherDelegate() override {} #if defined(OS_WIN) -@@ -437,6 +442,9 @@ class RendererSandboxedProcessLauncherDelegate +@@ -433,6 +438,9 @@ class RendererSandboxedProcessLauncherDelegate #if BUILDFLAG(USE_ZYGOTE_HANDLE) service_manager::ZygoteHandle GetZygote() override { @@ -47,7 +47,7 @@ index 64e781e055df605a2e205106eaed8264ebd3f4b8..11b18f08dbaba89a483908faef465adf const base::CommandLine& browser_command_line = *base::CommandLine::ForCurrentProcess(); base::CommandLine::StringType renderer_prefix = -@@ -451,10 +459,13 @@ class RendererSandboxedProcessLauncherDelegate +@@ -447,10 +455,13 @@ class RendererSandboxedProcessLauncherDelegate return service_manager::SandboxType::kRenderer; } @@ -62,7 +62,7 @@ index 64e781e055df605a2e205106eaed8264ebd3f4b8..11b18f08dbaba89a483908faef465adf }; const char kSessionStorageHolderKey[] = "kSessionStorageHolderKey"; -@@ -1836,11 +1847,18 @@ bool RenderProcessHostImpl::Init() { +@@ -1831,11 +1842,18 @@ bool RenderProcessHostImpl::Init() { cmd_line->PrependWrapper(renderer_prefix); AppendRendererCommandLine(cmd_line.get()); diff --git a/patches/chromium/unsandboxed_ppapi_processes_skip_zygote.patch b/patches/chromium/unsandboxed_ppapi_processes_skip_zygote.patch index 1e68ef6cf1ef..6028d3b10452 100644 --- a/patches/chromium/unsandboxed_ppapi_processes_skip_zygote.patch +++ b/patches/chromium/unsandboxed_ppapi_processes_skip_zygote.patch @@ -6,7 +6,7 @@ Subject: unsandboxed_ppapi_processes_skip_zygote.patch Unsandboxed ppapi processes should skip zygote. diff --git a/content/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc -index 0fa99dc66e837110595d993114bb12b93ebf8a2d..ff5eeec244933de21afa8f97c574c1c4988d83f1 100644 +index 18ca6cf2de5b58f65a4786f9b7bfcd8ad0c2e9ae..0792c6f681f2cec8993de8c51fabdc5bc102ed25 100644 --- a/content/browser/ppapi_plugin_process_host.cc +++ b/content/browser/ppapi_plugin_process_host.cc @@ -123,6 +123,9 @@ class PpapiPluginSandboxedProcessLauncherDelegate diff --git a/patches/chromium/web_contents.patch b/patches/chromium/web_contents.patch index bc19c071b0c2..10e1f0c94a8d 100644 --- a/patches/chromium/web_contents.patch +++ b/patches/chromium/web_contents.patch @@ -9,10 +9,10 @@ is needed for OSR. Originally landed in https://github.com/electron/libchromiumcontent/pull/226. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index 31b30a3f729258accab5a135eeddba7b79990e81..402450783e76fedd1264d6d7f47352dd233be621 100644 +index 725e9f890bf5479d4435b9e7366b8fe2a10e0919..9def30b2994eddef546509f90b6beba0da5815f1 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -2100,6 +2100,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) { +@@ -2117,6 +2117,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) { std::string unique_name; frame_tree_.root()->SetFrameName(params.main_frame_name, unique_name); @@ -25,7 +25,7 @@ index 31b30a3f729258accab5a135eeddba7b79990e81..402450783e76fedd1264d6d7f47352dd WebContentsViewDelegate* delegate = GetContentClient()->browser()->GetWebContentsViewDelegate(this); -@@ -2110,6 +2116,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) { +@@ -2127,6 +2133,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) { view_.reset(CreateWebContentsView(this, delegate, &render_view_host_delegate_view_)); } diff --git a/patches/chromium/webview_cross_drag.patch b/patches/chromium/webview_cross_drag.patch index 92693e15dad9..4afdf292524b 100644 --- a/patches/chromium/webview_cross_drag.patch +++ b/patches/chromium/webview_cross_drag.patch @@ -8,10 +8,10 @@ This allows dragging and dropping between s. Originally landed in https://github.com/electron/libchromiumcontent/pull/267 diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc -index b5dd9b3023750cb6b23627788b411832cf53f702..baaf3383a55e897483829c79a297e06b3210ea29 100644 +index 3b77ea4ae732825a8fc85f1547b428ebc6d90a6e..692ee207db0389aab2de854ac3b6adc3f206961e 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc -@@ -784,9 +784,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const { +@@ -785,9 +785,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const { bool WebContentsViewAura::IsValidDragTarget( RenderWidgetHostImpl* target_rwh) const { diff --git a/patches/chromium/worker_context_will_destroy.patch b/patches/chromium/worker_context_will_destroy.patch index f179b7eb836d..fd072c2f70f1 100644 --- a/patches/chromium/worker_context_will_destroy.patch +++ b/patches/chromium/worker_context_will_destroy.patch @@ -10,10 +10,10 @@ An attempt to upstream this was made, but rejected: https://chromium-review.googlesource.com/c/chromium/src/+/1954347 diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h -index 7da02ee54143e51dfb76d093429e3d8555517c4e..de0274d03ff1a0838f0ab0002c5a6b6ea7e10bfd 100644 +index 4cc9d55795035e6857f6e4ceb839d056d48c96cd..9d321040de33acac09e83cc582f685740f425009 100644 --- a/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h -@@ -394,6 +394,11 @@ class CONTENT_EXPORT ContentRendererClient { +@@ -395,6 +395,11 @@ class CONTENT_EXPORT ContentRendererClient { virtual void DidInitializeWorkerContextOnWorkerThread( v8::Local context) {} @@ -67,10 +67,10 @@ index 6c813f0484f8ce2ef6e58b710a0117d3785f25f8..2872ee9d3a7b0eb888d332a7f7fe9354 const WebSecurityOrigin& script_origin) { return false; diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc -index fe98ad619b9f5a8c13064daa80cc32bee4dc5c8c..87ab2c4ef183d9515758f6d92e732aaf8f53d09e 100644 +index f655c4ecc13e8445e35c6a79625946c9c7fb671b..32bac98ed79471178c36590b7db99fc1a95363b0 100644 --- a/third_party/blink/renderer/core/workers/worker_thread.cc +++ b/third_party/blink/renderer/core/workers/worker_thread.cc -@@ -687,6 +687,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() { +@@ -686,6 +686,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() { nested_runner_->QuitNow(); } diff --git a/patches/v8/add_realloc.patch b/patches/v8/add_realloc.patch index a3f0348ff88f..807629c79530 100644 --- a/patches/v8/add_realloc.patch +++ b/patches/v8/add_realloc.patch @@ -12,7 +12,7 @@ when we override ReallocateBufferMemory, so we therefore need to implement Realloc on the v8 side. diff --git a/include/v8.h b/include/v8.h -index 18d72f1630ccd5ec54183d653a94c023848049fb..d25b81755a59e523828a967a8864dc179f9f4eeb 100644 +index 016cbb4de8f8bc82cbff4c4b03f933a9f3d063e9..d41c65f91480e8509e1250610885fe79b205ebf8 100644 --- a/include/v8.h +++ b/include/v8.h @@ -5051,6 +5051,13 @@ class V8_EXPORT ArrayBuffer : public Object { @@ -30,7 +30,7 @@ index 18d72f1630ccd5ec54183d653a94c023848049fb..d25b81755a59e523828a967a8864dc17 * Free the memory block of size |length|, pointed to by |data|. * That memory is guaranteed to be previously allocated by |Allocate|. diff --git a/src/api/api.cc b/src/api/api.cc -index c9bda37991502f74c485b42468a677c60c260dc8..9aa0ae27d40644e637fcd61df3ba0377a5b731fd 100644 +index d6f55b58cfb084321efbf6e60da5efaa3be45ae8..0ec463e787d55ce386afcdb9f5016f24e6cfcea4 100644 --- a/src/api/api.cc +++ b/src/api/api.cc @@ -528,6 +528,10 @@ void V8::SetSnapshotDataBlob(StartupData* snapshot_blob) { diff --git a/patches/v8/build_gn.patch b/patches/v8/build_gn.patch index 800accb739a0..44d3a3622c61 100644 --- a/patches/v8/build_gn.patch +++ b/patches/v8/build_gn.patch @@ -9,10 +9,10 @@ necessary for native modules to load. Also, some fixes relating to mksnapshot on ARM. diff --git a/BUILD.gn b/BUILD.gn -index 44089412300d9f97ca15dec591d2ec928fdd6480..65dfa8dab947fc3f1b7dec0d8a7f1fcbdd773254 100644 +index cde17854138d7874dfb90d87ea389ecad1889682..829b3731a658e5fb991d9cb982c9219ab7e51837 100644 --- a/BUILD.gn +++ b/BUILD.gn -@@ -334,7 +334,7 @@ config("internal_config") { +@@ -341,7 +341,7 @@ config("internal_config") { ":v8_header_features", ] @@ -21,7 +21,7 @@ index 44089412300d9f97ca15dec591d2ec928fdd6480..65dfa8dab947fc3f1b7dec0d8a7f1fcb defines += [ "BUILDING_V8_SHARED" ] } } -@@ -4223,7 +4223,7 @@ if (current_toolchain == v8_generator_toolchain) { +@@ -4239,7 +4239,7 @@ if (current_toolchain == v8_generator_toolchain) { "src/interpreter/bytecodes.h", ] @@ -30,7 +30,7 @@ index 44089412300d9f97ca15dec591d2ec928fdd6480..65dfa8dab947fc3f1b7dec0d8a7f1fcb deps = [ ":v8_libbase", -@@ -4256,6 +4256,8 @@ if (current_toolchain == v8_snapshot_toolchain) { +@@ -4272,6 +4272,8 @@ if (current_toolchain == v8_snapshot_toolchain) { configs = [ ":internal_config" ] diff --git a/patches/v8/dcheck.patch b/patches/v8/dcheck.patch index 42f74996c0cc..4ec6a0267117 100644 --- a/patches/v8/dcheck.patch +++ b/patches/v8/dcheck.patch @@ -6,10 +6,10 @@ Subject: dcheck.patch https://github.com/auchenberg/volkswagen diff --git a/src/api/api.cc b/src/api/api.cc -index 9aa0ae27d40644e637fcd61df3ba0377a5b731fd..900f8bb8ff76c578de40f49729396b0a8b6052b9 100644 +index 0ec463e787d55ce386afcdb9f5016f24e6cfcea4..1746a75ea34b2ac1739bca326a1283fa4bf4f0d0 100644 --- a/src/api/api.cc +++ b/src/api/api.cc -@@ -8620,7 +8620,7 @@ void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) { +@@ -8622,7 +8622,7 @@ void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) { } void Isolate::PerformMicrotaskCheckpoint() { @@ -19,10 +19,10 @@ index 9aa0ae27d40644e637fcd61df3ba0377a5b731fd..900f8bb8ff76c578de40f49729396b0a isolate->default_microtask_queue()->PerformCheckpoint(this); } diff --git a/src/heap/heap.cc b/src/heap/heap.cc -index 0a0f56941f6cdceacf943bfb361af052c6f4b723..c9e36bd5c7cc0d59780ad6efa1291ce63f237b67 100644 +index 6099551b36225fbd34474707d0e4fdca783f8368..011cdceaf8dcaecb651af681fd6961ca6778f42d 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc -@@ -5625,9 +5625,9 @@ void Heap::TearDown() { +@@ -5629,9 +5629,9 @@ void Heap::TearDown() { void Heap::AddGCPrologueCallback(v8::Isolate::GCCallbackWithData callback, GCType gc_type, void* data) { DCHECK_NOT_NULL(callback); diff --git a/patches/v8/do_not_export_private_v8_symbols_on_windows.patch b/patches/v8/do_not_export_private_v8_symbols_on_windows.patch index bb8659be6ebd..f7af3218abb4 100644 --- a/patches/v8/do_not_export_private_v8_symbols_on_windows.patch +++ b/patches/v8/do_not_export_private_v8_symbols_on_windows.patch @@ -12,10 +12,10 @@ This patch can be safely removed if, when it is removed, `node.lib` does not contain any standard C++ library exports (e.g. `std::ostringstream`). diff --git a/BUILD.gn b/BUILD.gn -index 9f9a93828bb3ac56f208e582ccb97ca942be8e15..e3a14f4cd19dbad897098fd32c75464e6bca7286 100644 +index 635b9b3cddbd9d5698c7299a576b798e720439a3..5fd4439ae6f7525a935a20078da3af197195e4d4 100644 --- a/BUILD.gn +++ b/BUILD.gn -@@ -334,6 +334,10 @@ config("internal_config") { +@@ -341,6 +341,10 @@ config("internal_config") { ":v8_header_features", ] diff --git a/patches/v8/export_symbols_needed_for_windows_build.patch b/patches/v8/export_symbols_needed_for_windows_build.patch index ce9be1dfdcfc..b18cdd8c51fb 100644 --- a/patches/v8/export_symbols_needed_for_windows_build.patch +++ b/patches/v8/export_symbols_needed_for_windows_build.patch @@ -19,7 +19,7 @@ index a52865c23b37955345a4bfd75e952da472d6b68f..941c546e9a2c2efcea348667ab285b16 explicit inline Relocatable(Isolate* isolate); inline virtual ~Relocatable(); diff --git a/src/objects/ordered-hash-table.h b/src/objects/ordered-hash-table.h -index b587960432caf56601920678686480f2f1dd5abc..3c08eb044115db534eb880b867e0d03802dc9615 100644 +index 5f3c45a110aa48cf7c9c189d0e37e07193f06b75..01bfb2a73dbfb6d5a5d41baea946c783abfd1558 100644 --- a/src/objects/ordered-hash-table.h +++ b/src/objects/ordered-hash-table.h @@ -60,7 +60,7 @@ namespace internal { diff --git a/patches/v8/expose_mksnapshot.patch b/patches/v8/expose_mksnapshot.patch index 2bd565051337..08cb74b7c8e1 100644 --- a/patches/v8/expose_mksnapshot.patch +++ b/patches/v8/expose_mksnapshot.patch @@ -6,10 +6,10 @@ Subject: expose_mksnapshot.patch Needed in order to target mksnapshot for mksnapshot zip. diff --git a/BUILD.gn b/BUILD.gn -index 65dfa8dab947fc3f1b7dec0d8a7f1fcbdd773254..9f9a93828bb3ac56f208e582ccb97ca942be8e15 100644 +index 829b3731a658e5fb991d9cb982c9219ab7e51837..635b9b3cddbd9d5698c7299a576b798e720439a3 100644 --- a/BUILD.gn +++ b/BUILD.gn -@@ -4234,7 +4234,6 @@ if (current_toolchain == v8_generator_toolchain) { +@@ -4250,7 +4250,6 @@ if (current_toolchain == v8_generator_toolchain) { if (current_toolchain == v8_snapshot_toolchain) { v8_executable("mksnapshot") { diff --git a/shell/browser/api/electron_api_browser_window.cc b/shell/browser/api/electron_api_browser_window.cc index 9bcb293e749f..094e4e4ed5d4 100644 --- a/shell/browser/api/electron_api_browser_window.cc +++ b/shell/browser/api/electron_api_browser_window.cc @@ -210,7 +210,7 @@ void BrowserWindow::OnCloseContents() { window_unresponsive_closure_.Cancel(); } -void BrowserWindow::OnRendererResponsive() { +void BrowserWindow::OnRendererResponsive(content::RenderProcessHost*) { window_unresponsive_closure_.Cancel(); Emit("responsive"); } diff --git a/shell/browser/api/electron_api_browser_window.h b/shell/browser/api/electron_api_browser_window.h index 37825d527c97..a3c225fe6fa3 100644 --- a/shell/browser/api/electron_api_browser_window.h +++ b/shell/browser/api/electron_api_browser_window.h @@ -51,10 +51,11 @@ class BrowserWindow : public TopLevelWindow, void DidFirstVisuallyNonEmptyPaint() override; void BeforeUnloadDialogCancelled() override; void OnRendererUnresponsive(content::RenderProcessHost*) override; + void OnRendererResponsive( + content::RenderProcessHost* render_process_host) override; // ExtendedWebContentsObserver: void OnCloseContents() override; - void OnRendererResponsive() override; void OnDraggableRegionsUpdated( const std::vector& regions) override; void OnSetContentBounds(const gfx::Rect& rect) override; diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index 44ec8dbd81e7..69b7efeb8f0f 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -823,25 +823,25 @@ void WebContents::ContentsZoomChange(bool zoom_in) { } void WebContents::EnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options) { + auto* source = content::WebContents::FromRenderFrameHost(requesting_frame); auto* permission_helper = WebContentsPermissionHelper::FromWebContents(source); auto callback = base::BindRepeating(&WebContents::OnEnterFullscreenModeForTab, - base::Unretained(this), source, origin, options); + base::Unretained(this), requesting_frame, options); permission_helper->RequestFullscreenPermission(callback); } void WebContents::OnEnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options, bool allowed) { if (!allowed) return; - CommonWebContentsDelegate::EnterFullscreenModeForTab(source, origin, options); + CommonWebContentsDelegate::EnterFullscreenModeForTab(requesting_frame, + options); Emit("enter-html-full-screen"); } @@ -861,8 +861,6 @@ void WebContents::RendererResponsive( content::WebContents* source, content::RenderWidgetHost* render_widget_host) { Emit("responsive"); - for (ExtendedWebContentsObserver& observer : observers_) - observer.OnRendererResponsive(); } bool WebContents::HandleContextMenu(content::RenderFrameHost* render_frame_host, diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index f24ee5e9b264..c96e67862b71 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -116,7 +116,6 @@ namespace api { class ExtendedWebContentsObserver : public base::CheckedObserver { public: virtual void OnCloseContents() {} - virtual void OnRendererResponsive() {} virtual void OnDraggableRegionsUpdated( const std::vector& regions) {} virtual void OnSetContentBounds(const gfx::Rect& rect) {} @@ -340,8 +339,7 @@ class WebContents : public gin_helper::TrackableObject, // Callback triggered on permission response. void OnEnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options, bool allowed); @@ -471,8 +469,7 @@ class WebContents : public gin_helper::TrackableObject, const content::NativeWebKeyboardEvent& event) override; void ContentsZoomChange(bool zoom_in) override; void EnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options) override; void ExitFullscreenModeForTab(content::WebContents* source) override; void RendererUnresponsive( diff --git a/shell/browser/common_web_contents_delegate.cc b/shell/browser/common_web_contents_delegate.cc index a50c037bdfc3..8f7e66c8eaf9 100644 --- a/shell/browser/common_web_contents_delegate.cc +++ b/shell/browser/common_web_contents_delegate.cc @@ -350,11 +350,11 @@ void CommonWebContentsDelegate::EnumerateDirectory( } void CommonWebContentsDelegate::EnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options) { if (!owner_window_) return; + auto* source = content::WebContents::FromRenderFrameHost(requesting_frame); if (IsFullscreenForTabOrPending(source)) { DCHECK_EQ(fullscreen_frame_, source->GetFocusedFrame()); return; diff --git a/shell/browser/common_web_contents_delegate.h b/shell/browser/common_web_contents_delegate.h index 456e86274e18..2169b83f9eab 100644 --- a/shell/browser/common_web_contents_delegate.h +++ b/shell/browser/common_web_contents_delegate.h @@ -90,8 +90,7 @@ class CommonWebContentsDelegate : public content::WebContentsDelegate, std::unique_ptr listener, const base::FilePath& path) override; void EnterFullscreenModeForTab( - content::WebContents* source, - const GURL& origin, + content::RenderFrameHost* requesting_frame, const blink::mojom::FullscreenOptions& options) override; void ExitFullscreenModeForTab(content::WebContents* source) override; bool IsFullscreenForTabOrPending(const content::WebContents* source) override; diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index 318aad4340ba..a871b096a197 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -956,9 +956,9 @@ void NativeWindowViews::SetIgnoreMouseEvents(bool ignore, bool forward) { #elif defined(USE_X11) if (ignore) { XRectangle r = {0, 0, 1, 1}; - XShapeCombineRectangles( - gfx::GetXDisplay(), GetAcceleratedWidget(), ShapeInput, 0, 0, &r, 1, - ShapeSet, static_cast(x11::XProto::ClipOrdering::YXBanded)); + XShapeCombineRectangles(gfx::GetXDisplay(), GetAcceleratedWidget(), + ShapeInput, 0, 0, &r, 1, ShapeSet, + static_cast(x11::ClipOrdering::YXBanded)); } else { XShapeCombineMask(gfx::GetXDisplay(), GetAcceleratedWidget(), ShapeInput, 0, 0, x11::None, ShapeSet); diff --git a/shell/browser/net/system_network_context_manager.cc b/shell/browser/net/system_network_context_manager.cc index 054a6e9f4e1e..d9c85383c026 100644 --- a/shell/browser/net/system_network_context_manager.cc +++ b/shell/browser/net/system_network_context_manager.cc @@ -208,8 +208,6 @@ void SystemNetworkContextManager::OnNetworkServiceCreated( network_service->SetUpHttpAuth(CreateHttpAuthStaticParams()); network_service->ConfigureHttpAuthPrefs(CreateHttpAuthDynamicParams()); - // The system NetworkContext must be created first, since it sets - // |primary_network_context| to true. network_context_.reset(); network_service->CreateNetworkContext( network_context_.BindNewPipeAndPassReceiver(), @@ -229,8 +227,6 @@ SystemNetworkContextManager::CreateNetworkContextParams() { network_context_params->http_cache_enabled = false; - network_context_params->primary_network_context = true; - proxy_config_monitor_.AddToNetworkContextParams(network_context_params.get()); return network_context_params; diff --git a/shell/browser/printing/print_preview_message_handler.cc b/shell/browser/printing/print_preview_message_handler.cc index 48ec8a5f911e..c83a251d38fc 100644 --- a/shell/browser/printing/print_preview_message_handler.cc +++ b/shell/browser/printing/print_preview_message_handler.cc @@ -79,7 +79,7 @@ void PrintPreviewMessageHandler::OnMetafileReadyForPrinting( // Always try to stop the worker. StopWorker(params.document_cookie); - const PrintHostMsg_DidPrintContent_Params& content = params.content; + const printing::mojom::DidPrintContentParams& content = params.content; if (!content.metafile_data_region.IsValid() || params.expected_pages_count <= 0) { RejectPromise(ids.request_id); diff --git a/shell/browser/ui/x/x_window_utils.cc b/shell/browser/ui/x/x_window_utils.cc index 0c99fd27a06e..e71e65697fd6 100644 --- a/shell/browser/ui/x/x_window_utils.cc +++ b/shell/browser/ui/x/x_window_utils.cc @@ -99,8 +99,7 @@ void MoveWindowAbove(::Window xwindow, ::Window other_xwindow) { xclient.xclient.format = 32; xclient.xclient.data.l[0] = 2; xclient.xclient.data.l[1] = other_xwindow; - xclient.xclient.data.l[2] = - static_cast(x11::Connection::StackMode::Above); + xclient.xclient.data.l[2] = static_cast(x11::StackMode::Above); xclient.xclient.data.l[3] = 0; xclient.xclient.data.l[4] = 0; diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index c4c8b9bd3ce4..de410580ec1a 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai'; +import * as childProcess from 'child_process'; import * as path from 'path'; import * as fs from 'fs'; import * as os from 'os'; @@ -55,6 +56,12 @@ describe('BrowserWindow module', () => { w.destroy(); }).not.to.throw(); }); + + ifit(process.platform === 'linux')('does not crash when setting large window icons', async () => { + const appPath = path.join(__dirname, 'spec-main', 'fixtures', 'apps', 'xwindow-icon'); + const appProcess = childProcess.spawn(process.execPath, [appPath]); + await new Promise((resolve) => { appProcess.once('exit', resolve); }); + }); }); describe('garbage collection', () => { diff --git a/spec-main/fixtures/apps/xwindow-icon/icon.png b/spec-main/fixtures/apps/xwindow-icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc527dda8ae2c00eec7168bfd471ab412d4f8f9e GIT binary patch literal 73801 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 Nq?5Xal5 z1>SU`{4}dWK^Cx90X==~bcw{Iaj1l+eeZ)do^ zdj-IQF2~+&ns8V1AgB;C!j#Abg)a?*_(gC{L@>k*Q$YL){K_wk5nj5y&JzdC5;qCc~-P9N7K8 z6vYlORv+~)a_XTy*okq7C@)Iy#N4;G&V$MnFuq|PLtY| zr%k!UT(+RJ=05k-ySOyrtGxHyu&V>jcTs>4d>ViW8&R-IH`m5OR}HVEe&R=5H=z%{ zh4lW(B+48l!tGLkiHVTj#~xJwfqP7Ob3qaX0tdup3q*liP*SW7|FvU=%E(Jd3V@rI zrE&X55hUGpgY;1J^kl+cC--_`sWjNcr&N74M8`^^aE3kzqS~GXu=F_l(-|u8QO^cR za6x4DiHeOo+bpxe>pT_jn{9Yi2waHpc#`dr13gy0zUC9pvb^@yoc)Bl5VSrJlDUH{IlcH}R(+HrPxq$^fN6~1slWv&fh2C3d1B<-3{K!5$3PXrjjgbW)vSWn(a z33|Cg20pyGdOz(!;XY;TC42JUw-tOWemIsM(*qD|q`LX@eaROt7uSmpz-1zal*ZJC z4EI_kGw(MyzC7!HyA3VRm^SbLE%z)MlD_Y^=|pFOG-%&ioRP;)$NChAsLn%0K+P6jL$GE+i11*srb1F(KW#Tif06{8`e%){r$eo6G~o)~GC zWX$`7f1{A}{bE{sc8?5f)qjIR?<2)8o5PNUr5vX$YNS+@n7FmOAgZZiQ|LY5L7Aw} zGVjsR@Ccu3H%|LBm6A>PH z%9*Sxiu_4_U07;u=Cdw57m!lvmikQwcJR~~!;uwQD*x7YTGoDP70PE%t<^k?e1(OkJ#8SLc+AZe> zc$P^&uLHdC-NPr{x6yu=(`naa5V<% zCO;`LA2q<18QAGnS=$Zs25aXl75@7Fkb4{cTFGZ&N1OgA8pH%2&^dnq^Du!#;gwK& z`sghVDPlky!(&U#juHsjP;Y)NIBuTWs7J_^?bA$(fY#lor*VLR?^S&^|5H)hSAQ=R zKlqe8%H+&q|GTuK_vOT3WNNALffm?INI*;L0s&)kK#w!b;6*L1b1`z64G~UYH~aS@@oy_U6;D;PaoXT9@+{ji0cq_5smy?9TE1{(2^u3VS))9 z5H+s_ykxXC{6FWBmq3KSc>Qk^5uRKQjYknCVVc=$!_UmTu$Cya_3>HsQV?v8Ws$ba z$KBnwDJ%u&SEZ#&6x$F~=D{o5I(>RD04r8aH2x`(b*w#h?vWf?kAm^d3%Q>|9LlqP z^VT(&O`Z_C^@&f*3Ok4{>3yh10lkc6*&q@ZQC!grDLsNa31~Xl3?~-EhVcV#lt${E z%B$$9N0j6^y%?)u_0ti<3r%e5?4igyqDXk$d1c_T76se*9vJ46EtAl5u`cV$y#gaBOrEWdy& zA?^3VfNaf?85-K{eJb+T!#h)98!-E7n!HJZH+t6RBE56%?nn0DDcej4m_C3BK5I}ZTst|pGL z$xxo#yEe`=dfNYeD)|a2=R$csc9?>ci1GnOvD4)(h0Ci{jn0;>L*eu_S!FGUrzZ*@ z85=?zAV)xZ3+apN>rj24^lc9fa8M-V5zIX3I)N%HlXPRnlx|JO13(FF>-aBR*~@&O zKMn{8q7I_YaAi!T98Cdi>&_$C4k$W@vx==Y?=5@&wGSR)RnhWT$3SNdSD5H5L5tYm zw}E1FYiG8;z$Fu#Mbq**NjOhF6&}fdj0{N$XoDa$fU64U{CA@6vMwHli`RtdtBYEo z!%bd0668^8iKX$T7Q?Y__t?8$*5=B6&_w|d7Kn{bf(WQ z0>6Qc(_@E+c_JOLmbpXt=03k3U|$9U`p5V03rOs(|=31x=Y!wR20c zg}?xSI@(#n-J9v@6y~F`FHgeB75kb#AbYdaa2J1x~l!Y7H? zUS%-&uq38MDL`%b-(bG(C1`*#k~9HM z&~uz62fO@0MM}T#8p9S94d};jJ$9_8If2d9n$8iBP<)>!er+ow_(*cMTj;P7z9`p) znHO*fOLN8cy{ryPbN{_q&{ue6m_vZ|IY#h;f!pcXNN)QN9N=4;8&f%E=Vpwdc{t(e zjBdQ)vz~7FC?cR%BLsf+cPl(JeLj^jLhE$dE&J~x1-yWNF>Uq8YqZk2u!I^y7be5! zlBL}g;ACkVLl_yDn!~vgq)=P&0p#$QKyLl6@Wc;9Y9}eqx04=N85|9n>-7Jn!$|lC zmK8Px|DveO1>WHTS)s4mD$ZrqndbWCKr>w42(_5}uiq9Z*0Ol!DZKdNR`rLpGh8oh z92`u&7XJb9&rPQ0XvCOZz2-qWz%ge2Ajb(crvBABM~*8{J#4G|lEP^XV5HZLD5(&_ zZ9Va#`n*GV5B9jmpFf!N-a#AQ`?T;MG|y8!BG~u4KdbdBGdHZtY!=6$dLy@p4Osaf z4hiz2wzNE5Ot1a#gd+Enz^6TEw7V;u-?N}YaznV}wHbBX5< ztYBw6gz$56(=P(>CZ#Cu=;*ash4t$5-ePB~tX!GnIb0(K7oqa4{UHpB@MnI$UHF=}URrpYv!W1J@s@ix7<0 z{^>ot%4b>zlg>#>hQvv2N`Gbbyy|{wk=rhcPs~b?O(vI7*Gg9Ow5F-B7z2=&2m)B3 zH~9hzM?`oYzA#KZ_k;dmu+ClDU%+oRJ9MWL(@9Wy4B}8s$j*J2f8fFLT{O-uG~GBz zHE`uO^QThOWXD#*?9rhuH3U@X37w;J{Q+a$(`mua?p^hFPOhyx#&OVre5& zjx9qkc1iz)*PN-6QAA}AiO^zgZWrzNJ0ZPyK9w@Rqc5J5Q|Tmho0mDOJ}T#XcF}G# z!C4&^??m8?4Y}#&uLGkn9A4n|lO=N<`$^%ubnWhuR7D3FRh1Ufj%_VMV6P{)?@sRK zmz_};r}Z$;_Cbe3&&#yO8M&nqOeS-5#weKWTttkk^m{XRBZ z(-LPx{+p}sps<)z{kr2JZmZ+q+)5MsF1tW8?Q-pb__*LPCfl_SUI$4VbSKcA>6#D15(S=y`e7(981gL-DeeLrFuGLn%W`%zzFY zCnuw@4O%Fyx1a4Ev$V?Bn_>pCfsbyML_FJJP>sy&A<95Fye6m9xq=1)w^a+)T;&7t zM#@CMYoluAX!U2J^XEsRo#O`i%Shl3HQfr$7m8Qigm?O&r>7lY^*KP{!TxPP$B-2J z=vh<5z;3_a)txFWJ&q&mCw-e z54IH=;n%BIGKfGtPY@Y6hNt9bSknXc>}{JzUcF{MbI%^oQaY;~jM>-vTWF;ZA9n5^ ziWACf8`6UnF@C8X+`J2NqxS2~q?eD8&37$Mtz*F^sTQ<%FF;rs6y5?`IBhitmqSff zu4s=P(MnxaIi;cv+4~W9zN&hd>^CCuY5v!&C0+#kV+xPfV3S9w@LqsMnzMv;2O}h9 zQfqvq9+hLzxXt+y*p(cB!YYfSasK1X@`7>~PNF$j*3)H+AX zBUiGv%Qm^d@XoI0hkbadBm29qlbxc$H84GcA^J@S^* z1v6hUdP`CohUy#94C)s;>EUT-Jh}Up@441>tHZUN1;*ooxODvY?*5v%(tlf?D*@*o z%53!fMes%1#&>+pu^t9(#IL}VSaSGA>8w>W8<0R3eg{(vS}6Ra5HS#}dpVb}-am!^ zwG)`4B3MDUk~M`#bziD$ci4VQ zzOXv`YWLh)QC@RC_vQ<&k1cPNbkn}{X59$ZL1+_3m7(#u+&1SPo<6SB2V3Rvlbr*^ z;4lWw2P(cl2UAUEMBww4Y0cVS2ZfU&i!a2~J`cXy{qb(HKpUYSXGV7D8t86ZIzjho zbvcP%@37!2<5Zq6=?-IWkbl@PsO?TBz2iGvnE%GAOndjAWPc@v7h6iwY`}-CKIY+^ z8myk*jC&~=aQk{5RE)5o0197vmk2n9*hJNi=Cy`6I%_4WDqU@|e{$k~d9%lGO&Lke ze}PbwzKo0aWh`O4V5@_0jXj=u zo2TZ1%_prU1NoO9K;P#PD2l;F<9qx@i2*i1>tSV&Oux#l$2~n=n_bJ_50YzrZ+g)v zqwfUGLYoO&$oTJ%hkzsICn!;XgfYPf%7$xS6&(uu0FECRBU7|Iv2s`jTT`nhzBbQDbBs zgZ(mLp<{-_Ka5wbVP>~!E15ZWga4e~9cS8h;fbNYB^J;C*PABLAw0>{z^&*O{Kl4V zatCheKy`h132S2TT**VTbvW~&KcJxLq>{_S`%cgdXvblDu6O@r5^#5w!5UQB zJGz^Tb58c^#4*imQeN+)UVYEQi+!SI0J_1QUH{(=;l+!`n>#hOo!`}8#u!YfpZmx0 zx%8;Bf}^?H>F}RrHG+G~Zd+xB@lsy8%QkTXScd|ieMtG0N-aUJ7%eQ}7_vnW>bM$*k%a4<~uDxl3 z2cXi2X~!g^uFXGZDr%xE-_t-XiM`?D@}j}5sklY-@6rXF1?>|e;M;yV`_ZWrdJvO( z6{3b>sF2&X_&0*@W;(h{gB*tUXSrq?iG_bW88GhhyZfhZ@w=E-_$@2^<%rLG@8{ba zgzS)%F6i~Ws72qYzaq39eYn>hQkK8{1HM{;MDMX&Y8$*vI`;(nP!$yR7H=>b=wc0Q zlUS5IbNp7PWCv74T$G<^MZYaEsM#s7w#qhpZR|Rw&|q-iVejyURf^m6<~c?trQZ?G zjwsjffAuHC(~eY}M-P3tl(hbIFXmQrjRt+8>1oLT_y;IlC;*?Xd)w}PAXSlnz7!Rr zKA-+iq0=Gg!7-I3^Lfg0qZV0?iZY2rXykC(W{t~S*YvLo=YMRSR~@l@T+s4R%*DjK z^75^qThgkO7fTwm|H=@da1CnEOJGA&&|v5q)UJY_8go_4eev2dMCuGs$AJk zH+zqtIjOl1a7qd7fh=$ATFRp;$`%sSC$Bty_1E9#-TKPN(ZB7KV5agwf3s%_Z~vCE z`C)JXe;tJzfpsYnN%P8+rHr>Sv2P~oT^?cP${!|~9anYJ#_bd37ijX^ml{p*HqJg6 z{*v=w-cQBFpx)z>gZtYaPe!O680j>D^+!9fuWn9I$;k%_d)Yt?CYu~E zqUL0&o`^{+?E7~mz!@b_`*NA@h~jXWEcqpx_We>hrB5Enu^8W)*JyXvRrLq|?`)I> z>rtU_Xj}k(IB<`7oar2lYch7@xT&qHuln$L%S9@om4g=;VIuKEHoW#n4=1S*llS1P zDAzf$U+s{hQ`P|18GyUJ*0Cc)x@I$kxFgjnAa8U=?WK;C^EwXNo9UD7P0rTVQkkqC zjgLDMERxPqqAL|JJa(%3veB?lQ@s@WzhNdoW=%N?i}hef;a;JnhTMByZHjEWBi?D= z;q>>j^LI zp~A@*uf6~Mhtelg@Zp|rSe%>r-PMC16-0KNqDHAuTW>?cn0j>v6wYsY^ozx&G0FeTPMl0Adq z9p;rKeU_cH2i^9X*1rcdY2|cg`#QrVf*lrtXx!h-tvM^lfK0dVR06%OD9Mu;outpa zh5uT7%ismNBfj(BQ#EFB8gP)H->XSq%roK`y#EDM6MB;`eanL55QSYlx&FWX=jXdL zZ_mnA;kEtwpY70R%I`{J&^1$5UK~){B`Pqs`eq1v0(&&_t6M*9L`4Y?ndRO!%~M=1 z-n1g5F8||L`fc|AP9#oBTH!<~hSuU7a^be^z{IOZrgCe?8*d}ETT5<=h8!d;6qmc& zO=;h$+`Evi@IK|6SM`Uc3rU=ZM#}ILuP2TcYR`XVE7`?por2@)t@LVysu+LS=c0qo_^-1l3Pzo@ z)2Oq+ipD)Ftmt?xtuj@;z){uOx4-LG5%(}b)L0i=Bji#JtpC0LX2spQ4MV;dt?Zp4 zmpN8^u~hv!6NpYJzv*dN#|B1({oa+kp&oA!FaH&s;{Tt?>jFBqq&FvAtXx~qkHfDg zlctt(aWP)u@l5(E82ff$1olCXT{rklGew7gl#{OuJ?-tFogZQuA3wO)Uc7j@=OZq; zo}uK`|JElmO2cK3KgP-*pM9qfGw_dJvzFPYJXcKV2esvC}*{?&bRju)-?ET>beTzOR%%I6s~9 zaME7X(j42hnnY?bA_$hoHs$*)FJ3pK_|PO0G>}m0IJZgnP&Rq>ujzMza*m#C{8=x) z#elgpV2pn#ng}e=0>X@!`B@kb5)alsZab5{DayZ@9Fdxw^yB)8D++p$B0~^6z95-j z6(vorZ7{(gE@ooWHbRwJq*vbE8~NXhCEZM#^YIV&4B?m;hGGXP0U4-oc%5q4b8s2M zxhiE+>v{c(qy>f;KP*w*in&&~v2bR^L+Jlw>MH}HdcME!(nt!@jevBwbchlPlF}jq z(jgtYDgqMHEhQ4t2uOz#N`s_ygLF5$&+Pa2fAPH8m$UcI%sJ;1=g#bXi1kQHE8~wo zqxn2-YuA}cLUVyT8he-ByWj*}xzVgdROahn1F-F7)EpZo-L6a4NW>4B^8h%T9;Klc zewE}ziE=L&otQBNY3E$LF)s4@qt)48i`N%~J2GyMJET1}w6Z_a56nD0o7y-34~&u2 zVTE#7m*pM2=}kXLlABle+LnsBoWA8gE&n_nvYg>5u3zIIPmIa?VIAh1e@jK2Nv>?# zws2V&b3>yIm-VT;!S9+JPYehHYVE}W`Ooc@hTZih%nT=CLzD?zhp|QU_}RSY=352~ zsJ=AJ!I}SX+GaIS$oh|??x<3WSF7Vh(5#%iK;PLIDi&gmOYg7KgcfW+qSv^=7zY%a zyW|CWvxE@68_gkwazB&fc)&UK74paPbV?43RN`A&3x4SlGjVxM5}7pe?RRRZ8(-Hr zXJt*C!Z`{;hT;*?!R$6f#V;Y(3?cL+UIG#jEi)r(r83qJSzd1CrO8h=dF)ax_Bp?p zPQ%1D^EZ)$QjlF7Wi|NhFRP!<(P3Jo*`G_xJd-i49sC%e%*hf}U({63AsRF43 zO)U_5;3J|ON?4onncQd{NfgPo3ji^Hz-F`qM>>s4b?zZZYw%)oTn1XKH)5mkG_@Nzr*5Z7*m- z-m_<}c6m_t^E@yhSS8d;@J%$dV36F}Ah4E^2}5X@=R&_!)0oa%LCMuV!c8w#d-5SH zMRb#-4(LB0fQ(=y1jXP+xJPMm7whMg&SPjijJIVr9bNUPT6;IBYU#=wh{ETUW32|X-&6`?i z1(xL=fjKep#eK>PU>VtvNa5{yd8;*6GdYR-AF~ooNH#zZNu_2e>&1X@s6ykW2cLE}k%Q5$(#jQf3Qqs;f0v#AMrufx2)Z}e+_o8afDAXy|l z;Y|QCclMvWDl{Rz?|qiGAM{_2B(leYp1#X{3XdbQ^i~**8%~p-DY-f>mX5xTuNtW` z_9nYAPvOkWYF_!{!$HFhz<8Y9Tuw2ecwI|AmakE!J|!yNplm%Y%{1cY?)O<%R#aB3 zu6;FfMn*P(x4D3nls@s$g9xU8`3?)ZJ{N>sLpp6TYy6KeV-He4U$6LTF*%;zoQIm$ zSsd)q-%jTMwX@i*yjn&lu%m>XRYp3|!AU#@7yfK<41Vzdb7Ex0Shh?q#;<9R^u+*v zwEFP1he*%`-EoGMf{|vI6cY|~ZFfM4NQSlT=z{{V_~F^Fow@5aATo%;>u96{e^8)W z05!WqVH^EUwJ`IAw8)qFlr)M30nantJ z)6F{cI?Ous`>hd!#7j?XJ79iaLaxGo@7Gl8<$Te8c#vUz^dwbldmoX>%apbg38LS+ zZM6)tPWh0+W8sP+vHvv0OfH{q(O|#u5wFf1wU;xREbC#Crp7gq60T_OMe3tS(e^d__3*)a7Avag6-z!V!1IkzS%j`EST%$`kSh$(RIZ4TL_!uCXY-DP8abg^eF z?8zVaoI7UP(0aasgkxkj1XE4L>VZa?Rt70;Zxw%}DdvS&L^*1$mN@9HvaBEBkYfD) zmvJzt*>25}ll#v9c)EEqt|`(pKFb2PQS83pR=-mkKQX9O{I&F^i&EI_Viyd!k*P{9 zDa2ErTRh@S7mr&FkpkC2ubxv=(>oj(zc~Jx*mL!0U|PbDVJ&&*@bA2d+of7;+(;4< zN+=ccVHKF|{$)CF32vP0)*-!x4q{f`>_km7V;Knf!H3(&` zq=6nyJ_ru{@XEST9T_~C>0f0PD`?~J>;eIpaHgkVnZVWM-trw)C5-zxR=VL8THjn$^M;~W5cofv!Zwz~( z1)Q^~Z!K=~H&bD^`CDCPRQ)3QkN@6xmnZ2(jECB7 zK!)me5}ac=udPvf{5_`t%6P9*aATwj6y|1|rm^ObrmtyGTk|ewm;`If;6L-h zg7ASxf3I|I1tIg?XVx}U%uMqvC@3HUz6a8iealNl{Sr}-|LBss(dcJrlKXsTya zxvpG!q|)z#`#Uz>VNRZzqqRZtHQjMj*rS1*q{8c{+VJ-MKHoxTdt{!nbMKRD*S}T5 zHZC*H*(gK6Q?fw$itf!o3vS{rXu++uSKjn9L${QLadY<@Anpvg-{w1ecxhcSd@LdU z>eAnz|E=*IuUcyXgf_EmYkOX7ASnHDupfEmgTMDUtumzCe?p#0FMBXo#Fzq{H!pun zVEjq*CIy+dNmTeC^*}@g)an)6UPQq)X4u1?o0(?Hrg^{rln4;2`}-?1w|FEZNlEYA zeX=z1TA;c76t5STvmX2hLwXF&AhM#`pXLY0M!_ zyQelE{P}z=Kn3C36dw{lNTeG8A5KjT^#_d|tDLgQMm1Yy{i=R{>6;zdp~O zf4(s}WwsdBwZ47gz-Z}CElrp=3DrzfErr=Bm0is^wBgP;{A`?Y=$Kwf8>U4=$ax^_ z!W+H>cYLv^c=`epSPWLb4yug#B3GM&R^ht#kKe4*d(8fBuK+Z;MwJPsU{I{IdN$UQ z%kk6!O2hl`7^PDNLnn?@UXV2QKVfP2Ld+~OLRWQ(v~(M1KUMlEJJ3bd^pnG(cXwp~ zMFISeELNf9Q59Me?LE5L9h>O=E7d_)$@XMINCGq5={&d8wG z8#zek@yE@$;2+XlzpMmqqp_hmo%ri=3K!3E2A3iZ$W;ItMFtd6(;a}>Tm6wQ?1DvX zL-o^W0XixD%WA~m@ghSi4HflXwG+6Bv&snBbvPA+KXJ9A0IZE1GnBhE`TNeHXbn#G zhu@=3TDxKkHvpO#f^VfjxzkpLNGC|D z!)fpReCKjth|#w!D0`wJIbmMSV_IGjEF7y0ySE=2zvbcpTsxM9$t>`vCKINhp9{b` zLXDA-kk0vi2u>z1W7(|S`G|Zt0MLPh(mrnAZYx0-;%`fuS1<9Q%nTW|3t3UVS_bqZ zw$+UefUwlR3&~<49LzQi8&MX*e@I{me=-FSxq-VE;NINDwe)G^^t{{fHW3lp)v8k6 zTlmmLJuUkB664~Ex=nSs%DOrajNQd=R(g&6+G!vRt_^6O-fbG0Z^mgVpMu(CVQn2S zC>L_L1(|+(`;#0l;h~I)<|vMpjW?4t!=k*yg77P#BvD*vL{?!Sp1C;d2F()^e#{&1 zfw`8RA!8g`X)&M&-~vaeQ0CT<2=ov?qF2UtEd&SD%Ri2>(?Gurxw-;DI3>uUa8O5+ zw7~@#AqQ~P_mUeQn`I9`qAU~sV769oBgSt5Ty|Xqp!^9nHud_$9$Ck68=N>{<8H$t zvtV~1NO7qV(U##vT{Bn#nLY#`rk+2LC!s~sW?~UkdTf5NMrEOE3wDsCN9!Rq%*O?g z_5Yv~H24Tg#6*Muyn8!#U}o0F$p$TyG%fA^kz{_VX`*YNLTWkMv?`pEt)@kQklEK? z4RpWQB`Fkvv{dp|_CW2kGm-+q16f`}2pz;p5e@c+;TWevG{h{(#`5Al4IK^Mhlgb7 z*m2y0Yuh#DY%R{SsrQ+-b_%kzMS8wuW#$Yq7h{0jU0OE%R{+5LDh7uBvNmvl2Nlu6 zHVpgm+WaCRQD?~2Qw)gBMHo=D4rm?z@@kZT!_itH=D!hp z&<6gL=VLIBrxsr$C2bChM`;lpZ?xi$P?sL|I@yL#!4w*u0~6<|BGez~I;=uiA?%|zSeEb9aiMYVueNVN zI?Yad1c`yGNA4_;*w|ZJ?&iB|QI;J>zNsj@qdWev1z*sA*{eMma)HAYt2wuw&l_M0 zwTgp0t@kJ?DbPtO5|Xh{h8AY=6uS52BQe0j=0Yz;I#f8;8ALV6(Y)$EEB%`tgOu&p zuMX^kSSc-DRp7NjY9a?Ri`7ONOaVw;J$s?PJB?4lL#jx7v?e&T^hQEWowRq+h3@Eo zp7r$zJ1?u0ZThn`YHC57aE^#EZ}_EdN8U*o$jDU>+T%?Y5 z2o4Sq^oJeaOf|ib=pEa8e*tdU#OO0J*nUxSZEfePE_UAp&43M*RJsThEkX(m-oPta9MI_&do8V(o)>euI`A|+nDC~}jW>yo{ zLJd39BcC6Q81+tg02vm%RRV()%OCgY;VtM`PEw!Ipy)VA!rMct#()^%5a=Cq8!>hx zcuTM^Hm3t9t>=7Qe$;mXg!`4P{9C7$WD~o zv-0rDxc4XHs4*AhZnjPXjS9lrM4&?8wMIRHi0p;%nR{a6&b|((QTco`N*_U~2^gz3 zn;FZRuShu$lcM<#Xe>zC%B4rpZ1p6}kC6R2{95xAVjVe@FX_ZW;25LZ z=x;e)sqY)#mo5&KzmLz8Xn@_@Ii6cEI+1}-1QFVdHD+{pKJ1>mAKz=tjGSTfv$$@q-v8?K5IN7mcLbYZXL1f=nDqse1)F)6Uv z4Yn_aTv^)am>3dZ*b{h&C)n@1isfgjmjdle??CmL#TKo|cb=c1HavxNO^k;`QN4AR z32WFKrKaWGZ-wP*8g5eX2tQI(NjOWG;#Dl4KN|+&T6P=CauatbzMcc{R{}jbD}EpG zA@NMCg-%7pw?|fYbq|SY^L*c+x%Tz*?V6h`oh@2X;;=gce7^mzEC_m&$tr76^y2`7 z$my~QT!F-$cR}UuwB89rXhIbSYzXa8k=jwbD1tAm-$$%(OYP@<9c@fP!`AUWS0Ie* z1J%bZ3L1ShJS5b!X9%|HmvMDin5M&lG&y8{)XoOLspug|1dT&*7d8+s|7Mq?M3QuZ zj-0DW(Iybu0TOGlf!MWVgMGnB6(paU8J+TTNYp&vh#jAzt6FvLRF)t)_F{8yVwwgA^i z%D3Lf1mJAek!7M0 z#_~CeC|5N$_b=0p0yb9{C~|z|K3T>**v!(h@G%N{$Y{Q$9OXfp?U)3hCLUdx?J`F1 z{Ds2ByUAb*hp#mxwT^v!v#)-WE@XJLhJlv4b!k`~FKDCa*;CUs_m2l7fvxU$uRebn zQW#_cay=~vOlBpHZb;N1`5gqSmwy^@gUZNcRA~+@bW`|3eb!_D%tRS&cM)>e8R%nZ z59!~GSAi`0wMH0Pxzs9KwNC*`eLuRGmEpqjRoJYvhI8G}@}41*^mO+LJbdWky%U4% zy}}RZGE6OuWps6*82jmO_!iazoD0DDYsOLF(b<<0LiIt#M=-=V2_%VEkp?!eFuO}D zV-&%0P*Brhs9?QqhH)_ixe>_PEXs&*0IdfCvsR^H`)pvleYr-C{I}g`Ae~ni{>Au^ zBvjGG1g4wtgNDUtwPlQv`N=QWERJYoV_f+q(!i?y&E0QvA))|Eq4AmnwnALIa>Bg# ze~C#LV%1H1vIe#B+$=J;g(CgVZe~rRI;5bXnYH#`iSofUoZF8}#YmSPQi5bmEso{m zgtAS3K;vEtH36S8d{2sMl}2I|+%G_d+GV2s1w(jVfPqRZLysi*KtqW7??2Wk039(- z#`j&@fa60ejum48{^c_S_-(9aJ=4h(G-;p42 zj=`2?Mk0T9{~GJ&IDA6VbfmR@7S$siQ6$qQM&AO@)Ea;~6g@1DCT zcZ~rC!n9l;bgY(urQRx`0gUsZr!1bJjIfwX0ZtUbZ#TytrZ&*;r%_7uAc)5RWF^d2 zB3GTrw5xEtKceGl6A)t4KSl=9|I3mKk!B3L$CH2$3k8aCA$lyMBPr1H2qoI`Ee z8TvifA;7U2!7n4$xxAs7r~VNlzmiH{f`15pd}o#9d2>j!N+}UHD~Hy9;4Bn!f9%sr z#bI2y3r)TLmv=eGGANVt-^5h|31kh<%>Zr8q4tQONz~o}z|Dpc@1Ts^kE9CpBm@M3 z;SLtlnDSK6m57v-n*Bk)34eKF4&Pj*AyEHJve%%?k7&eYcPsu*X3mf$z&Ay_CCR*YQkcvX;gD}X8UcUGk=D3;}t!Y3Gx@`P{?%NunOHb3OS-;^6 zNSNNh5037Q`maV{?n~9nH7H(SgOdMU!c))T~bavtYp8bHSKl-HtV?Wn(fJh@LByED7|w75N0x{uc@k%>%%6xLxt%a8Vl7 zZzojnVQ2;D+S4?@hxMK#43G^XCX8(N7)C3?hytL*>|1rgz~ zzuPxZK5Rvbqn;~;-F?jU#`RO_1?R1JEd>Eip~B(m1l*N!u6;U3U}F1pqpvy_0YLh)j* zmG0>+x%-Z3wXij3ZmQuAe`&{X+dv~M7s|9?-8&n+lX_V@?VKn4A($i=TNK<={u8El zIq^F5MUpH%K-9rDI~)0y83wR3XU!d?um( zkPnAx0;3Jxw~Hj~MS-sxK7Q(-3NHwarT}I$70+1!8%T}|Ct?Y<-N3Bo5dtDY^6oD_ z0{@MmCpc*;?A1k`=kl$a7N~oWCB5Yds3y*s;2!w!?sq7ZWZQ;l7wo5Pe%W8U!p@0H z%uoT@CJLFqYUdJ_e|SE{%%6k)oNiG?1yHbPXz)?^(MP^7yS6F$u-#dJ!|2$$6#5`e@c#4__A>4p;B}Q2A4Z!wY z$l?V@4EqTq%^IfeL{y*~Lk3A>a@RD?J$_5vN6WF>fXM4Q5rF;~uUT_NY&=LGZm?>l zw}^DZdf#CtJyEdz8^3)fYt`!wKF@eK=t;4#uc0$# z&R<`7kG|ox_7^<+I~sy2pQ$6?hlPh*ZJXs*{_^UaY&9$$Bv+-ve*+ispe^L-pXo&hGmB{*iH@kA#uiht&W=0zz6=`J6=)UyEh z%Wux}gI6v{E)G5ufu;23wb6R=w}BH3sB<;tQ&h27A*MF@{kFn|lxp39hjvOpcI^z+ zm1ZVRNSb|gcuwwu;uNwOzV-KzII7X4F5YQU;Imzy-r}NJ{C7y{_l(n(zD2Uj@#dh>{SU#%;@Stvr)Mx? zaC;TQ&vC`4wo36LwiADm(YR2!A_Jn)X#?V%hBCiS;q15NK3SdPep6QH#7d4KfE=4= zXjgmcXDNh5@?6fazEXuF;@N7Wb+3Fic3aKQfonXL`}}j-fwEnquYMR!-1dGF!I>(o z_H~4n5B2w`9xqy}RG$~`N6=P%$lP=N9#mGP4ze8N!}J@}cbsAfX-;szZM|p`)`k5* zynfA&jQnlErxu~zG=S$Uv`b?dv{(cO4bvW$eUm$Wm! z|L)D5j>isd+;L1HI=g~)$qPk2L>Ysz9*ET&cOv)djVDnzv(IW#^wpThB;gv?LTNX!BViF&^Y1ZB%tzz{ogGo=QtuK%VmE+h57W0NXLpK=-m-t^DAAu7u-NhN3f z2Bx-LjFxGZJnKbB^9nngTxrx~z~Scu`R!Ztr`rRv7uQ4xcJ61I z7Ona{GQs(Zrs_N+^2$opoIHcR1p+V32yiqrqs~*q^Rj|?-u@(WrlV4-82p(T0Uq4% z8zx~j+n2p2vn8^)aSp0xm-B^GVm#^}En&WvgzgPz?{I4pd?l^s$VQNpY#qH4rsT7! zg&k{=wJ(-zDteW-HM^&no@CFKOr4XGjk9gNm_oU2^b=PsRuRpFJF|nW6sGmf{ct!w zk|g76_l{W1g(WG5@^WWK-d0|pGG{i`#}qs1KuAe=+I#%-NkpX=A>Mi#^6bZ@a>1g) z3m&;(Js%@hkyof+Ip2vDoTi|->vnP%Zn7lO1O^`7Z;3*$s-` z5wpc-k}kF~`~s~7bORnU{okewlpu$~_ZwumVS)--PUF`)Lb;M$pyaxMJF z{$T`Z-pG2yjRY#8N^AAfrQ*@ME?8ERhnoD_O^BU6)19#=@9H}EXyMNMsG=|(|=wI%d3) zBNjcEA%gjOk6LSu&d@kqg`T;s`3FJ*LlJo{9v5qxBxH%&V7<^4O{&sew|eGDFNZ$>S^T@9D0tTx8TRn#USBQ)uP>2rsj^A-b?P>5x` zG~(^Cm=+Ie#v*PbHH`B$bjJxg zc%!3L<_1eAIF>$AHuE2n{vjhw(*115EuBAb?(uwu7F)jUmh^bA=6qd$=eScf_FTY{ z62p>)vG?YHsqpPdHLhM1#SIF*7A4@AmPB#H<~F2Lw8TW8{5_RmQsx{-d^~ZVX>>xv zmiNx=JRJ|nG35W8j#M1gHDafvCpL#?oc8T>KyTCKH&0J;x~%b#3+r#+5&SoE@hyCi zgI!NibY<6T8rz?q=zBpmL+ zXZm|g)y3c4q_0QEaypkVEku$vRgB!nZ*6}qszMb%MOs9!qR?|NV-_Kfz#)-4JvJ%# zGn&Lv@MrJmoW5cgzurjnn5@axIM9BtRPB&bZFTpkI~XgthFS7X4U3&21q5|xl7W!1Lw*Xkxm zmmmIX3Gr6yWk3boFDLei9$yb?&*nltv>g|E?2H*k6z=R5OYryH=R!4{&$g^?`(533 z1d~d!#H~-lR5KWT)4S5}B@pc^Yuz2pC^_l#sN=k%tDsBeNV95nm5%&+nf%~8gtU2n z1Izg-mEZBX@0wm}F;v;T$9pwXJ#Yl>(wcy^t6qH7;7=a}i7Zu@qm682TPdR#?8UYm zMLGnZ1eAqHNuV(O-BobqzihhpBy-w z2-Xr8$56J@Pf@lPt>(D@2SNt@PNo}tL%$KVEtFiZg{?8QvE#OOerVZjz}X-l^>g0P ze{V_V(K~|`(iNdYkepjGhldNRd++ffk%GlouP`V1Q{{IvxxH}j#|Is$1FiJhG2;r1;a;AMV!h*ZCr&?gS6D$%BQMN|N^7S9$hs5Q1{a1 zc+V__K(X#$pUg42eG~y*Bf8#D9sVROg>AG)y(;=(#LQ9$8)vKKLcF4LG^p7<0oAwM z=1AFdi(IAMP%NXqx?QcZ_K zu(=!ZB`-qivXhR2Us4=J=*fol?8$37-uLcjPBNfax=Bpm@OzFo`8nhkX4lmB^Q@#& zP5-hR?zEbqb_(f-i651eM5flLgntpLyFPuub*c^jfa2;wFHSPr1#5|6rF5%D= zj%&o7z3j>P`ogFWNr8tR-?wjr5|Z3cu{vp-q^V4kDV2|Kf^p_0H}Wa`I6g5^bvN+W zUsCGSbE9yn240+eJXU$aD_2 zV*G{keK_TWjV#()Z|1qSUG{^6k9n%94>iZ52NK>a?MQH(|aHoC#z~6X!<1RoM+vu{L@PHr(>L{Z{xD zpF3sfVq`4=_FFf>^5iqs^%iAOf5WA=H@-IX6;BR{oj&DpqTogDE+=81uTk^D2`G;W zB4+*yw;p|d*B3%gvy`tSev)m#vYX%f+E8H#6=t?~wafn0#)VZ7_io9iSQ)AeI+@gc zsHwbQ`*Hixlv8lk)Rubr%g*GfFpQ<32%z04c9K(mUcmQMLMXqZ6hk;J z3lo!kc}qwq&aLlLtOfq^{ibh@#m_)+kCZrt*W1wljH_A$J17fWGBQ7S2yZ6(4x6zp zAj)2B-5hh+S!5Uxhh8AG>N%L|T9)(wxg+aAZ>}&3Fe;JxFy%HYm+@csW936ID2Um0 z<$@=ZoUOD9bw)s<@0!MWCzn#}x1F;`N|ROgk9RM#CRGjetuX{?{*txN8*%iUntplip|5*~hv&)NMb*FAR7d zMtn5u3@<09*=4reJDKm;K$Rd`{cAk#eQ{l});g?ov*K8G!qj_E$Z$oI{(Z{}36SHf zIJml-HS0YVe45ZA9+aUEYW@Yd?ftRgED|hWb`a4NG&B45GspOAA<|n=($3A(2_foM z>(Wgj>KaR$qo~oZOf?#<1B7WSa8&C{-RFYsmf|W;Lzg3KoEBzs{jTRXb?yCd z!$JP9@1iJ8lU5)FOVoWVlVs?Sgkihm)$s9msSz?IAN% z8y#=xOvY92xpE}VvP@ZQk@J14N5D1sd6QGjOjE|@0h5r+hu!6&k`uZTC6-$3s~lT8 zpZ7c+sLU?L9)pY4rBf8YSSL!-2g)wN(Ebj)R{o1)sYWO$%qF)iN!2o1xa-k)uP1oPx7LgE#!;Gh)?GLaPT573G0t;tx zhWqzIq3mlVMA20idEAt=A@58nsg{VPzrw%c3s&yR`ZrnZul{^~M|lx^=-f3eUQsSq z0A*u5$r2n}-beOm^+|oe57XLtrFOjs^FwV}RS>m(q|UA(QsBZVbi}Mvjf1NkYVim8 zDqiHKG1Yu^=*bJiyo?${wuP#Q4O{aES9fo*Bn2K|9uBnWh5gOirUVd*wxS^fVA?kv zzIP}`A`i+!KJDJgG^3s&%gcX=LwVHM02ml! zYnLOHon!-kvQuEP0nDv`l#4@R%e4fth}FP1&ape|teu0KM;ZL@v|A1CpApMLiU(xz5EPs_~T1OkgFJ3^cq7 z{g@uw`SR#4*2_Z|O5%<*6**eQrs?o5&D$(d>4z6p$1@x>JBNUH!~m)2#8z9<{oC#` zVpBG88KHr<_9-}+!zQp`9|;ecLy-}FhjA7`+qE#6H!B8Vum-VxBA+J%of=8-oH7C^ zpyyu*bH{FRtKfW?vvU=5Q_aC|8eMvYfOAaKHrkItSfr~-Da(Mq5XZ2$7~>j6qGpd4T+MYw0-6~sKWA> zB04e|raa>G=ZgePQz!fdUpV0c(5?0QegMYj*9^E}G{p>|1A(D}>uh&R9*y6*KZhdW z>_It2penB|))a->T5on-v;z6uTD!j^Ue$J;6t*^m zr(M0SY5d*1+Ap_FMVdhds!-t&89yEVqF<<7%X;%&)AxONMsm>8`#3`;mMxEhU0i2e zyl33hl*3WoGDg_@s84J-8%&>KD)q}$HTM_CmV)OcIE`zChCX9m&g#Ucx(F*&;6Lat z{wX&^?|wLi@wr*xsKB!4eLY zPg#&>CE(l|kPW=G3HKl0w?dHU-^L6uX2F@<$U2)#-&v$ODG-fFSqLqoWRf_h-Ev1h zle$RjYc&gEIf{B{%QT7HnX~%0K7Th<3m5CDKOutvua5Ejo%qnxnMh)5Qc@AI|o}{}s&Je@hKhcP#r6VCRvXFg)%z85|ygjJNr)tK1caCK`&1 zA0l-ad`d^|e|FqU?r9Q_if9WpISp_6{B+Uf!x-}%*3E^z+(?3fRHR2g;z=vz7U2L% zL%P4a&Hd8jhv2bpr_H!Cb)x!2IdOc-!R~UPXj>j^+W($jkf)T{skyc%ncb;I?1$Nq z=KYJYGp&z~4`;LgUE50xO7%L``dJQVgA4xQvaQC*XAB^HsP;`e2U?`WHA@7A<}n+y z>D}SKOKLOYdts}ex!6-qBGN@nI#SKPl>eyMQpGW?Y)uYS60Nm4m+RMSX>3Mk5}B|M zlSh-cQH{w<@O;`km`$qI53P<~9P-*d74722DpXC)a(1@L31~qMacQl|B6G#K``aGnPwY@O}thuY=W6R`T`AqOTiV;Sf?fTQ=l!pA7qFf*oFRoC>#}XtJjeIna zNjUI~0Zi2XTRsQhd^X6{rcQn+MNqERQrUtzUNUx>hc3Zw81G<~43G`&yc}#}A)0;5 z_7#Kqm6N;J)zI^!)!l!7c}|W!Vre4koT;{tad00Ic*6}s+Y8f4y{&jN7RZUIqRb3~ z6iu}VoQoIPVrKJ__YaA@p9a)-)n+zsj;>cP6)Q_#zYH+*p?-l|JyjPJPnE&i^Thm5 z&wH%Ln0=sgsHIDQTdKfsOFkU+NQx83uJx7z3(mQnm=!{jCW7FjRx?}w=lmNgaTVjh zg@YGA^Nx1J0^TO2V583(L|s!tnEZ-`O8y`<(oI)ZyZ8eYW+N-j2R%UXw09 zu_KMv?|MT-VPP7!rWshyt&POg{Np!1Pj5RM*#lAGv&O-Y@l-(UT<*Mgmq%glgp3$X zLaBlMVfVjYRvGaz3J+C>`24*v(C;twi|t2Tid139IQ*p2_VamG$7iqu8TTGp#H$O^qrqXY} zPp%YSsQ4i;nabXF=SEi}@)oXTWThYN-8%j0vk@kJtH%a`{vDU*J$A{4m}Yn4K8-QT zUK1x9hIWd+xc;PI@L0~O=mO{B#5qtei_YEpFO|HVto%lZU@aR9Z(ir8DHD*bvy_E3 z6jbTjQ=yLHk zxF`Kii#Ei4sz>e|ja1Ep57z$%7z72TIGChOqmt6;tB|?pOt^e7x-t0v;)HAfD_bQN zTP`KP_rGWh$H_%9gu8MbxuoCyU=yZrVl!|X~`5= zdTNXh*Vu;Zf5?rmQaSQ+c~<(_)m0}*9dq8?@FZcR=;=vQa0}#OZF)Axl~GB$I_;H7 z{_JK}NC==A=cX~P2o4n;8cCqon3ZX5*ez(I)!tGH@4}_SV|;M1y{W{Iv7IN9i(2%S zA1Qw^o*u&BmR^NmD;smutKPw#S>$vjvN66EfG$R;&t3X*+7tA?N2C1t4yXxAVHd)p)z`NETR2 zloANM==HeNy8jHeCa;`k0T4-FKGWW0wS1a24yUiiDp90BsNI$CedtRm$3-s`%jED& zkq6^QjlFsjZx_^%eS$yno_Bv7AC8TKCoHO;1#Z)w9TAW48_%-R>bpf5` zzAU|mD~}a1tl|z6Yf;t6Wx-VT>>F+w+!Hh1%m)d^vcmu~0PXU3i6)h9Lc#WSs)r7g6(q86ir9By)MWoDy z3&2M?&wc|AZ@K#j9^;|(i;Uz_z@|Yg1$<+7l+CLiFn>R87 zP+ZdNhs_z{p?|YvYf<6Av}oZNbUS!c?#W1iQGWgNc6`Sa)8;0j;zEkB_m;Vij9ZAl zAfKSU zRfOS#MCrjg9_nE$?B~WXxyT-WB(IaRJCRwGWO)SAP17%aW7S!*0^`yQO5KSB6Oviu zRZ0b&jCu}RcBXM$Q5MrFC1q|lvK02Dl+oVsY1F#YERv@Lg;d;<7a=l$UH3kqXv+n! zr|_`7{Vtn(oQwd*+ry!Y`^2EP^1;HBJ@V}Llav>OnS)}!`M~_qprph2(Fkx+rR$k3 z_X^fu;1{M;zG~#m6g0E;{>T3Fg>I_1G*)QxUc$#pxnh9fg}u#4h%Hmn$!>p2xa2?O z9h*VQ+XLyt0uc3>07++b8uO`0<3=PGffqGi`orIIB+Lvnr2|m3u44@E(k92uh4_BH zJ-P5ozwF;GSJhLIVpX8b{m9qvlwp~)Oxi*9Y>p4zG`oEsqr-NMeNJp2+-O*+-&US& z9h_44TK32c-ln6-nn6THmhP3)vxCw=KSN>NjrRs784_2%Pt7~0ypqU%ud-#nT ziUS-+ez$f*{uSlXkM{T9XApa4YfykCF|`#W!?orl&kPJjoV{mT zIYcw~WFu9o50~>f{gdTT*Kc2x94WrUx;#O9GfX8{D!f-qxTiaShf%pKT&O3+V_n^D zO-XpH?~E!Phku+!zHsU2m&YxJ7%O$Lha}mAmj543*BuD;|Nq~2W++6iWGmSkGUG1M zG?G0JDasz%+*Mjup~xmh$S6sKy9miv_Beaz?8B|!>-v0u_xHV?@7L@3d^{h|=j-`e zF=0v^J)o>-GR*Xbk`O$8qwGp{P@;+0l_MUF<99Z^&$PEk>mHT2MCtJJADshhCszG; zN#Zv@Xo!Q_o7EOOC}1-cv#G6utt6&v8L67CcTh7ry0+C@#J4ql#-Ha0%%=T`E>y!w zOg&u%6j3Rq()%ujGH2!72aD{FFS{km4TipmJm#GK$&XBD_oAz}x$k3tF%URV01wJ$ zHG@1$gIM-^PK(Gp9)cDI$}N{`9qTf!M+B?S(U`ZLQ_p!lMTZ1EIW;TgbFKxH2Ob3M z@OHMxoFBw&7|jn_a`S#kuaZ#7`YNU(r0sFf&uVweaY=y!sOhu$lMl3&*Y|!Ou=xR! z?8z7G@SLyjDudY#=U?(>Nu^1j{I2~2DZ9HR2oUWsw@r_eO~d@QqWhF_fSMwJvuWmM zy+_AxXTIEcciuW6Y*>D5SemW5J;Bh)NGI21^@4q(3;p&4s%a#0anWNvB%5n=#Ss#Z z%$7JVVc3+3Ihgt~_=B%ePc~~MeJhyk73y8aF)nhc5XubPSRjCyb>|RtKj=4DRp+8Q z5<<3Re_gpJ5PG^OELo}(0}`YoUWuZt_$v-0lfAzhARTsIzsi+E_Z`;`))CmZMaL$5 ziiH96o7DmILFj(Ub*1f`B9Sw4hgB~c6p~_h9G^I;MdoiJ0v~9j+t;DmA2I6R9UySsaCpBVK&wJ6n`1LEdJh>vLa(ecytoeC$%L?#3Ioz683hX%0$rg_9Ry3Ln z1p5^l6pmG^1BH1hQm z)3M{X?j>O($5~HS+$&*(w#X^>X&!Os-yi+nIR6rI&%9N))f~w7>UjdL^0K9GG;uMA zj7k0oJ_2fn=MUlelvEd2W*cRp+^)K8cG1uR?PckOzZwo|fABNU&YqQ4Zhb!a?9AZ} z!SintPwRC$PIc?NM5uh&g+VejF1 zh2q};1zkUI0JwY2jbJ!JAob-g6I#CsCc0bC%jcN(cImlBSc;FF_`9dv_dSxOf*+i_ z$gOtMPzXkRWk^i2q%H>9?LIoH<0NZD0ds=LO3cgl3Ly3vSSyAn3)^)veR-iy+`Lta zyU*^{vo80Dh%530+5rqs~FSSVQIcBgiZie zp4;k)!_i6Dx1PXr)py_c?}hEO9rgWviGBHgPL9cMFE{-}0iM1;8O5t$!8Mw(O=acu z;Q<%r)qRFNzyC9Sf=yTh;-!yX`KNE22Tl5uqP6-lfmZY}#+-h{p6Pmy!;67WJ-Tvw z+kh1tUTf|@D3B-tHZD2cGamFY_KZHSqpclb&mZ^Nbm_u9Q;z8^5qW_X%AZ?)*s|rP z!Pj(uxe4#aotEa6Db~J6{U6@mTeGZoC3enMkt54F@Z&o+PCkB|-%-7-PCf%z`w_6^ z=gt;>@DvyTu?{5Y95GUoO@rXbK?$&P~NV-eJ)|fDXlg~kzr&o zGi@8KuI%9WZqs4=aZD_`6sOl*BK39Q1nn+c~KCEno>-n;H5Vgwg`uZO|XZ<7pi%NIsBTxpa zeaP_IAv4&YZw80(<-cUHm{C6?Inis&qO;*wc)@NXaInPCf7zI8%R%UXrC0DJMN8Qx zB`dj$3YL$xt(UkTfXxKas+?fO!d(5m{7IKK_K2=K+YPEJ?~dOrkzrPO3DW!MQ_<#6 zx1JdKFXtnzi^-v|fb8L1SXFtktW=j_D=NYnC1c-M#tc~wVJ}kVEihL0h z5S&V7ZxZLfX=rP=)dQ-1({BplMUl&Od(p4U{4*G}8SCR=Iufb1Dn-Bq(E*-xqR+~I z2w15E!3r{iDlc>09a+9;fKU;Sl&4Q#GKk=5_#!Kzm~rYv^+Enfvq7-7*v0ccw?a_- z&?GWc8(|mq1Z*F2E$C+zuiWPAmm>-6Uml?mI)^a_;;PMHBX{yS#vL`ypiIy26H|iK zEWMX`UhwFwM_sMhyB`z4U)yw_N4jvTNnoaXJ}s{mD(L<$W$RlFDg*MyEsrhPA{|6| zU%uXp%NV9V`3vMOi~zyF{m(^2=NA^hpK=(qopanvM(om;M+1ZS%?R{0Bv1JAqc{G# zg{fmpo(TqC%suS;A}!||j~1AhNyz@am?|vy;6YFPn8dT%X#cVEPi-%UXvUvK5@cH)xEZ+IA zEWQm_k9At2pb#w;mpVtKP9t13)-6t>wV5E_v$2vSX?4r*d~oFBT&Df_Peky1WvK#B z_>&mNs|OaT14wRqm%o*XbR8}5Lv1NNvWzqPW0N8_t#E*)t9LPu9?KG=zqECP`!p1y z+Z3Ss;py)5G+N?Mx~W%*@Hpb|@zWf8(eXy-yoP1U-f!9%hf%mW<}~zGo~3{EuJVY| z)z!Z+G{oIRJLF#S{`gASqIF|GJx#feraHTX^sxuuux(a^I^|01N-P|loz%I{Kp|~b zUpmT?m!6fQ=TdXW5)G8d2ZSX>(p4E_EvZR2;;n z7i6aQT8wD!8LzFzB!g?L+CWGK zd!>iT&HWfA9iaMHCj^SGR}mVvL^Ud6J?X!;UYoFII*L(O92?s!czq6&bNH0wr=PMy$8;q4 z{@R8@j{8#bW$!-GEUuQRqYXFF3V`B_!MTpdrSu=cjtKlrp&itJcLn|)40MQPe2Vv= zdSioT`eUpa{G`K(Zi9V?Dm@@U$x8!veq!y*Gv;vC=K}O#O7Pl`8r8<-=h_0C*Xnq| z`R@2L^GBWIaT8sq2K~<4b5^-ZoKU$w&(wQtDYENrjALOb{m@OiGLD8W+S|jZqv=-^ zp4dTAkFnO@ASeBTDsm9sj0Kx)6lqybMl{%uH6xMHODoLSWUsfyDK6HA@jpdR_Nct^ z9Pv|nnr|Or(`H+9wdP}$ZrDzHr_)rhSi@W8F(*yzA+8LXN*`1L0z_3SP;5{TRI|WF3vq1#~6>V7BPhH;Dfx%%)Hf z9&kgMd9!T&?r1@)cNX3?0A{)m-}NL*Wmyli6n}d6R^rkM+#%iZwYrt%4PW6pAd8tral`5KpF zS@Xs7ThOh)=EL;e=pvP&sDR)O`-l{bW6RxPe`a;KDXm$EPH`Xp5&4~4TV_RY_r*_9 zf80-bA^C(5{->++rd2#GTBq5?mL7VZcf9iH_H||2(%ZX~{u`&Zjdr)_cYFIW!i~7M zXMj_px_PeOL}1^DJ5)w_oXa$yh+nA6nh)lI#;;8dh2xHXVPBoT=H)YL2SM2Rwg(l5 zD(Z#JNBLvvz}Msi>1$iKZGhP9Qv$2EHE+T+3!2~|cHl|4!Si|3n8F|)2z&0P`v4r( zvVeOeqxf*iQw)Nf?Yw*M^|QQhqTTy+W}A3B_9G^YS{lm}0CSCDad+y~|Hz37m3Oe+ z)6wE)hTOTwyjR~lMnh)=6z8gsvV*&7V#esbg5><2JwjXIv!(%Hs{R}7-=LB%hTB(h zqH@I@oOGRLTM9+kp_3s!{tW_z@K_efK#_O#?D4A)osu4Cb0Bxu-%6sei8r4WeR}>|4RRbN5gV?jiKW7%IbMrDWN4eC_k3PJ?Ex;_TbCDrF>bD1K>XE%_HixYaPVd>V66EmeZMaT+gZP(nr6WXjiH) zut!6&%1vrtLnso0NLVY8bstz!Av&m#}5xxuX@9MK4HIQ*15%%Sl)IWpNu zx3>B*%E2=IFa^&yxm$^duKW@q#UK`WS*m$WUERQ!pGm!5Pgge&%vtveLdK&T+rI=+ zXSYjpn+9-ce`4t)=&Gq>j&e`)!7&nEdW=429`Hb;n_kJK*_hw`5-8n33B zPa&IVz2!VjaE2e7sW5-O8gscrJ8!EC!h)Ef>W{#GCMEff8lMObdi1QtOTPLof!-&1 zOTQ5s=Z}}Ex-_kcd$WeNF#9Jb8pv7nVxJ$KFeLhD-#0#R6b?r@xPBO*3}0bFz&fI1 zD4|u`@BK0(?%g+`u}({%oGxnj^P^&0NTH>duYI94VPdF~Z*!EHxnlKO2Mf0#7?u(4 zfO3wbsiygYxv)nKO&VKX4(%)GNH1)P8)x=Kr_*Hl{54VW{pI2ga%LCshKrA}v4Ur> z?vGvyZt7-YhHAnke-vhMAFgIUx&BPXmaGBGnLRd$s~^NL`Cf(kD~G^&>ZMjeRnO&j zfDW$o?v$F1x>GK(UxLv(_w9#;6WO`4rWcO37(>v3L$Qaw=Hd7+xh}evrX2lae;sEh z%_`PaS6f=9|=%FHz# z#ureH#@LR>3Iy~9mYjBLuc|@g6fgMkb@wMB0{NBZay+t6# zYq5Xb_GAOtG+)BeD?%|-)=cjc!Z6%Mox!MzErQIyUd4$o!@Ds2_&%QNKK$85i_)l< z>RMi^+&7>&!1cNdDZUpFuqOS?mWn{R%RlE8uKtSI(NsgvC_~WGj-T}NH)k=S)HC$m zJ)_GR*38$5@aw`Xt~qKP-bItrDAh(|h3qiIl9c!E4EyK%K^3ZEwc6+W0MZV!ADBe zIKYusLO6`u6pD*XP51$>)912dezBijtG1zvrubxnPwMF2Flm)zs+!6B=bv(i)VLJ7 zf|(87tE~D9P5GbVEC%ne59oLEl*PUg&#ujdeDeN`5Q5&ry`3p9)gP-e3z0@RZ9|iF z{B`oAwIlk<2$X8-ld2U+DC+7``1RT?baNa1C=j{3hvvTE${v(!W&*6*7nKVMn_YsP zE3UB#tPX#TcBQC`lt4oFQ0PixSq>-k?iT&&kC?C$+%;6hGmHy)?lEoFMZv0}g3Td0 z%!nv(I9{GG3dB~p(0=bcfAM&b=lVVV?8J;*=>GYA3q&i?lL7f~2tP_fI`91RsOf|P z2tV&~`!Fq36wn&Tfwt3CNo`pS)e-qk^vR}CwFD>A|jt4 zp%h%s!0H><`VSUW+mCg^LNcY*sg*gnjo2q~ZiWzq>c_;U&^=!78a+KN#PZdOXpCL* zbWcSHWo)Z*+d$jk9Pu;ZeA?;HC-*j&aS~cY&k~&Y_za)8_Rb_*<$N#y1RUwwu4X#s0YwOYeX}J*O%KnwoT>Cgom_;OWEnxyje5J|FE=vD} z^MYOwryQSYT`b!|d$CVQ6?~K?#vDeSR9BKKFY-rzT#5ad*F%aUJ{x1!2LW|O^CEVf?uCADVW0aHO zHNamC4qbwU4c%K4nn4J;1uBa{`k`J06OBEOA70X9(2J;{YUqM>1Ew<#qbUQj)G8Vz z`>__oc4_Oq(-P+B-(q?jg_Qs)rH+g+SZzBcjW_7c;BYu})39^6v*9pS z_!HLW%ETr}U#n=|QPUsl9)s&|$A)hF+G2BXnMQx_4ERC|EOA<*8wlFal`5-az>LP5 zA4N1}crA$CD*3dA3rDb8ULMr8K|yCj^Q-1)lqrt@klmB(&o=ZtxvpB_UV2iVZTAq;sg6*Z76b z6ZT3KX(_u#mksKTp+;BKj4}3Ntl+!I6Sp&G#rLDyhdYlYh1Hq}sCgnU?*F-{`s4Tp z?b@$jdRNWGNf7EdxN$e15nzf3_DY3zoBJ?2&X&;oHDj!szYxp(__#FI=!s@+^De8E zqTqgZXy1`qyB>W5LE8M85hgpHj2AM^#H#7QJ^UZ_5hm!>Ptx7epRa}3Z0MTv1A7>Q zS2lDjNG!4dD$Ir2<-YJ$+z?{%Ru(*|rd-v0T4VrPKC(M)n#^zRJ0T7nZ3U*h%Vskz z5SC22h)4>P1e4(^Zbv{;FAi?mc=6qw@MO+@ zeCBRiz}L6;)xoDQ5!V_S!S#!X7ui<0p<%yFNO!&xWo}GI~1d%|Ffo zsCS9~5-iosUG8py28TnS^0+~}^)~0}8{u{ z=-wGbD((tw`;!Km$FMU@ss3CTpf@X1`u(Jq1*%j(IvpKZ+(E% zyW(v??0QLs;7kfKrNMiVzxm4!LSuEjPTekqstA$`iiO(O*<2Uyfrt1K{QrjY9;9_C3Hn)jt0XgjCy5+S@a#=?Kh7?J| zM`4iIVbH&qmtf#bdO_`hBGEADMQA7c+Mwv1Z6&++q*1(`a%8Bn(JqVLx0)Tyb~~vG z@d|o+l}L>ayAA(Lg+4@3w?aIw)s1L_n&_xOYb0`a^_8HZdqBJRt8H=Vv2B z+VPN4t@P0IYeaw1u(gM)+h=@`kS&i;B8{Z*S2NW=lN?CEy47t@k^a(BU~ns)2{r4XHPLjO&>u@(%Hp3G&!;Zm9wiwQDoUY81s{3Tej}u&?k1tHuAyW2Cs;uM~T;t zGR<-ewNT%0;NBfx>jQMvMpsRdGiXbj}au|t+g7Vu=`BoDsleiglE3KIRGKr&+8zWPtY8T;u7Q@EH^ z(W=R=;s;q;kp_wIxvzuDrvp@1D2mFx7@HuO_{peh_~8-A0QN57lW*Nv-+A67XiKTKhX>FmnAXdS=O~wl@-K`1G`{*ko-o$ED8$ zk*%v{a`}cF8x``j5Me2cdIs_sG!@Sb`Gs+R1ZAX3OJ>XM27A)cg(hQO#8&imO{J)d zF>{%waC}d>Lw;Dl8Hk6Y->c~6hlm~R6`j=bEdrQ1MnKyFuvB$dj)87t6TDn$jf$j% zc#%GJoEh3RtJvAG0&*EMxA?(8F;e6HCQ3Uf36Akqu8x1M8c7CJb?kOl^-8tW`2(r6 zd#0+?BDW3NKJiVaGLR~fVeix6g=Cnt0IbHt05*KDM)R1)U#~4DerSDN0Vn$*c@&5}1e7FlEqRjNrQx$+Qw z>+cAX(e=eVY=m9d1Ce#kSY&?43piH3+N?2oDUE55<)V)l*B_TvS8&bOk;>iupu%Yw z6!gf)3$hg>+@$6nB)?Ci^)~teh7W*UPNhPo(U5_#JbWatoBt$UNtVXqg*lT5`vd(f z?(?i*F9R8-#My76q`agS87>A*W>y5Ih0^z$j3Sf0j*-{^1gO0)Q#I{#7YH5)qUd>r zlemtKe}Kv^02hm7=3&3*w4_`+SJPm{417BuZ8vTn4IRHV<3!mg-#KV|&B?@f#yz~U zdJYr_<4t70A{iJh?j8)ETX5aW*CrAE2zUPToGt=4s+QdWCyKpof+}M7yGRt?7Ab>H zZjEx^5}!368>Cg8YKT?R2?(&sYCCi}1h>2IFTXnqLzjr=wT zG=OREq+Yui$)kgWwj{8N(pXv^c5w}Rq?Ytvv zgu;RoEl=1p5YxX*Gt;%~`FaTuWXtl#!@`~Z{!Jsm8fKJl%~cpi4wp{gFUx(Hhpn@) z_0jtzQ_=4e3R3@cPE7FDZL8N+8H1uFyu7FQqt2e1{+|D%uOWYQCDT*QU*9sJyb6dt znLi_ZXXNY0(ua8%;f#UJ&aJtB@bbQ4f} zd9wj>PeuF^nwavMwO@FVWb;;IiKyN87bzdg>zySFa|lOLr;@gX4FnD78m5&C=x}Y4 z5qpk|gIv*$}F$f zR}Pvz!I0M0GSPbeP6DLDgHRu-XI=Ax{*izvdP!j%-J{sLd-FMujtPFzfOQpjrfoCE z%Ylo5t%0VGwO@U6$%kGPO5K;SdNfkX0Yc?uU2`U%&4Dc6;m|L4`_Bt%!oNNZ6WwpP zqWxJzn0{yP5~G`2CzzO7rQYHu7WlqPVC^6+*li`drM_q=i|W&%@?A_`_T6~|?Sg28 zb%a&mQfS3wbNHtt;uxD(U`~`X+oqjZL|Dtp!$k6=!d1$v-%WlWxH#vGEql5-vb8Pp z6B=I-R=gcic0<71(;)6k+U5}4F{;(o`w?#WEpdf(DQ>U4@-h=(sfcL*0E*Ym-cOTu zl}8Lf>``XpAx(J) z2$4T0?-(r(vOT8q?Y(L4PXFNlckQkbYuOo*E?GrcEu!irZdd3qd0F48tM`bPhs>*X z_)PM8h!6D^?jcx|5NK?szdu772ajn8bkKeX{PUm1H#uaK~WQ7%1umPTnPo3r|-yw zIFNO}KsvllZ$Zy-+_QAk{n+F>(Pg z_6mRck_tCn_pc9TPm}f=0H=p14ZfJhm3>O&dKG(DUE17J2fwRTxooP?v90CY6%F*< zhp~H?^&@VAn!i78l{3oc&Kcb25s6cvzNR>+p)~> zjqp=om4la1Te-R(`{C7+0Js8kk4wZuGii1EOXm#p!w{eSl|tIbKXI_FRXQS|rO;bd z&(#(CpH0zR0dl)J5@CR8h54hQZ7HUmdt00-JUmI>9o-Lwpc<f-(S?amR2SJ17|%o>f{4QZzUw8+RgtoAGpP(#xT~YkhzlJuZ1YSQx z_XpGGE^ZXj84{j?4KEz#K0MAVa<)b3Sdt!O06F`}bKbV%dgGY#%{@cNz?BpT$`V?q z)vB7WQ_E>*o2U!KolXYV{WJbu1vqm^%48mywJE(n0W$f9f7+%v=-ywlI(I|n>DAdDdgR{xOV>DxVxGNki zW=VhrD;XAFt;zrbQ6iUAOPPhK9U~ky7~PO6jG`CbrdD=I(|U!$frNeH`m9}5?B3;0 zyxGNOp^ZU!#qB00YZewM=bDKbM2iGg3d$Ut`1C!a;`%wGkG9CdN-@~C_hK_4oo9U)y}cZA`Cr(nI&P^GK@tXjj8nSH-eyVc4< zy99(SWO>~9%<5X-byUC4HQca5k8iXx@htR{bm5v|w;PD1CFU8+ZF^qE(NnZzI_$=e z^sq?*0x%6Xd3a<>PiXPRD#uM;2&+hn3(&0dXlx9XW#5*ezJiN=sjkO1Pr#g35eRZ7W-e1MKJ*F;& z5{qt*j7E&6a3lRJKRsDM2dqw5n15vVj?U1-#(`XzyH^4$Q|LmQqvTo$Lks{eZHwmp zoGrp=!Ne3vB?g6)gbQYrz|STWf>Upd6aj>VzPNI-vcRApeg*q&Bk&s zdEfFYFw3$jx%kvkBT_gsc3>pp_*r>c+LGcwHHr&zLK*@v(?po(=evd0%&sPD*(=%B z%wKaSzpuQrWPbW=B_0=zVJ_mtjyTngCzeXr*)30L;i5uUFkh`n2OxQ?M+92wjz!xZ zj?u06LHX{vva~eo(f5lxrB;+B;*Jr!cnsT1#ePBV_dxzTKVE$P+R>S_g0=rNXfKXk(i)dTA>YvupH3{{HKiF+e|?ouA3UVIW{|S zC}8XeeHF^Sgnz-7br2xlPH!T*_|mT*zf0@nKyH=n-ws37H8*a{T3c~8(#=+kDSQka z_G|d?ijBPNcFV{QjQlMC1FsR(O8ywRwWNE+s_M;ZY-sOyBobfQTksDF((MAP=OJ&$Uh zZ9^nYyXV_k05Kj(BX9bZa(29K-!p0aHoe6U=;{Uu0UH8-tYHS&KrktxqN`QulR4;+ z7~tn(9{Z{dRISn;BMR7CezM*aK7BE0SJ#`K!GR4!mpdcc3*YPz-%8VlZ%~RZFf0P@ zBmu-E%wtvrDCNbUT+}&bs@})xrHrk-dGy+p_8M4beb!e0y~2Ex2^(e<-LXt|7nWy$ z!c_@U!|NhF9UC=J0*FXA1_EI z2oT-rwqXCj(z+8`(jb9K zyDJahA*_I{KR;hmN<(Q6*|EHq6JI2mKjou9oyuL4?J;sM#$z38EB``|5@}WX46N=U z7%qHKOUsTc)Hz`udHaF1kV>CQ$;sSo+|#S`3rTa^0F6&rn%<6?#ZKb(Gsg30lm)5< zOb7spH~Gju-amN4)%~*R)hZwQ01Se}rs;#4obxK5ZrLHr*iQR&FlVT>r5w9Gm~gz+ z$-7PZv#_7ynSZ|x$J@6LYj8F2*p`yQ5udmJntu7L(EJJKRZKkDacrezu@EP5p33%a_xKTuA~ zjpk^=jz<*TFV02w>jo}-13`x%efY~^W;J3Tvs&2VvJT4%^11y_D8uT|V zBd#`QjdIOq=wYQSrb}ExLgGzG*40@AeG@tMaY!MW&L%_iVq^S2JdRu;h4;zX*Ja(q zyt=CxOEr9=YJQ#%;sw9nP*eYql}p#6=;k>)$dW^JvM|Z`zpf294lt`N^f0?B-hun8 z1*o#!M85U>v(BT$81-}$&dYVOwO7;Z${Kiwhmxf%PYb+GVS-*V8DOQFFIe-9f1a|+ z**C5pTsPAinwY4xdJ z+YP?#elC6g^XaUw)P@6$Zc64p>RdsFs7&6VpuNN1*H2>>);)X_A(D>aOza}F4NZ5*1Ie8Kv~*zM$fPweB-p!X;5>d6gEQYq)^7|;G2Fn zN)uS{Q2W!Ti?z}zHhZenwyf(EP^j9$Wlf4g*|xws{v&_C_J8btx6ix2Y~MIHmkYhH zoiAr!**iU;hb?XXRz+$duu}cI9WVcprLV(2CmM0=K=IH!J-%`57&A`?^OslY`!)lb zSR*?4E)%9Fo`dh%7;lOEQB9|t|2|5$Uc=zu?9g%ibSVZVf}Yv%Wl!s84={Jt!@hNd z!U@aIV{M18a)&ZNgbACz8|dy}$VujlrYD@icsA0nF%;-foCfV@HNfVE@S!yL2K*O zHmhtji2T#wS$h0qyKf=-os?Hr6t7(Hf2e9-_RBQrYQes2H2Xw{|me zY;`=geYNZo7?}TB?xq*EIZe#UB#VZJW{)bIVThH*~(vp_c6?%OvJv{E4a9~yX?rewd|W>YNx3P;W0}CWf%i+y`k46DtF`-?JjbY%hfhqZczGP znK4iYA>fN#;PdY{b+9}K2JUr>(hM<9%ZnEy{u!o_bjXW7AEh^t)fkJJ(U1bKPyy&n z=x6Uff|6~qS_aLZx<5|3s80SfO1JtQO3T9&O1fL&bl(KpqcfPm9EM#|p*S5r)Hy!s zNTy7I1{hrufj=dbks9uIEmTPkT&Vo?tGFrgcnhVcl|E(nZt8#|CVzheO=UI~13}sQ zvj3z(w}3%AS>_iOM5zWwV&NN}+RI>6yuIYh?jf^J+DO#)MB2&vXA;WRPCW4K=iU_+E#*GmsTD`yBWYbazTW8$5O(g>bNG$jlk| z(ROob_n*=AZ_gq}%8FV_iR9r(YHv>plF=ate{mE$+d0!AW*%Rdb%iaqZdG^fmPh7w zGr#|oO}_Z4j54<>_kC zc8Z({xVJlAe;R0oHz;1V01VzJvMuCsJX=*ciJI1t`L_2ThyWkNw<%GQRMx#}iADni z0q{>LtiS=+Bu?)iYe6Y;FgurXqv%6|zqCzS{&O?sm!XAPsXt$-uVY5mo=()^M7A$6 zkXwOa=-_h)%L{Y(;^LyjT0vE1h5sfm53uIbi-n}e{t>%ofZ;?OrwI`RG&fmt0XGYB zyL}E>oDSa(X2ao_niDD^1|k208Oxzf7v#DZj%dV?o;IU{U9UUa%5u_j-$3{{KFHm7 z`;8S6|RnK~iHKs_C|SSuEf zrX1QTaX7QySqH2KJmiKVHbAy4{S~$(v3(RRDAJ+TevMl~VzN)=bOPp0)rnJPvp;bW zlbyE-43dR@vUHil1B%zKVw+DLOiK+ladUZ!MFEdg$P1z6bI2)~5t-f2t>dm8-E|=l zctD+9$N z+f*dl-eQJvV&qQ%t?k!>D67I_%mKp+h&6%&Vw=TOplxpSzI}yAVYbS zjeHo7nfM_}rh!rcpCj(^?NiQpgNDj%&E2IH{UHVr{(-#5a zm0@j$ELSbyKd`8We)mJUMY5ta2cdS4T4yFP35mX^i&ez|RPIbQ(Zo)2%X!R=Uv$B& zoqu%h3zIj8Z|{?Xg`mcR#l^a&<~Q;#VdAba7^5P7RWvi5YPiLPctGpmtfbmKpvhmN zwMSzh2=ax=+U?_k!;QW&Ge`Y~xR(dw;|$tyHlzE;uuA7Z>yfR_(wdKsa~;^tUc&Kt zVkFO|%P9a592Wy2WnT|E@bb8ZD1t9~?3b!5@^aX#ie0OJ2wLXcZ!6cL@}Ubed-LX~ z@(*asCbWA%9j@?~xPuM|9#>#vG4JO-sO(*3RKL}8lAL626Er&L5TSTIlXc#I*_R94qlTH=_twjtbc@lXcS9uwO|#qLN?O@V4jls)FaRS0 zE!6jS_ZE7-ibC!=#ncVkrF}$m5mqTIR6( z+rJ@^X0XL=Juu`=Lx2D5zfXj|xzInA(u&NVD?$~XDprr2zhyG|F{R|3EUarlZ7=15fB1nVgxehkNhztTOFftqNx?x$l_I( zX-p!(m_F0bK`6iR4)oVK`=(crGWm(t$8NV8M&kLaaPF4uw^h!?BZV2;e!GiGgsr(E zKm^clsJ;qSeg~USf%Q8se!sn^1rXC?ldXK-f4gTxv$hDc| zh}yTS$xYP1xIMQyD*GPLjl*%gv!DaIMH&A+;SMBzY_-D;HXN{A%b#W+6#7lI`p!Qf z^!h29S%!NwbmU>rttdUAyb9YwTCVqEvM9Y-@eH5JgZ;wsmsL6oW*0aMqPX@ce--Eo zukI}uOiL#_`?)#%R%YO-*H7V;7Twj)$n}@lD4J_mZg-Jj3dEGAuXb86#Q6PW9mp|Y zGWAo)ZcY~3TdVut=2xQ(n4|cpV4L>QBb^w(v(40sQkv$#7SOJx$!pd!_I=9MoZicv zM*Q?Kgh~~tHXfsbJYrUfXqS=-*>W(DpHS3ED@U04H*Ba|4 zIsUz=X+rn*+Nkg}pd6?D?=vkHD2r*^LK^%%oEVu=^kEW02W;Beb9;oNT3}}KfNNs! zV10GqfeYgIkAqu&d#tg2?5^>Gu;$cZ#pe7u8Cj_jTLn9?+AW6(3L*ZKqlAAe)#eRtlH?_E>0~z1@rk`uGi>M1_LhcCblVt zP3x$oR1h|jo2ec~+Hjk=$q4j?u9M&0X%A_t83bsxHCOt#Ikpy&Qy-_4vU=9!X)}&>h}5% z06lzQv7BaNKY#y*WOlx$_G)eS#}p+sC9hZi5a(6!*w5V*36+8!&xA*j(gAaKEetQ-UNC z-wWyfD9%_c?fAJJJB^!Ad4&0PeJAUTETuvVGw~toh8(51iF%Ky4dmdhvFY5|Y%Gfi zrVmG9W1OS+l?BHR@X)gin;7ATPl%>zT+Y8h8?zk*1Qv zpp9(Qg8%r1IK(ekW`82m_wMOTyRby1(?Jgr&bmL^^Y?Z$W$lA!CQJ~CQjc)nt>~-U zU@*%himE#!i39kRuBd>1he6`fU3I)-&dmM+Cv#g?s`%{pbkq$L;;wMzt?e z?Wnorqk@$6INUvk9aD(AauxMirL+o$oLwj>7MpkWF7xMaXW>Gjq0MJ-i|G$SK2@E? zhd{ue3nDx(U2>`8X|fAmq~zkAd{bLJcexML+om3LrGL{Ua^~c zyj@UMb5?arw2H)JlQGpc-~n~4d-A#dORJqMCERMV(cZ^7CD0U_X8Lno5;a(xUvOvO z4s%W32@T&2gqQA*Z~1%b>6umQO0gh)?d_Zwl%Wi6Fg~^plhqP-?Pl-lWV3%E2-`D7 z+1c4iYn&y|g$%s4d%N0C zB46X6m)8qpqU*D;NM6vJ?0seTkHY3YU&OA3pr$5nO0JF6UsIQS`qb@&3#I2w5hif; zN6PDk*EsW?tYQ2kBq()2(1@NZbGq+2la?9CLl#dIJxuT3`9nD|{7piiMNA?oXRj(H z-9AkIv^v>isGoNAAhlC1^UW$4JXR2!jhb-68c2?#u1JoTO&K@e^p!*%;Hnwj!rq*- z_I)-oc@+NaqgxG_DU6Mwe3uLP7D?;BJu;Z;U*mX|PY8gcG0!zb6lEyfmI5^2PXNN8 zKi>U0yk-5_yxt>gZ@tyC6AG}X&edt7ANg~lbm9j&XA`c+iZ|%F(&?~=^$@RWdEL*hEmOxCkFja|gYW&c9%W2; z8+wF@;Gl=wd}AmM%H}P*=Ekh7A=1UfRFMv)Z9)B<@O$^}eeVjQSxhD-BS*)CZ^;5# zj~3^wobFEWbv$~RB`vczQ%aq^N!yFSi7W@=KN`zX0*!b6b<34`IbcN2_JDNzz88H= zZm|QF+c&uLhphlQ9yGz5uiEtb}S!aXuV}*Qcefp`X?u9r0Y{ZGCed8_jS)` zP9yAsPPbCT-%8;PAjN=#9;zBV!SH{SB+89-J{H>8!k*59|FYxt-n5%vASakcEGX12 zv=s3RJ^jkdm3IQ|A4TgAmM9qXy+moH40&nKmL8&6cbC5XpSr~6nAw+LLt9W$0Tix> zFFrC(jNy)Olf_XoQNELcdh8M<`S<_)==Jy6`m4p1h+eSYT#}>-pvhbR1~)*=|DT}i zJzQOaFt-X3u}IdEwJ7YTe9dn9{(}0+;fK^jr5ov{7j(G*t#u*G*PF(^e^fF?hV}*h zKyz%_B%Z<)ul7gLimi7T+|&iC8vA(qn85Z{>I3Y0`WXBB&quoYl6RtYDc0;gghq6@} z5{GYNiD5?Inzpjd)Sm#WNpWKBkg={Q@ri+rQBE>{8{6q_PQDoIy8ua~xe;N?iska3HcbrE!#bupTa9KaA#+ z_A|pT&6Df|sU4<{yRpVDcGA<216JjPU7bnKxlQ0 zWbwE4@PFTCcX6ErJNYeGrWc_8$BYPvM=EdCw$!gLfjyt-RpuLqO1Kyb;7fZ=whfv6 zB}bOxAlyKsiF=RGlwV3Q+i9%3`}AA^m40$-T$x;mRgS5L7E`=F{7T=A~f>$frsPw)RVcjbRgTw6Q~ zArYbkgn)u123t_nU{#20nFxwv5iwM-Py;BU<%8gsR@W<;Ve7MNSM&^@unrFTsNU>E+3PruBak z9DV+byErvr99(Xpx}=;@Xx1nn_Vr7s5x4+P28PE@9Poj@zJurLiN_zgOfe9`6+Yeh(K#vr5mL% zPZsmKxnvI0$e1{k&DachZ#Z^;9sXNn_!g7MJLuxLC0(E4M=wHU`YPv*3&?7bQ$d9K zioSKCWcjt6PN%keeZ2f(0~Il_bE)5b_rZ@?2avR{7gKQcKG*)Gsu<#t%pY` zX}Jeck+X?8JID|gGE1@~L#`sX_e9?0z5hA767)XWa<_0Bx9iJXgsbsKP{*h+^*AMZ zKk%ou+cES*4`hmmdq;yNpm|$ago^RU{`@CImW%JU`TFLT$=Sh*mXZxqElUURAdpUb z$HoeMW=Hj?Z^@s6OuWxMb*+E&f>75+rQL2-4diCl_j&ZcOEvs1kWDva4%()udN!zn zL^C}gFC#i@V;%znalgo}b%z&D_d?P<#Sd2F&zS{MVeUcD`c3$)$ZXRV#$Uqu7$pOH4qcmcvJTp%s+!jG_MS`_7)K8`7VK z^VTHgvhp|HYTWWeWLkiyP;vLV%RZ+uhK@?CJxi%3r^WMwu)l%1XoGOw*lQeeuG5cE z7q)}JqR;*Fl3_wSB}rcCO71VUJNWwXY_D1783IjPDLXXQb6C5-ESdGs%dqRbsqyi_8`UI%84w1Kr< z=g<}hdmdwZsULc2EKe2`d}yvSK%n{MW){&qvC8Z8_|dQg16YYkzIV@=&Tq4CxN+i@ zFm3zZwhGySqzIYFW7R7fUnJ1e=bnMvA=PjBES`FvZ*bskJ|NI1>Auv(Ply6^^EI=n z6C$$jR>QmOS&{RURu=d%%(r;mon}5u`K09a7$g1Yg6#6%)wq%}P0fdb0pa}swe7Of zrhKfPbjmhFkwV|ixsB+fz1n9wAOIy6j1#6*<$+lfhH4un9-hFw57EG0O4|4Z&OYx>G1vNh~Rz2^T*v(%a4k#=zf{*^kg+kMHCfp zgU%>5;W1lR4YQ}Pg(jmRY$1YxJ_U9K-I;|#&<|OoNe+qrB$g^eT1LF8w$3Qbz-sr- zP!(yleL{1;+{DYCI-nh=6)pDaNB;(aX(EESHe16)oi!CfW1kMG8D^}CeBY;vr~R=-e48@B}$*p{122kcC+mEtYv`*b`E>JLL9 zEY0zDfH#|)IM(OU+Qj@J(1+{O#V}*KE>NFK@^zZ*|1>=)o?@qA!nrWnISv!Dkcq^Zk18?AvMe5GTBlW`%Wg2&$o(* zf72O*2_LW;s}g&oL+Oye@vkud#ttB{^AjhxNKVs*jfPY#Xp$I^$WN8D9{tQInsib0 zf;2SA2Gj!hZTzzKQHTkQYl1N&*a2I(ry-v@ueC{%=|u^61zw4t$E&t=BfD`w=|hzk zDDo;JbC&gpGk_&RwE+2txxXE^+GK|V8-Ntxw^Q1)P^OrrAP4&%N<$?{^dbw4I$w>+ z$Ol1epE;aNHkwD{V@XeQ>!K$R48fR(Yt0hv#zr6r*aag9>=8G1Vm_4ftW)IO>k-Ky z56qkIVx0Hs@iAu-7w~G2?*F!ZW)9OBMHu~Cd@jNgO;`!4Z+7m|%S`iuk_4+z|C8gucvL&4SZkmhx0)`=I>NNRC&#vhIiVd0H4n)6$t { + const w = new BrowserWindow({ + show: false, + icon: path.join(__dirname, 'icon.png') + }); + w.webContents.on('did-finish-load', () => { + app.quit(); + }); + w.loadURL('about:blank'); +}); diff --git a/spec-main/fixtures/apps/xwindow-icon/package.json b/spec-main/fixtures/apps/xwindow-icon/package.json new file mode 100644 index 000000000000..595e59b0f0f4 --- /dev/null +++ b/spec-main/fixtures/apps/xwindow-icon/package.json @@ -0,0 +1,4 @@ +{ + "name": "electron-xwindow-icon", + "main": "main.js" + } \ No newline at end of file