electron/patches/chromium/revert_remove_contentrendererclient_shouldfork.patch
Electron Bot 4588a41161
chore: bump chromium to 096e5313aaf19dfa0c4710145c34d (master) (#26535)
* chore: bump chromium in DEPS to 1d6b29cd85c1c3cba093b8b69b2727cc26eaac97

* update patches

* chore: use 'libvulkan.so.1' in the linux manifests

CL: https://chromium-review.googlesource.com/c/angle/angle/+/2538430

Upstream renamed libvulkan.so to libvulkan.so.1, so sync our manifests.

* chore: update expected window-open default policy.

CL: https://chromium-review.googlesource.com/c/chromium/src/+/2429247

Upstream CL contiues the work to make `strict-origin-when-cross-origin`
the default referrer policy. This commit changes our window-open tests
to expect that policy over the previous `no-referrer-when-downgrade`.

* chore: bump chromium in DEPS to 69cb7c65ad845cdab1cd5f4256237e72fceba2dd

* chore: re-export chromium patches

No code changes; just line numbers. `git am` failed because the upstream
changes were just large enough to require patching to fail w/o fuzzing.

The broken patch was
patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch

* update patches

* chore: bump chromium in DEPS to c6d97a240d30e5f5166856f5ae6ee14d95b9a4f0

* update patches

* fixup! chore: update expected window-open default policy.

* chore: disallow copying CppHeapCreateParams

Experimental commit to resolve FTBS https://ci.appveyor.com/project/electron-bot/electron-ljo26/builds/36405680#L25345
which introduces a new struct CppHeapCreateParams that aggregates a
vector of unique_ptrs. Our Windows CI is unhappy that this struct
implicitly deletes its copy ctor, so this commit makes it explicit.

Xref: https://chromium-review.googlesource.com/c/v8/v8/+/2536642

* update patches

* chore: bump chromium in DEPS to 0df9a85ffa0ad4711b41a089842e40b87ba88055

* update patches

* fixup! chore: bump chromium to ac06d6903a2c981ab90a8162f1ba0 (master) (#26499)

* chore: update calls to gfx::RemoveAcceleratorChar.

The call signature for gfx::RemoveAccelerator changed in
https://chromium-review.googlesource.com/c/chromium/src/+/2546471 .
This commit updates use to match that.

* chore: bump chromium in DEPS to 43d6c496251e08d3781bfadbe9727688551f74a9

* update patches

* chore: bump chromium in DEPS to 1fb5c9825be4e2271c4fef0e802f5d970b32f62f

* update patches

* chore: bump chromium in DEPS to 8a1f078d67825e727a598b89a8924699df8d3850

* chore: bump chromium in DEPS to 28ff715b3a97d8cedc143bad671edb08b6de5fc2

* chore: update patches

* Remove most service manifest remnants from Content

https://chromium-review.googlesource.com/c/chromium/src/+/2296482

* Reland "Portals: Fix a11y for orphaned portals"

https://chromium-review.googlesource.com/c/chromium/src/+/2542812

* Convert CallbackList::Subscription to a standalone class.

https://chromium-review.googlesource.com/c/chromium/src/+/2522860

* fix: actually apply the zlib patch

* chore: bump chromium in DEPS to 75b464e6357190ca302ba9ce8f8c2bf5a3b709ae

* chore: update patches

* chore: bump chromium@b884b9b2f647c59a75f5d2055030afa33d50ca10

* chore: bump chromium in DEPS to 829261dadcefdc54ce5fdf7c5fac2929786a63ce

* chore: bump chromium in DEPS to 5df3e69605c7c0130374aaccb91fc4726a558db2

* chore: bump chromium in DEPS to 22db748d5b7b90f87e6e97ef4c92a727ac753ea4

* chore: bump chromium in DEPS to 1475df80282b7eeeb0e153d8375bfe651f083bf8

* chore: bump chromium in DEPS to 6d34fe9e9b7386edd90574617bfa4008de972d72

* chore: update patches

* Disable CertVerifierService for now

2559260: Enable CertVerifierService by default | https://chromium-review.googlesource.com/c/chromium/src/+/2559260

* Remove force_ignore_site_for_cookies until we figure out what to do instead

2499162: Remove |force_ignore_site_for_cookies| from IPCs (e.g. ResourceRequest). | https://chromium-review.googlesource.com/c/chromium/src/+/2499162

* chore: bump chromium in DEPS to 95aeb1c59ebc03d19ba077b0cd707463d1b2865e

* update patches

* Set site_for_cookies to request url so that URLLoader::ShouldForceIgnoreSiteForCookies returns true

* 2490383: a11y inspect reorg: implement accessible tree formatter factory

https://chromium-review.googlesource.com/c/chromium/src/+/2490383

* 2485887: [Extensions][web_accessible_resources] Use |matches|.

https://chromium-review.googlesource.com/c/chromium/src/+/2485887

* update v8 headers

* chore: bump chromium in DEPS to 38587dc379a8cf4d4a13e482a6e89f2fe681144e

* update patches

* 2555005: [api] Simplify ScriptOrigin

https://chromium-review.googlesource.com/c/v8/v8/+/2555005

* 2563553: Remove Flash from PermissionRequestTypes and PermissionTypes.

https://chromium-review.googlesource.com/c/chromium/src/+/2563553

* 2546146: Remove browser-hosted InterfaceProvider

https://chromium-review.googlesource.com/c/chromium/src/+/2546146

* Actually apply nan patch

* update patches

* chore: bump chromium in DEPS to 6718d4b50c9db975c5642ca5b68e8dc7ee1b7615

* update patches

* 2546146: Remove browser-hosted InterfaceProvider

https://chromium-review.googlesource.com/c/chromium/src/+/2546146

* chore: bump chromium in DEPS to 338cc300e3fe3a4cb4883e9ccdc34a32f3dfe034

* chore: bump chromium in DEPS to d9baeb1d192c23ceb1e1c4bbe6af98380b263bc1

* chore: bump chromium in DEPS to 3ca3051932683739b304e721cc394b6c66f841fe

* chore: bump chromium in DEPS to 89292a4ae29096e5313aaf19dfa0c4710145c34d

* 2571639: mac: Remove code to support OS X 10.10 in //sandbox

https://chromium-review.googlesource.com/c/chromium/src/+/2571639

* Fixup patch indices

* Do not build MTLManagedObjectAdapter

It's been removed in newer Mantle versions and uses a deprecated enum

* update patches

* Remove sendToAll

https://github.com/electron/electron/pull/26771

* 2569367: Remove dead fullscreen code in RenderWidgetHostView and friends

https://chromium-review.googlesource.com/c/chromium/src/+/2569367

* Remove deprecated performFileOperation usage

* 2568359: mac: Ignore Wdeprecated-declarations for LSSharedFileList* functions.

https://chromium-review.googlesource.com/c/chromium/src/+/2568359

* 2561401: Add OutputPresenterX11 which uses X11 present extension.

https://chromium-review.googlesource.com/c/chromium/src/+/2561401

* 2565511: [objects] Remove MakeExternal case for uncached internal strings

https://chromium-review.googlesource.com/c/v8/v8/+/2565511

* fixup: Add disconnect logic to ElectronBrowserHandlerImpl

* Allow local networking override for ATS

https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

* Refactor: clean up rfh getters in ElectronBrowserHandlerImpl

* Update patches

* Remove unneeded BindTo

* Don't assign ElectronBrowserHandlerImpl at all

Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2020-12-14 10:57:36 -08:00

121 lines
5.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shelley Vohr <shelley.vohr@gmail.com>
Date: Tue, 4 Feb 2020 08:59:32 -0700
Subject: Revert "Remove ContentRendererClient::ShouldFork."
This reverts the CL at https://chromium-review.googlesource.com/c/chromium/src/+/1812128.
We use it to force a new renderer process for navigations, and need to start a new renderer process
for every navigation to keep Node.js working properly. Once Native Modules in the renderer process
are required to be NAPI or context aware (Electron v11), this patch can be removed.
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index e9c8c71a0b2e7a431f14b873a114e741a4c129fb..5db4a2f36da1761f94d7ce58483d4d6544b8daf9 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -1275,6 +1275,25 @@ ChromeContentRendererClient::GetProtocolHandlerSecurityLevel() {
#endif
}
+bool ChromeContentRendererClient::ShouldFork(WebLocalFrame* frame,
+ const GURL& url,
+ const std::string& http_method,
+ bool is_initial_navigation,
+ bool is_server_redirect) {
+ DCHECK(!frame->Parent());
+
+ // If |url| matches one of the prerendered URLs, stop this navigation and try
+ // to swap in the prerendered page on the browser process. If the prerendered
+ // page no longer exists by the time the OpenURL IPC is handled, a normal
+ // navigation is attempted.
+ if (prerender_dispatcher_.get() &&
+ prerender_dispatcher_->IsPrerenderURL(url)) {
+ return true;
+ }
+
+ return false;
+}
+
void ChromeContentRendererClient::WillSendRequest(
WebLocalFrame* frame,
ui::PageTransition transition_type,
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 857b350afe980dd79e4c76ebd3cb1be461457f0a..1cac9fc1d8d92d5afe02aa1d1dba05895d4d2672 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -122,6 +122,11 @@ class ChromeContentRendererClient
base::SingleThreadTaskRunner* compositor_thread_task_runner) override;
bool RunIdleHandlerWhenWidgetsHidden() override;
bool AllowPopup() override;
+ bool ShouldFork(blink::WebLocalFrame* frame,
+ const GURL& url,
+ const std::string& http_method,
+ bool is_initial_navigation,
+ bool is_server_redirect) override;
blink::ProtocolHandlerSecurityLevel GetProtocolHandlerSecurityLevel()
override;
void WillSendRequest(blink::WebLocalFrame* frame,
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 6aea489e574bd0a8bc882d2f2d29e4929f8ce261..2397ccf48fa54e678652b93896665f89a039a992 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -115,6 +115,14 @@ bool ContentRendererClient::HandleNavigation(
}
#endif
+bool ContentRendererClient::ShouldFork(blink::WebLocalFrame* frame,
+ const GURL& url,
+ const std::string& http_method,
+ bool is_initial_navigation,
+ bool is_server_redirect) {
+ return false;
+}
+
void ContentRendererClient::WillSendRequest(
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 16d0dd4456f214b14fbdf224ba938ebb1cb63106..4dc340938d54597a315ebb441d769dccb398757d 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -210,6 +210,13 @@ class CONTENT_EXPORT ContentRendererClient {
bool is_redirect);
#endif
+ // Returns true if we should fork a new process for the given navigation.
+ virtual bool ShouldFork(blink::WebLocalFrame* frame,
+ const GURL& url,
+ const std::string& http_method,
+ bool is_initial_navigation,
+ bool is_server_redirect);
+
// Notifies the embedder that the given frame is requesting the resource at
// |url|. If the function returns a valid |new_url|, the request must be
// updated to use it.
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 536b5a72f4994bde01c6c96ffbca74499ad39a7c..0faa12629b99ea9f5079b53c16f8d6b4b39a41d7 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -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);
+
+ if (!should_fork && url.SchemeIs(url::kFileScheme)) {
+ // Fork non-file to file opens (see https://crbug.com/1031119). Note that
+ // this may fork unnecessarily if another tab (hosting a file or not)
+ // targeted this one before its initial navigation, but that shouldn't
+ // cause a problem.
+ should_fork = !old_url.SchemeIs(url::kFileScheme);
+ }
+
+ if (!should_fork) {
+ // Give the embedder a chance.
+ bool is_initial_navigation = render_view_->history_list_length_ == 0;
+ should_fork = GetContentClient()->renderer()->ShouldFork(
+ frame_, url, info->url_request.HttpMethod().Utf8(),
+ is_initial_navigation, false /* is_redirect */);
+ }
+
if (should_fork) {
OpenURL(std::move(info));
return; // Suppress the load here.