From 48f4ef65ed08e280bd38347beabd26a79cf664cf Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Mon, 13 Jun 2022 17:37:28 -0400 Subject: [PATCH] refactor: move duplicate code to RendererClientBase::ShouldLoadPreload helper (#34520) Co-authored-by: Milan Burda --- shell/renderer/electron_renderer_client.cc | 19 +-------------- .../electron_sandboxed_renderer_client.cc | 22 +----------------- shell/renderer/renderer_client_base.cc | 23 +++++++++++++++++++ shell/renderer/renderer_client_base.h | 3 +++ 4 files changed, 28 insertions(+), 39 deletions(-) diff --git a/shell/renderer/electron_renderer_client.cc b/shell/renderer/electron_renderer_client.cc index 1c819d13c445b..24c5bc9f7613c 100644 --- a/shell/renderer/electron_renderer_client.cc +++ b/shell/renderer/electron_renderer_client.cc @@ -24,15 +24,6 @@ namespace electron { -namespace { - -bool IsDevToolsExtension(content::RenderFrame* render_frame) { - return static_cast(render_frame->GetWebFrame()->GetDocument().Url()) - .SchemeIs("chrome-extension"); -} - -} // namespace - ElectronRendererClient::ElectronRendererClient() : node_bindings_( NodeBindings::Create(NodeBindings::BrowserEnvironment::kRenderer)), @@ -77,15 +68,7 @@ void ElectronRendererClient::DidCreateScriptContext( // Only load Node.js if we are a main frame or a devtools extension // unless Node.js support has been explicitly enabled for subframes. - auto prefs = render_frame->GetBlinkPreferences(); - bool is_main_frame = render_frame->IsMainFrame(); - bool is_devtools = IsDevToolsExtension(render_frame); - bool allow_node_in_subframes = prefs.node_integration_in_sub_frames; - - bool should_load_node = - (is_main_frame || is_devtools || allow_node_in_subframes) && - !IsWebViewFrame(renderer_context, render_frame); - if (!should_load_node) + if (!ShouldLoadPreload(renderer_context, render_frame)) return; injected_frames_.insert(render_frame); diff --git a/shell/renderer/electron_sandboxed_renderer_client.cc b/shell/renderer/electron_sandboxed_renderer_client.cc index c1f1ae7a61c28..a73404ac026a6 100644 --- a/shell/renderer/electron_sandboxed_renderer_client.cc +++ b/shell/renderer/electron_sandboxed_renderer_client.cc @@ -36,16 +36,6 @@ namespace { const char kLifecycleKey[] = "lifecycle"; const char kModuleCacheKey[] = "native-module-cache"; -bool IsDevTools(content::RenderFrame* render_frame) { - return render_frame->GetWebFrame()->GetDocument().Url().ProtocolIs( - "devtools"); -} - -bool IsDevToolsExtension(content::RenderFrame* render_frame) { - return render_frame->GetWebFrame()->GetDocument().Url().ProtocolIs( - "chrome-extension"); -} - v8::Local GetModuleCache(v8::Isolate* isolate) { auto context = isolate->GetCurrentContext(); gin_helper::Dictionary global(isolate, context->Global()); @@ -207,17 +197,7 @@ void ElectronSandboxedRendererClient::DidCreateScriptContext( // Only allow preload for the main frame or // For devtools we still want to run the preload_bundle script // Or when nodeSupport is explicitly enabled in sub frames - bool is_main_frame = render_frame->IsMainFrame(); - bool is_devtools = - IsDevTools(render_frame) || IsDevToolsExtension(render_frame); - - bool allow_node_in_sub_frames = - render_frame->GetBlinkPreferences().node_integration_in_sub_frames; - - bool should_load_preload = - (is_main_frame || is_devtools || allow_node_in_sub_frames) && - !IsWebViewFrame(context, render_frame); - if (!should_load_preload) + if (!ShouldLoadPreload(context, render_frame)) return; injected_frames_.insert(render_frame); diff --git a/shell/renderer/renderer_client_base.cc b/shell/renderer/renderer_client_base.cc index ed5fba4a45cf7..c1e177049230d 100644 --- a/shell/renderer/renderer_client_base.cc +++ b/shell/renderer/renderer_client_base.cc @@ -134,6 +134,16 @@ class ChromePdfInternalPluginDelegate final // static RendererClientBase* g_renderer_client_base = nullptr; +bool IsDevTools(content::RenderFrame* render_frame) { + return render_frame->GetWebFrame()->GetDocument().Url().ProtocolIs( + "devtools"); +} + +bool IsDevToolsExtension(content::RenderFrame* render_frame) { + return render_frame->GetWebFrame()->GetDocument().Url().ProtocolIs( + "chrome-extension"); +} + } // namespace RendererClientBase::RendererClientBase() { @@ -196,6 +206,19 @@ void RendererClientBase::BindProcess(v8::Isolate* isolate, process->SetReadOnly("contextId", context_id); } +bool RendererClientBase::ShouldLoadPreload( + v8::Handle context, + content::RenderFrame* render_frame) const { + auto prefs = render_frame->GetBlinkPreferences(); + bool is_main_frame = render_frame->IsMainFrame(); + bool is_devtools = + IsDevTools(render_frame) || IsDevToolsExtension(render_frame); + bool allow_node_in_sub_frames = prefs.node_integration_in_sub_frames; + + return (is_main_frame || is_devtools || allow_node_in_sub_frames) && + !IsWebViewFrame(context, render_frame); +} + void RendererClientBase::RenderThreadStarted() { auto* command_line = base::CommandLine::ForCurrentProcess(); diff --git a/shell/renderer/renderer_client_base.h b/shell/renderer/renderer_client_base.h index 821e7e2d6d2d3..474a5e1a44e69 100644 --- a/shell/renderer/renderer_client_base.h +++ b/shell/renderer/renderer_client_base.h @@ -93,6 +93,9 @@ class RendererClientBase : public content::ContentRendererClient gin_helper::Dictionary* process, content::RenderFrame* render_frame); + bool ShouldLoadPreload(v8::Handle context, + content::RenderFrame* render_frame) const; + // content::ContentRendererClient: void RenderThreadStarted() override; void ExposeInterfacesToBrowser(mojo::BinderMap* binders) override;