|
@@ -1,116 +0,0 @@
|
|
|
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
-From: Shelley Vohr <[email protected]>
|
|
|
-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 89f15b443f97a98c6472aef2f2c8062ab70b3a9f..b9a4ce636692813de2a3dd34f0e749bb94a4729f 100644
|
|
|
---- a/chrome/renderer/chrome_content_renderer_client.cc
|
|
|
-+++ b/chrome/renderer/chrome_content_renderer_client.cc
|
|
|
-@@ -1329,6 +1329,24 @@ ChromeContentRendererClient::GetProtocolHandlerSecurityLevel() {
|
|
|
- #endif
|
|
|
- }
|
|
|
-
|
|
|
-+bool ChromeContentRendererClient::ShouldFork(WebLocalFrame* frame,
|
|
|
-+ const GURL& url,
|
|
|
-+ const std::string& http_method,
|
|
|
-+ 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 0b9f4e64d09774b1a249eac0b17a6519effd156c..eb25f5e7b54dddb07fefeaeca5448df2cd41753d 100644
|
|
|
---- a/chrome/renderer/chrome_content_renderer_client.h
|
|
|
-+++ b/chrome/renderer/chrome_content_renderer_client.h
|
|
|
-@@ -122,6 +122,10 @@ 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_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 32dbc4de0813795043e8e33840ff04540329d5e7..5f5593eb266189e06e23109d72adbeb145c23199 100644
|
|
|
---- a/content/public/renderer/content_renderer_client.cc
|
|
|
-+++ b/content/public/renderer/content_renderer_client.cc
|
|
|
-@@ -112,6 +112,13 @@ bool ContentRendererClient::HandleNavigation(
|
|
|
- }
|
|
|
- #endif
|
|
|
-
|
|
|
-+bool ContentRendererClient::ShouldFork(blink::WebLocalFrame* frame,
|
|
|
-+ const GURL& url,
|
|
|
-+ const std::string& http_method,
|
|
|
-+ 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 d8c7a1954d5acc0eb4bb675795038eae0e16bc05..bfc7b531b3d0958d8638330eb155e85c75ae6f8b 100644
|
|
|
---- a/content/public/renderer/content_renderer_client.h
|
|
|
-+++ b/content/public/renderer/content_renderer_client.h
|
|
|
-@@ -202,6 +202,12 @@ 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_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 8818e803bc10c3032ecbf582df49dd37487f137d..260551dbdbbe8b2f2366365397ebc619d941e5ec 100644
|
|
|
---- a/content/renderer/render_frame_impl.cc
|
|
|
-+++ b/content/renderer/render_frame_impl.cc
|
|
|
-@@ -5040,6 +5040,22 @@ 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.
|
|
|
-+ should_fork = GetContentClient()->renderer()->ShouldFork(
|
|
|
-+ frame_, url, info->url_request.HttpMethod().Utf8(),
|
|
|
-+ false /* is_redirect */);
|
|
|
-+ }
|
|
|
-+
|
|
|
- if (should_fork) {
|
|
|
- OpenURL(std::move(info));
|
|
|
- return; // Suppress the load here.
|