chore: remove revert_remove_contentrendererclient_shouldfork.patch (#29842)

This commit is contained in:
Robo 2021-06-23 06:50:57 +09:00 committed by GitHub
parent b8261f1591
commit 6e310b7424
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 3 additions and 146 deletions

View file

@ -57,7 +57,6 @@ allow_new_privileges_in_unsandboxed_child_processes.patch
expose_setuseragent_on_networkcontext.patch expose_setuseragent_on_networkcontext.patch
feat_add_set_theme_source_to_allow_apps_to.patch feat_add_set_theme_source_to_allow_apps_to.patch
add_webmessageportconverter_entangleandinjectmessageportchannel.patch add_webmessageportconverter_entangleandinjectmessageportchannel.patch
revert_remove_contentrendererclient_shouldfork.patch
ignore_rc_check.patch ignore_rc_check.patch
remove_usage_of_incognito_apis_in_the_spellchecker.patch remove_usage_of_incognito_apis_in_the_spellchecker.patch
chore_use_electron_resources_not_chrome_for_spellchecker.patch chore_use_electron_resources_not_chrome_for_spellchecker.patch

View file

@ -11,7 +11,7 @@ This regressed in https://chromium-review.googlesource.com/c/chromium/src/+/2572
Upstream: https://chromium-review.googlesource.com/c/chromium/src/+/2598393 Upstream: https://chromium-review.googlesource.com/c/chromium/src/+/2598393
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 260551dbdbbe8b2f2366365397ebc619d941e5ec..ec98fdd1a62c6fb9d934caa6aed4fba0cd3aed38 100644 index 8818e803bc10c3032ecbf582df49dd37487f137d..86ed3fc858d83268dba9fb2bfd0492149433129a 100644
--- a/content/renderer/render_frame_impl.cc --- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2325,7 +2325,7 @@ const blink::WebView* RenderFrameImpl::GetWebView() const { @@ -2325,7 +2325,7 @@ const blink::WebView* RenderFrameImpl::GetWebView() const {

View file

@ -1,116 +0,0 @@
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 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.

View file

@ -19,10 +19,10 @@ that clearly establishes the worker script is ready for evaluation with the scop
initialized. initialized.
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index bfc7b531b3d0958d8638330eb155e85c75ae6f8b..bfa3948abb30f59148e149a6386ac090a440e1b4 100644 index d8c7a1954d5acc0eb4bb675795038eae0e16bc05..0eee88a106abdc6f232b384265da03e85075fb00 100644
--- a/content/public/renderer/content_renderer_client.h --- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h
@@ -372,6 +372,11 @@ class CONTENT_EXPORT ContentRendererClient { @@ -366,6 +366,11 @@ class CONTENT_EXPORT ContentRendererClient {
virtual void DidInitializeWorkerContextOnWorkerThread( virtual void DidInitializeWorkerContextOnWorkerThread(
v8::Local<v8::Context> context) {} v8::Local<v8::Context> context) {}

View file

@ -165,17 +165,6 @@ void ElectronRendererClient::WillReleaseScriptContext(
electron_bindings_->EnvironmentDestroyed(env); electron_bindings_->EnvironmentDestroyed(env);
} }
bool ElectronRendererClient::ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
bool is_server_redirect) {
// Handle all the navigations and reloads in browser.
// FIXME We only support GET here because http method will be ignored when
// the OpenURLFromTab is triggered, which means form posting would not work,
// we should solve this by patching Chromium in future.
return http_method == net::HttpRequestHeaders::kGetMethod;
}
void ElectronRendererClient::WorkerScriptReadyForEvaluationOnWorkerThread( void ElectronRendererClient::WorkerScriptReadyForEvaluationOnWorkerThread(
v8::Local<v8::Context> context) { v8::Local<v8::Context> context) {
// TODO(loc): Note that this will not be correct for in-process child windows // TODO(loc): Note that this will not be correct for in-process child windows

View file

@ -36,10 +36,6 @@ class ElectronRendererClient : public RendererClientBase {
void RenderFrameCreated(content::RenderFrame*) override; void RenderFrameCreated(content::RenderFrame*) override;
void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override; void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override; void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
bool ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
bool is_server_redirect) override;
void WorkerScriptReadyForEvaluationOnWorkerThread( void WorkerScriptReadyForEvaluationOnWorkerThread(
v8::Local<v8::Context> context) override; v8::Local<v8::Context> context) override;
void WillDestroyWorkerContextOnWorkerThread( void WillDestroyWorkerContextOnWorkerThread(

View file

@ -254,11 +254,4 @@ void ElectronSandboxedRendererClient::WillReleaseScriptContext(
InvokeHiddenCallback(context, kLifecycleKey, "onExit"); InvokeHiddenCallback(context, kLifecycleKey, "onExit");
} }
bool ElectronSandboxedRendererClient::ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
bool is_server_redirect) {
return true;
}
} // namespace electron } // namespace electron

View file

@ -30,10 +30,6 @@ class ElectronSandboxedRendererClient : public RendererClientBase {
void RenderFrameCreated(content::RenderFrame*) override; void RenderFrameCreated(content::RenderFrame*) override;
void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override; void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override; void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
bool ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
bool is_server_redirect) override;
private: private:
std::unique_ptr<base::ProcessMetrics> metrics_; std::unique_ptr<base::ProcessMetrics> metrics_;