From dd40d087da0c61fa0190595ad9daeebbc0f6b96a Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 9 Feb 2022 10:57:18 -0500 Subject: [PATCH 1/2] Make ElectronBrowser mojo interface frame associated. (#32815) Co-authored-by: Marek Haranczyk --- shell/browser/electron_browser_client.cc | 21 ++++++++++++------- .../browser/electron_browser_handler_impl.cc | 4 ++-- shell/browser/electron_browser_handler_impl.h | 9 ++++---- .../renderer/api/electron_api_ipc_renderer.cc | 9 ++++---- shell/renderer/api/electron_api_web_frame.cc | 14 ++++++------- .../electron_render_frame_observer.cc | 13 ++++++------ 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/shell/browser/electron_browser_client.cc b/shell/browser/electron_browser_client.cc index ae573a2f977e9..aa8085c8b266b 100644 --- a/shell/browser/electron_browser_client.cc +++ b/shell/browser/electron_browser_client.cc @@ -1450,6 +1450,12 @@ bool ElectronBrowserClient::PreSpawnChild( } #endif // defined(OS_WIN) +void BindElectronBrowser( + mojo::PendingAssociatedReceiver receiver, + content::RenderFrameHost* frame_host) { + ElectronBrowserHandlerImpl::Create(frame_host, std::move(receiver)); +} + bool ElectronBrowserClient::BindAssociatedReceiverFromFrame( content::RenderFrameHost* render_frame_host, const std::string& interface_name, @@ -1460,6 +1466,13 @@ bool ElectronBrowserClient::BindAssociatedReceiverFromFrame( render_frame_host); return true; } + if (interface_name == electron::mojom::ElectronBrowser::Name_) { + BindElectronBrowser( + mojo::PendingAssociatedReceiver( + std::move(*handle)), + render_frame_host); + return true; + } #if BUILDFLAG(ENABLE_PRINTING) if (interface_name == printing::mojom::PrintManagerHost::Name_) { mojo::PendingAssociatedReceiver receiver( @@ -1521,12 +1534,6 @@ void ElectronBrowserClient::BindHostReceiverForRenderer( #endif } -void BindElectronBrowser( - content::RenderFrameHost* frame_host, - mojo::PendingReceiver receiver) { - ElectronBrowserHandlerImpl::Create(frame_host, std::move(receiver)); -} - #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS) void BindMimeHandlerService( content::RenderFrameHost* frame_host, @@ -1575,8 +1582,6 @@ void ElectronBrowserClient::RegisterBrowserInterfaceBindersForFrame( base::BindRepeating(&BindNetworkHintsHandler)); map->Add( base::BindRepeating(&badging::BadgeManager::BindFrameReceiver)); - map->Add( - base::BindRepeating(&BindElectronBrowser)); map->Add(base::BindRepeating( &content::KeyboardLockServiceImpl::CreateMojoService)); #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS) diff --git a/shell/browser/electron_browser_handler_impl.cc b/shell/browser/electron_browser_handler_impl.cc index 665d2b2897b3c..e66968b0cb132 100644 --- a/shell/browser/electron_browser_handler_impl.cc +++ b/shell/browser/electron_browser_handler_impl.cc @@ -15,7 +15,7 @@ namespace electron { ElectronBrowserHandlerImpl::ElectronBrowserHandlerImpl( content::RenderFrameHost* frame_host, - mojo::PendingReceiver receiver) + mojo::PendingAssociatedReceiver receiver) : render_process_id_(frame_host->GetProcess()->GetID()), render_frame_id_(frame_host->GetRoutingID()) { content::WebContents* web_contents = @@ -135,7 +135,7 @@ content::RenderFrameHost* ElectronBrowserHandlerImpl::GetRenderFrameHost() { // static void ElectronBrowserHandlerImpl::Create( content::RenderFrameHost* frame_host, - mojo::PendingReceiver receiver) { + mojo::PendingAssociatedReceiver receiver) { new ElectronBrowserHandlerImpl(frame_host, std::move(receiver)); } } // namespace electron diff --git a/shell/browser/electron_browser_handler_impl.h b/shell/browser/electron_browser_handler_impl.h index 92802f7cdcb94..84d3c25f5f631 100644 --- a/shell/browser/electron_browser_handler_impl.h +++ b/shell/browser/electron_browser_handler_impl.h @@ -26,10 +26,11 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, public: explicit ElectronBrowserHandlerImpl( content::RenderFrameHost* render_frame_host, - mojo::PendingReceiver receiver); + mojo::PendingAssociatedReceiver receiver); - static void Create(content::RenderFrameHost* frame_host, - mojo::PendingReceiver receiver); + static void Create( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver receiver); // mojom::ElectronBrowser: void Message(bool internal, @@ -73,7 +74,7 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, const int render_process_id_; const int render_frame_id_; - mojo::Receiver receiver_{this}; + mojo::AssociatedReceiver receiver_{this}; base::WeakPtrFactory weak_factory_{this}; diff --git a/shell/renderer/api/electron_api_ipc_renderer.cc b/shell/renderer/api/electron_api_ipc_renderer.cc index 74bf0e1dccc05..6b4f2698a968a 100644 --- a/shell/renderer/api/electron_api_ipc_renderer.cc +++ b/shell/renderer/api/electron_api_ipc_renderer.cc @@ -22,7 +22,7 @@ #include "shell/common/node_bindings.h" #include "shell/common/node_includes.h" #include "shell/common/v8_value_serializer.h" -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_message_port_converter.h" @@ -59,8 +59,8 @@ class IPCRenderer : public gin::Wrappable, v8::Global(isolate, isolate->GetCurrentContext()); weak_context_.SetWeak(); - render_frame->GetBrowserInterfaceBroker()->GetInterface( - electron_browser_remote_.BindNewPipeAndPassReceiver()); + render_frame->GetRemoteAssociatedInterfaces()->GetInterface( + &electron_browser_remote_); } void OnDestruct() override { electron_browser_remote_.reset(); } @@ -223,7 +223,8 @@ class IPCRenderer : public gin::Wrappable, } v8::Global weak_context_; - mojo::Remote electron_browser_remote_; + mojo::AssociatedRemote + electron_browser_remote_; }; gin::WrapperInfo IPCRenderer::kWrapperInfo = {gin::kEmbedderNativeGin}; diff --git a/shell/renderer/api/electron_api_web_frame.cc b/shell/renderer/api/electron_api_web_frame.cc index 873751f301127..d3736ed0cc33a 100644 --- a/shell/renderer/api/electron_api_web_frame.cc +++ b/shell/renderer/api/electron_api_web_frame.cc @@ -34,7 +34,7 @@ #include "shell/renderer/api/electron_api_context_bridge.h" #include "shell/renderer/api/electron_api_spell_check_client.h" #include "shell/renderer/renderer_client_base.h" -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/web_cache/web_cache_resource_type_stats.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" @@ -449,9 +449,9 @@ class WebFrameRenderer : public gin::Wrappable, if (!MaybeGetRenderFrame(isolate, "setZoomLevel", &render_frame)) return; - mojo::Remote browser_remote; - render_frame->GetBrowserInterfaceBroker()->GetInterface( - browser_remote.BindNewPipeAndPassReceiver()); + mojo::AssociatedRemote browser_remote; + render_frame->GetRemoteAssociatedInterfaces()->GetInterface( + &browser_remote); browser_remote->SetTemporaryZoomLevel(level); } @@ -461,9 +461,9 @@ class WebFrameRenderer : public gin::Wrappable, if (!MaybeGetRenderFrame(isolate, "getZoomLevel", &render_frame)) return result; - mojo::Remote browser_remote; - render_frame->GetBrowserInterfaceBroker()->GetInterface( - browser_remote.BindNewPipeAndPassReceiver()); + mojo::AssociatedRemote browser_remote; + render_frame->GetRemoteAssociatedInterfaces()->GetInterface( + &browser_remote); browser_remote->DoGetZoomLevel(&result); return result; } diff --git a/shell/renderer/electron_render_frame_observer.cc b/shell/renderer/electron_render_frame_observer.cc index 9d5911984afc7..0c6f91a14f327 100644 --- a/shell/renderer/electron_render_frame_observer.cc +++ b/shell/renderer/electron_render_frame_observer.cc @@ -22,7 +22,7 @@ #include "shell/common/options_switches.h" #include "shell/common/world_ids.h" #include "shell/renderer/renderer_client_base.h" -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" #include "third_party/blink/public/platform/web_isolated_world_info.h" #include "third_party/blink/public/web/blink.h" @@ -149,9 +149,8 @@ void ElectronRenderFrameObserver::DraggableRegionsChanged() { regions.push_back(std::move(region)); } - mojo::Remote browser_remote; - render_frame_->GetBrowserInterfaceBroker()->GetInterface( - browser_remote.BindNewPipeAndPassReceiver()); + mojo::AssociatedRemote browser_remote; + render_frame_->GetRemoteAssociatedInterfaces()->GetInterface(&browser_remote); browser_remote->UpdateDraggableRegions(std::move(regions)); } @@ -169,9 +168,9 @@ void ElectronRenderFrameObserver::OnDestruct() { void ElectronRenderFrameObserver::DidMeaningfulLayout( blink::WebMeaningfulLayout layout_type) { if (layout_type == blink::WebMeaningfulLayout::kVisuallyNonEmpty) { - mojo::Remote browser_remote; - render_frame_->GetBrowserInterfaceBroker()->GetInterface( - browser_remote.BindNewPipeAndPassReceiver()); + mojo::AssociatedRemote browser_remote; + render_frame_->GetRemoteAssociatedInterfaces()->GetInterface( + &browser_remote); browser_remote->OnFirstNonEmptyLayout(); } } From b702a4f65202e3a44e673012df918221f2df1134 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 21 Mar 2022 11:33:03 -0700 Subject: [PATCH 2/2] fix: ensure ElectronBrowser mojo service is only bound to appropriate render frames (#33323) (#33350) * fix: ensure ElectronBrowser mojo service is only bound to authorized render frames Notes: no-notes * refactor: extract electron API IPC to its own mojo interface * fix: just check main frame not primary main frame --- filenames.gni | 6 +- .../browser/api/electron_api_web_contents.cc | 13 +- shell/browser/api/electron_api_web_contents.h | 16 +- shell/browser/api/event.h | 2 +- .../browser/electron_api_ipc_handler_impl.cc | 108 ++++++++++++++ ...impl.h => electron_api_ipc_handler_impl.h} | 35 ++--- shell/browser/electron_browser_client.cc | 42 +++++- .../browser/electron_browser_handler_impl.cc | 141 ------------------ ...ctron_web_contents_utility_handler_impl.cc | 83 +++++++++++ ...ectron_web_contents_utility_handler_impl.h | 67 +++++++++ shell/browser/web_contents_preferences.h | 3 + shell/common/api/api.mojom | 28 ++-- shell/common/gin_helper/event_emitter.cc | 2 +- shell/common/gin_helper/event_emitter.h | 2 +- .../renderer/api/electron_api_ipc_renderer.cc | 39 +++-- shell/renderer/api/electron_api_web_frame.cc | 14 +- .../electron_render_frame_observer.cc | 15 +- 17 files changed, 386 insertions(+), 230 deletions(-) create mode 100644 shell/browser/electron_api_ipc_handler_impl.cc rename shell/browser/{electron_browser_handler_impl.h => electron_api_ipc_handler_impl.h} (62%) delete mode 100644 shell/browser/electron_browser_handler_impl.cc create mode 100644 shell/browser/electron_web_contents_utility_handler_impl.cc create mode 100644 shell/browser/electron_web_contents_utility_handler_impl.h diff --git a/filenames.gni b/filenames.gni index 060276156c2c7..45a6badd2d340 100644 --- a/filenames.gni +++ b/filenames.gni @@ -347,6 +347,8 @@ filenames = { "shell/browser/child_web_contents_tracker.h", "shell/browser/cookie_change_notifier.cc", "shell/browser/cookie_change_notifier.h", + "shell/browser/electron_api_ipc_handler_impl.cc", + "shell/browser/electron_api_ipc_handler_impl.h", "shell/browser/electron_autofill_driver.cc", "shell/browser/electron_autofill_driver.h", "shell/browser/electron_autofill_driver_factory.cc", @@ -355,8 +357,6 @@ filenames = { "shell/browser/electron_browser_client.h", "shell/browser/electron_browser_context.cc", "shell/browser/electron_browser_context.h", - "shell/browser/electron_browser_handler_impl.cc", - "shell/browser/electron_browser_handler_impl.h", "shell/browser/electron_browser_main_parts.cc", "shell/browser/electron_browser_main_parts.h", "shell/browser/electron_download_manager_delegate.cc", @@ -373,6 +373,8 @@ filenames = { "shell/browser/electron_quota_permission_context.h", "shell/browser/electron_speech_recognition_manager_delegate.cc", "shell/browser/electron_speech_recognition_manager_delegate.h", + "shell/browser/electron_web_contents_utility_handler_impl.cc", + "shell/browser/electron_web_contents_utility_handler_impl.h", "shell/browser/electron_web_ui_controller_factory.cc", "shell/browser/electron_web_ui_controller_factory.h", "shell/browser/event_emitter_mixin.cc", diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index 09c6aa782eba8..93d1f9bfbe6ed 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1714,7 +1714,7 @@ void WebContents::Message(bool internal, // webContents.emit('-ipc-message', new Event(), internal, channel, // arguments); EmitWithSender("-ipc-message", render_frame_host, - electron::mojom::ElectronBrowser::InvokeCallback(), internal, + electron::mojom::ElectronApiIPC::InvokeCallback(), internal, channel, std::move(arguments)); } @@ -1722,7 +1722,7 @@ void WebContents::Invoke( bool internal, const std::string& channel, blink::CloneableMessage arguments, - electron::mojom::ElectronBrowser::InvokeCallback callback, + electron::mojom::ElectronApiIPC::InvokeCallback callback, content::RenderFrameHost* render_frame_host) { TRACE_EVENT1("electron", "WebContents::Invoke", "channel", channel); // webContents.emit('-ipc-invoke', new Event(), internal, channel, arguments); @@ -1748,7 +1748,7 @@ void WebContents::ReceivePostMessage( v8::Local message_value = electron::DeserializeV8Value(isolate, message); EmitWithSender("-ipc-ports", render_frame_host, - electron::mojom::ElectronBrowser::InvokeCallback(), false, + electron::mojom::ElectronApiIPC::InvokeCallback(), false, channel, message_value, std::move(wrapped_ports)); } @@ -1756,7 +1756,7 @@ void WebContents::MessageSync( bool internal, const std::string& channel, blink::CloneableMessage arguments, - electron::mojom::ElectronBrowser::MessageSyncCallback callback, + electron::mojom::ElectronApiIPC::MessageSyncCallback callback, content::RenderFrameHost* render_frame_host) { TRACE_EVENT1("electron", "WebContents::MessageSync", "channel", channel); // webContents.emit('-ipc-message-sync', new Event(sender, message), internal, @@ -1794,7 +1794,7 @@ void WebContents::MessageHost(const std::string& channel, TRACE_EVENT1("electron", "WebContents::MessageHost", "channel", channel); // webContents.emit('ipc-message-host', new Event(), channel, args); EmitWithSender("ipc-message-host", render_frame_host, - electron::mojom::ElectronBrowser::InvokeCallback(), channel, + electron::mojom::ElectronApiIPC::InvokeCallback(), channel, std::move(arguments)); } @@ -3206,7 +3206,8 @@ void WebContents::SetTemporaryZoomLevel(double level) { } void WebContents::DoGetZoomLevel( - electron::mojom::ElectronBrowser::DoGetZoomLevelCallback callback) { + electron::mojom::ElectronWebContentsUtility::DoGetZoomLevelCallback + callback) { std::move(callback).Run(GetZoomLevel()); } diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index f5a0c816a722a..02e7885a43928 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -355,7 +355,7 @@ class WebContents : public ExclusiveAccessContext, template bool EmitWithSender(base::StringPiece name, content::RenderFrameHost* sender, - electron::mojom::ElectronBrowser::InvokeCallback callback, + electron::mojom::ElectronApiIPC::InvokeCallback callback, Args&&... args) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); v8::Isolate* isolate = JavascriptEnvironment::GetIsolate(); @@ -399,7 +399,7 @@ class WebContents : public ExclusiveAccessContext, fullscreen_frame_ = rfh; } - // mojom::ElectronBrowser + // mojom::ElectronApiIPC void Message(bool internal, const std::string& channel, blink::CloneableMessage arguments, @@ -407,9 +407,8 @@ class WebContents : public ExclusiveAccessContext, void Invoke(bool internal, const std::string& channel, blink::CloneableMessage arguments, - electron::mojom::ElectronBrowser::InvokeCallback callback, + electron::mojom::ElectronApiIPC::InvokeCallback callback, content::RenderFrameHost* render_frame_host); - void OnFirstNonEmptyLayout(content::RenderFrameHost* render_frame_host); void ReceivePostMessage(const std::string& channel, blink::TransferableMessage message, content::RenderFrameHost* render_frame_host); @@ -417,7 +416,7 @@ class WebContents : public ExclusiveAccessContext, bool internal, const std::string& channel, blink::CloneableMessage arguments, - electron::mojom::ElectronBrowser::MessageSyncCallback callback, + electron::mojom::ElectronApiIPC::MessageSyncCallback callback, content::RenderFrameHost* render_frame_host); void MessageTo(int32_t web_contents_id, const std::string& channel, @@ -425,10 +424,15 @@ class WebContents : public ExclusiveAccessContext, void MessageHost(const std::string& channel, blink::CloneableMessage arguments, content::RenderFrameHost* render_frame_host); + + // mojom::ElectronWebContentsUtility + void OnFirstNonEmptyLayout(content::RenderFrameHost* render_frame_host); void UpdateDraggableRegions(std::vector regions); void SetTemporaryZoomLevel(double level); void DoGetZoomLevel( - electron::mojom::ElectronBrowser::DoGetZoomLevelCallback callback); + electron::mojom::ElectronWebContentsUtility::DoGetZoomLevelCallback + callback); + void SetImageAnimationPolicy(const std::string& new_policy); // Grants |origin| access to |device|. diff --git a/shell/browser/api/event.h b/shell/browser/api/event.h index 5cc7c47750b5e..08029b74cfede 100644 --- a/shell/browser/api/event.h +++ b/shell/browser/api/event.h @@ -13,7 +13,7 @@ namespace gin_helper { class Event : public gin::Wrappable { public: - using InvokeCallback = electron::mojom::ElectronBrowser::InvokeCallback; + using InvokeCallback = electron::mojom::ElectronApiIPC::InvokeCallback; static gin::WrapperInfo kWrapperInfo; diff --git a/shell/browser/electron_api_ipc_handler_impl.cc b/shell/browser/electron_api_ipc_handler_impl.cc new file mode 100644 index 0000000000000..5a13fda3629e9 --- /dev/null +++ b/shell/browser/electron_api_ipc_handler_impl.cc @@ -0,0 +1,108 @@ +// Copyright (c) 2022 Slack Technologies, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/electron_api_ipc_handler_impl.h" + +#include + +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" + +namespace electron { +ElectronApiIPCHandlerImpl::ElectronApiIPCHandlerImpl( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver receiver) + : render_process_id_(frame_host->GetProcess()->GetID()), + render_frame_id_(frame_host->GetRoutingID()) { + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(frame_host); + DCHECK(web_contents); + content::WebContentsObserver::Observe(web_contents); + + receiver_.Bind(std::move(receiver)); + receiver_.set_disconnect_handler(base::BindOnce( + &ElectronApiIPCHandlerImpl::OnConnectionError, GetWeakPtr())); +} + +ElectronApiIPCHandlerImpl::~ElectronApiIPCHandlerImpl() = default; + +void ElectronApiIPCHandlerImpl::WebContentsDestroyed() { + delete this; +} + +void ElectronApiIPCHandlerImpl::OnConnectionError() { + delete this; +} + +void ElectronApiIPCHandlerImpl::Message(bool internal, + const std::string& channel, + blink::CloneableMessage arguments) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->Message(internal, channel, std::move(arguments), + GetRenderFrameHost()); + } +} +void ElectronApiIPCHandlerImpl::Invoke(bool internal, + const std::string& channel, + blink::CloneableMessage arguments, + InvokeCallback callback) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->Invoke(internal, channel, std::move(arguments), + std::move(callback), GetRenderFrameHost()); + } +} + +void ElectronApiIPCHandlerImpl::ReceivePostMessage( + const std::string& channel, + blink::TransferableMessage message) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->ReceivePostMessage(channel, std::move(message), + GetRenderFrameHost()); + } +} + +void ElectronApiIPCHandlerImpl::MessageSync(bool internal, + const std::string& channel, + blink::CloneableMessage arguments, + MessageSyncCallback callback) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->MessageSync(internal, channel, std::move(arguments), + std::move(callback), GetRenderFrameHost()); + } +} + +void ElectronApiIPCHandlerImpl::MessageTo(int32_t web_contents_id, + const std::string& channel, + blink::CloneableMessage arguments) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->MessageTo(web_contents_id, channel, std::move(arguments)); + } +} + +void ElectronApiIPCHandlerImpl::MessageHost(const std::string& channel, + blink::CloneableMessage arguments) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->MessageHost(channel, std::move(arguments), + GetRenderFrameHost()); + } +} + +content::RenderFrameHost* ElectronApiIPCHandlerImpl::GetRenderFrameHost() { + return content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); +} + +// static +void ElectronApiIPCHandlerImpl::Create( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver receiver) { + new ElectronApiIPCHandlerImpl(frame_host, std::move(receiver)); +} +} // namespace electron diff --git a/shell/browser/electron_browser_handler_impl.h b/shell/browser/electron_api_ipc_handler_impl.h similarity index 62% rename from shell/browser/electron_browser_handler_impl.h rename to shell/browser/electron_api_ipc_handler_impl.h index 84d3c25f5f631..4d91cf43cb9a6 100644 --- a/shell/browser/electron_browser_handler_impl.h +++ b/shell/browser/electron_api_ipc_handler_impl.h @@ -1,9 +1,9 @@ -// Copyright (c) 2019 Slack Technologies, Inc. +// Copyright (c) 2022 Slack Technologies, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. -#ifndef SHELL_BROWSER_ELECTRON_BROWSER_HANDLER_IMPL_H_ -#define SHELL_BROWSER_ELECTRON_BROWSER_HANDLER_IMPL_H_ +#ifndef SHELL_BROWSER_ELECTRON_API_IPC_HANDLER_IMPL_H_ +#define SHELL_BROWSER_ELECTRON_API_IPC_HANDLER_IMPL_H_ #include #include @@ -21,18 +21,18 @@ class RenderFrameHost; } namespace electron { -class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, - public content::WebContentsObserver { +class ElectronApiIPCHandlerImpl : public mojom::ElectronApiIPC, + public content::WebContentsObserver { public: - explicit ElectronBrowserHandlerImpl( + explicit ElectronApiIPCHandlerImpl( content::RenderFrameHost* render_frame_host, - mojo::PendingAssociatedReceiver receiver); + mojo::PendingAssociatedReceiver receiver); static void Create( content::RenderFrameHost* frame_host, - mojo::PendingAssociatedReceiver receiver); + mojo::PendingAssociatedReceiver receiver); - // mojom::ElectronBrowser: + // mojom::ElectronApiIPC: void Message(bool internal, const std::string& channel, blink::CloneableMessage arguments) override; @@ -40,7 +40,6 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, const std::string& channel, blink::CloneableMessage arguments, InvokeCallback callback) override; - void OnFirstNonEmptyLayout() override; void ReceivePostMessage(const std::string& channel, blink::TransferableMessage message) override; void MessageSync(bool internal, @@ -52,17 +51,13 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, blink::CloneableMessage arguments) override; void MessageHost(const std::string& channel, blink::CloneableMessage arguments) override; - void UpdateDraggableRegions( - std::vector regions) override; - void SetTemporaryZoomLevel(double level) override; - void DoGetZoomLevel(DoGetZoomLevelCallback callback) override; - base::WeakPtr GetWeakPtr() { + base::WeakPtr GetWeakPtr() { return weak_factory_.GetWeakPtr(); } private: - ~ElectronBrowserHandlerImpl() override; + ~ElectronApiIPCHandlerImpl() override; // content::WebContentsObserver: void WebContentsDestroyed() override; @@ -74,11 +69,11 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser, const int render_process_id_; const int render_frame_id_; - mojo::AssociatedReceiver receiver_{this}; + mojo::AssociatedReceiver receiver_{this}; - base::WeakPtrFactory weak_factory_{this}; + base::WeakPtrFactory weak_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(ElectronBrowserHandlerImpl); + DISALLOW_COPY_AND_ASSIGN(ElectronApiIPCHandlerImpl); }; } // namespace electron -#endif // SHELL_BROWSER_ELECTRON_BROWSER_HANDLER_IMPL_H_ +#endif // SHELL_BROWSER_ELECTRON_API_IPC_HANDLER_IMPL_H_ diff --git a/shell/browser/electron_browser_client.cc b/shell/browser/electron_browser_client.cc index aa8085c8b266b..e1ebbcf965e5a 100644 --- a/shell/browser/electron_browser_client.cc +++ b/shell/browser/electron_browser_client.cc @@ -72,13 +72,14 @@ #include "shell/browser/api/electron_api_web_request.h" #include "shell/browser/badging/badge_manager.h" #include "shell/browser/child_web_contents_tracker.h" +#include "shell/browser/electron_api_ipc_handler_impl.h" #include "shell/browser/electron_autofill_driver_factory.h" #include "shell/browser/electron_browser_context.h" -#include "shell/browser/electron_browser_handler_impl.h" #include "shell/browser/electron_browser_main_parts.h" #include "shell/browser/electron_navigation_throttle.h" #include "shell/browser/electron_quota_permission_context.h" #include "shell/browser/electron_speech_recognition_manager_delegate.h" +#include "shell/browser/electron_web_contents_utility_handler_impl.h" #include "shell/browser/font_defaults.h" #include "shell/browser/javascript_environment.h" #include "shell/browser/media/media_capture_devices_dispatcher.h" @@ -1450,10 +1451,29 @@ bool ElectronBrowserClient::PreSpawnChild( } #endif // defined(OS_WIN) -void BindElectronBrowser( - mojo::PendingAssociatedReceiver receiver, +bool BindElectronApiIPC( + mojo::PendingAssociatedReceiver receiver, content::RenderFrameHost* frame_host) { - ElectronBrowserHandlerImpl::Create(frame_host, std::move(receiver)); + auto* contents = content::WebContents::FromRenderFrameHost(frame_host); + if (contents) { + auto* prefs = WebContentsPreferences::From(contents); + if (frame_host->GetFrameTreeNodeId() == + contents->GetMainFrame()->GetFrameTreeNodeId() || + (prefs && prefs->AllowsNodeIntegrationInSubFrames())) { + ElectronApiIPCHandlerImpl::Create(frame_host, std::move(receiver)); + return true; + } + } + + return false; +} + +void BindElectronWebContentsUtility( + mojo::PendingAssociatedReceiver + receiver, + content::RenderFrameHost* frame_host) { + ElectronWebContentsUtilityHandlerImpl::Create(frame_host, + std::move(receiver)); } bool ElectronBrowserClient::BindAssociatedReceiverFromFrame( @@ -1466,13 +1486,21 @@ bool ElectronBrowserClient::BindAssociatedReceiverFromFrame( render_frame_host); return true; } - if (interface_name == electron::mojom::ElectronBrowser::Name_) { - BindElectronBrowser( - mojo::PendingAssociatedReceiver( + if (interface_name == electron::mojom::ElectronApiIPC::Name_) { + return BindElectronApiIPC( + mojo::PendingAssociatedReceiver( std::move(*handle)), render_frame_host); + } + + if (interface_name == electron::mojom::ElectronWebContentsUtility::Name_) { + BindElectronWebContentsUtility( + mojo::PendingAssociatedReceiver< + electron::mojom::ElectronWebContentsUtility>(std::move(*handle)), + render_frame_host); return true; } + #if BUILDFLAG(ENABLE_PRINTING) if (interface_name == printing::mojom::PrintManagerHost::Name_) { mojo::PendingAssociatedReceiver receiver( diff --git a/shell/browser/electron_browser_handler_impl.cc b/shell/browser/electron_browser_handler_impl.cc deleted file mode 100644 index e66968b0cb132..0000000000000 --- a/shell/browser/electron_browser_handler_impl.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 2019 Slack Technologies, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#include "shell/browser/electron_browser_handler_impl.h" - -#include - -#include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/render_process_host.h" -#include "mojo/public/cpp/bindings/self_owned_receiver.h" - -namespace electron { -ElectronBrowserHandlerImpl::ElectronBrowserHandlerImpl( - content::RenderFrameHost* frame_host, - mojo::PendingAssociatedReceiver receiver) - : render_process_id_(frame_host->GetProcess()->GetID()), - render_frame_id_(frame_host->GetRoutingID()) { - content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost(frame_host); - DCHECK(web_contents); - content::WebContentsObserver::Observe(web_contents); - - receiver_.Bind(std::move(receiver)); - receiver_.set_disconnect_handler(base::BindOnce( - &ElectronBrowserHandlerImpl::OnConnectionError, GetWeakPtr())); -} - -ElectronBrowserHandlerImpl::~ElectronBrowserHandlerImpl() = default; - -void ElectronBrowserHandlerImpl::WebContentsDestroyed() { - delete this; -} - -void ElectronBrowserHandlerImpl::OnConnectionError() { - delete this; -} - -void ElectronBrowserHandlerImpl::Message(bool internal, - const std::string& channel, - blink::CloneableMessage arguments) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->Message(internal, channel, std::move(arguments), - GetRenderFrameHost()); - } -} -void ElectronBrowserHandlerImpl::Invoke(bool internal, - const std::string& channel, - blink::CloneableMessage arguments, - InvokeCallback callback) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->Invoke(internal, channel, std::move(arguments), - std::move(callback), GetRenderFrameHost()); - } -} - -void ElectronBrowserHandlerImpl::OnFirstNonEmptyLayout() { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->OnFirstNonEmptyLayout(GetRenderFrameHost()); - } -} - -void ElectronBrowserHandlerImpl::ReceivePostMessage( - const std::string& channel, - blink::TransferableMessage message) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->ReceivePostMessage(channel, std::move(message), - GetRenderFrameHost()); - } -} - -void ElectronBrowserHandlerImpl::MessageSync(bool internal, - const std::string& channel, - blink::CloneableMessage arguments, - MessageSyncCallback callback) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->MessageSync(internal, channel, std::move(arguments), - std::move(callback), GetRenderFrameHost()); - } -} - -void ElectronBrowserHandlerImpl::MessageTo(int32_t web_contents_id, - const std::string& channel, - blink::CloneableMessage arguments) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->MessageTo(web_contents_id, channel, std::move(arguments)); - } -} - -void ElectronBrowserHandlerImpl::MessageHost( - const std::string& channel, - blink::CloneableMessage arguments) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->MessageHost(channel, std::move(arguments), - GetRenderFrameHost()); - } -} - -void ElectronBrowserHandlerImpl::UpdateDraggableRegions( - std::vector regions) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->UpdateDraggableRegions(std::move(regions)); - } -} - -void ElectronBrowserHandlerImpl::SetTemporaryZoomLevel(double level) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->SetTemporaryZoomLevel(level); - } -} - -void ElectronBrowserHandlerImpl::DoGetZoomLevel( - DoGetZoomLevelCallback callback) { - api::WebContents* api_web_contents = api::WebContents::From(web_contents()); - if (api_web_contents) { - api_web_contents->DoGetZoomLevel(std::move(callback)); - } -} - -content::RenderFrameHost* ElectronBrowserHandlerImpl::GetRenderFrameHost() { - return content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); -} - -// static -void ElectronBrowserHandlerImpl::Create( - content::RenderFrameHost* frame_host, - mojo::PendingAssociatedReceiver receiver) { - new ElectronBrowserHandlerImpl(frame_host, std::move(receiver)); -} -} // namespace electron diff --git a/shell/browser/electron_web_contents_utility_handler_impl.cc b/shell/browser/electron_web_contents_utility_handler_impl.cc new file mode 100644 index 0000000000000..807dcdbdf9cc1 --- /dev/null +++ b/shell/browser/electron_web_contents_utility_handler_impl.cc @@ -0,0 +1,83 @@ +// Copyright (c) 2022 Slack Technologies, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/electron_web_contents_utility_handler_impl.h" + +#include + +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" + +namespace electron { +ElectronWebContentsUtilityHandlerImpl::ElectronWebContentsUtilityHandlerImpl( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver receiver) + : render_process_id_(frame_host->GetProcess()->GetID()), + render_frame_id_(frame_host->GetRoutingID()) { + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(frame_host); + DCHECK(web_contents); + content::WebContentsObserver::Observe(web_contents); + + receiver_.Bind(std::move(receiver)); + receiver_.set_disconnect_handler(base::BindOnce( + &ElectronWebContentsUtilityHandlerImpl::OnConnectionError, GetWeakPtr())); +} + +ElectronWebContentsUtilityHandlerImpl:: + ~ElectronWebContentsUtilityHandlerImpl() = default; + +void ElectronWebContentsUtilityHandlerImpl::WebContentsDestroyed() { + delete this; +} + +void ElectronWebContentsUtilityHandlerImpl::OnConnectionError() { + delete this; +} + +void ElectronWebContentsUtilityHandlerImpl::OnFirstNonEmptyLayout() { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->OnFirstNonEmptyLayout(GetRenderFrameHost()); + } +} + +void ElectronWebContentsUtilityHandlerImpl::UpdateDraggableRegions( + std::vector regions) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->UpdateDraggableRegions(std::move(regions)); + } +} + +void ElectronWebContentsUtilityHandlerImpl::SetTemporaryZoomLevel( + double level) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->SetTemporaryZoomLevel(level); + } +} + +void ElectronWebContentsUtilityHandlerImpl::DoGetZoomLevel( + DoGetZoomLevelCallback callback) { + api::WebContents* api_web_contents = api::WebContents::From(web_contents()); + if (api_web_contents) { + api_web_contents->DoGetZoomLevel(std::move(callback)); + } +} + +content::RenderFrameHost* +ElectronWebContentsUtilityHandlerImpl::GetRenderFrameHost() { + return content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); +} + +// static +void ElectronWebContentsUtilityHandlerImpl::Create( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver + receiver) { + new ElectronWebContentsUtilityHandlerImpl(frame_host, std::move(receiver)); +} +} // namespace electron diff --git a/shell/browser/electron_web_contents_utility_handler_impl.h b/shell/browser/electron_web_contents_utility_handler_impl.h new file mode 100644 index 0000000000000..379712f14b8f3 --- /dev/null +++ b/shell/browser/electron_web_contents_utility_handler_impl.h @@ -0,0 +1,67 @@ +// Copyright (c) 2022 Slack Technologies, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef SHELL_BROWSER_ELECTRON_WEB_CONTENTS_UTILITY_HANDLER_IMPL_H_ +#define SHELL_BROWSER_ELECTRON_WEB_CONTENTS_UTILITY_HANDLER_IMPL_H_ + +#include +#include + +#include "base/memory/weak_ptr.h" +#include "content/public/browser/web_contents_observer.h" +#include "electron/shell/common/api/api.mojom.h" +#include "shell/browser/api/electron_api_web_contents.h" + +namespace content { +class RenderFrameHost; +} + +namespace electron { +class ElectronWebContentsUtilityHandlerImpl + : public mojom::ElectronWebContentsUtility, + public content::WebContentsObserver { + public: + explicit ElectronWebContentsUtilityHandlerImpl( + content::RenderFrameHost* render_frame_host, + mojo::PendingAssociatedReceiver + receiver); + + static void Create( + content::RenderFrameHost* frame_host, + mojo::PendingAssociatedReceiver + receiver); + + // mojom::ElectronWebContentsUtility: + void OnFirstNonEmptyLayout() override; + void UpdateDraggableRegions( + std::vector regions) override; + void SetTemporaryZoomLevel(double level) override; + void DoGetZoomLevel(DoGetZoomLevelCallback callback) override; + + base::WeakPtr GetWeakPtr() { + return weak_factory_.GetWeakPtr(); + } + + private: + ~ElectronWebContentsUtilityHandlerImpl() override; + + // content::WebContentsObserver: + void WebContentsDestroyed() override; + + void OnConnectionError(); + + content::RenderFrameHost* GetRenderFrameHost(); + + const int render_process_id_; + const int render_frame_id_; + + mojo::AssociatedReceiver receiver_{this}; + + base::WeakPtrFactory weak_factory_{ + this}; + + DISALLOW_COPY_AND_ASSIGN(ElectronWebContentsUtilityHandlerImpl); +}; +} // namespace electron +#endif // SHELL_BROWSER_ELECTRON_WEB_CONTENTS_UTILITY_HANDLER_IMPL_H_ diff --git a/shell/browser/web_contents_preferences.h b/shell/browser/web_contents_preferences.h index 2ca77f19c8a6a..c8ecadcb82eaf 100644 --- a/shell/browser/web_contents_preferences.h +++ b/shell/browser/web_contents_preferences.h @@ -67,6 +67,9 @@ class WebContentsPreferences bool ShouldDisableHtmlFullscreenWindowResize() const { return disable_html_fullscreen_window_resize_; } + bool AllowsNodeIntegrationInSubFrames() const { + return node_integration_in_sub_frames_; + } bool ShouldDisableDialogs() const { return disable_dialogs_; } bool ShouldUseSafeDialogs() const { return safe_dialogs_; } bool GetSafeDialogsMessage(std::string* message) const; diff --git a/shell/common/api/api.mojom b/shell/common/api/api.mojom index 1206b5858a183..4515b82ac48d0 100644 --- a/shell/common/api/api.mojom +++ b/shell/common/api/api.mojom @@ -31,7 +31,21 @@ struct DraggableRegion { gfx.mojom.Rect bounds; }; -interface ElectronBrowser { +interface ElectronWebContentsUtility { + // Informs underlying WebContents that first non-empty layout was performed + // by compositor. + OnFirstNonEmptyLayout(); + + UpdateDraggableRegions( + array regions); + + SetTemporaryZoomLevel(double zoom_level); + + [Sync] + DoGetZoomLevel() => (double result); +}; + +interface ElectronApiIPC { // Emits an event on |channel| from the ipcMain JavaScript object in the main // process. Message( @@ -46,10 +60,6 @@ interface ElectronBrowser { string channel, blink.mojom.CloneableMessage arguments) => (blink.mojom.CloneableMessage result); - // Informs underlying WebContents that first non-empty layout was performed - // by compositor. - OnFirstNonEmptyLayout(); - ReceivePostMessage(string channel, blink.mojom.TransferableMessage message); // Emits an event on |channel| from the ipcMain JavaScript object in the main @@ -70,12 +80,4 @@ interface ElectronBrowser { MessageHost( string channel, blink.mojom.CloneableMessage arguments); - - UpdateDraggableRegions( - array regions); - - SetTemporaryZoomLevel(double zoom_level); - - [Sync] - DoGetZoomLevel() => (double result); }; diff --git a/shell/common/gin_helper/event_emitter.cc b/shell/common/gin_helper/event_emitter.cc index 8779c05507ba1..32a3e4b1b8183 100644 --- a/shell/common/gin_helper/event_emitter.cc +++ b/shell/common/gin_helper/event_emitter.cc @@ -54,7 +54,7 @@ v8::Local CreateNativeEvent( v8::Isolate* isolate, v8::Local sender, content::RenderFrameHost* frame, - electron::mojom::ElectronBrowser::MessageSyncCallback callback) { + electron::mojom::ElectronApiIPC::MessageSyncCallback callback) { v8::Local event; if (frame && callback) { gin::Handle native_event = Event::Create(isolate); diff --git a/shell/common/gin_helper/event_emitter.h b/shell/common/gin_helper/event_emitter.h index 3d5e1fc213774..d133ed721c2ce 100644 --- a/shell/common/gin_helper/event_emitter.h +++ b/shell/common/gin_helper/event_emitter.h @@ -29,7 +29,7 @@ v8::Local CreateNativeEvent( v8::Isolate* isolate, v8::Local sender, content::RenderFrameHost* frame, - electron::mojom::ElectronBrowser::MessageSyncCallback callback); + electron::mojom::ElectronApiIPC::MessageSyncCallback callback); } // namespace internal diff --git a/shell/renderer/api/electron_api_ipc_renderer.cc b/shell/renderer/api/electron_api_ipc_renderer.cc index 6b4f2698a968a..6f24ed17c4a3d 100644 --- a/shell/renderer/api/electron_api_ipc_renderer.cc +++ b/shell/renderer/api/electron_api_ipc_renderer.cc @@ -60,16 +60,16 @@ class IPCRenderer : public gin::Wrappable, weak_context_.SetWeak(); render_frame->GetRemoteAssociatedInterfaces()->GetInterface( - &electron_browser_remote_); + &electron_ipc_remote_); } - void OnDestruct() override { electron_browser_remote_.reset(); } + void OnDestruct() override { electron_ipc_remote_.reset(); } void WillReleaseScriptContext(v8::Local context, int32_t world_id) override { if (weak_context_.IsEmpty() || weak_context_.Get(context->GetIsolate()) == context) - electron_browser_remote_.reset(); + electron_ipc_remote_.reset(); } // gin::Wrappable: @@ -92,7 +92,7 @@ class IPCRenderer : public gin::Wrappable, bool internal, const std::string& channel, v8::Local arguments) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return; } @@ -100,7 +100,7 @@ class IPCRenderer : public gin::Wrappable, if (!electron::SerializeV8Value(isolate, arguments, &message)) { return; } - electron_browser_remote_->Message(internal, channel, std::move(message)); + electron_ipc_remote_->Message(internal, channel, std::move(message)); } v8::Local Invoke(v8::Isolate* isolate, @@ -108,7 +108,7 @@ class IPCRenderer : public gin::Wrappable, bool internal, const std::string& channel, v8::Local arguments) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return v8::Local(); } @@ -119,7 +119,7 @@ class IPCRenderer : public gin::Wrappable, gin_helper::Promise p(isolate); auto handle = p.GetHandle(); - electron_browser_remote_->Invoke( + electron_ipc_remote_->Invoke( internal, channel, std::move(message), base::BindOnce( [](gin_helper::Promise p, @@ -134,7 +134,7 @@ class IPCRenderer : public gin::Wrappable, const std::string& channel, v8::Local message_value, absl::optional> transfer) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return; } @@ -166,8 +166,8 @@ class IPCRenderer : public gin::Wrappable, } transferable_message.ports = std::move(ports); - electron_browser_remote_->ReceivePostMessage( - channel, std::move(transferable_message)); + electron_ipc_remote_->ReceivePostMessage(channel, + std::move(transferable_message)); } void SendTo(v8::Isolate* isolate, @@ -175,7 +175,7 @@ class IPCRenderer : public gin::Wrappable, int32_t web_contents_id, const std::string& channel, v8::Local arguments) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return; } @@ -183,15 +183,15 @@ class IPCRenderer : public gin::Wrappable, if (!electron::SerializeV8Value(isolate, arguments, &message)) { return; } - electron_browser_remote_->MessageTo(web_contents_id, channel, - std::move(message)); + electron_ipc_remote_->MessageTo(web_contents_id, channel, + std::move(message)); } void SendToHost(v8::Isolate* isolate, gin_helper::ErrorThrower thrower, const std::string& channel, v8::Local arguments) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return; } @@ -199,7 +199,7 @@ class IPCRenderer : public gin::Wrappable, if (!electron::SerializeV8Value(isolate, arguments, &message)) { return; } - electron_browser_remote_->MessageHost(channel, std::move(message)); + electron_ipc_remote_->MessageHost(channel, std::move(message)); } v8::Local SendSync(v8::Isolate* isolate, @@ -207,7 +207,7 @@ class IPCRenderer : public gin::Wrappable, bool internal, const std::string& channel, v8::Local arguments) { - if (!electron_browser_remote_) { + if (!electron_ipc_remote_) { thrower.ThrowError(kIPCMethodCalledAfterContextReleasedError); return v8::Local(); } @@ -217,14 +217,13 @@ class IPCRenderer : public gin::Wrappable, } blink::CloneableMessage result; - electron_browser_remote_->MessageSync(internal, channel, std::move(message), - &result); + electron_ipc_remote_->MessageSync(internal, channel, std::move(message), + &result); return electron::DeserializeV8Value(isolate, result); } v8::Global weak_context_; - mojo::AssociatedRemote - electron_browser_remote_; + mojo::AssociatedRemote electron_ipc_remote_; }; gin::WrapperInfo IPCRenderer::kWrapperInfo = {gin::kEmbedderNativeGin}; diff --git a/shell/renderer/api/electron_api_web_frame.cc b/shell/renderer/api/electron_api_web_frame.cc index d3736ed0cc33a..6c86d47e59104 100644 --- a/shell/renderer/api/electron_api_web_frame.cc +++ b/shell/renderer/api/electron_api_web_frame.cc @@ -449,10 +449,11 @@ class WebFrameRenderer : public gin::Wrappable, if (!MaybeGetRenderFrame(isolate, "setZoomLevel", &render_frame)) return; - mojo::AssociatedRemote browser_remote; + mojo::AssociatedRemote + web_contents_utility_remote; render_frame->GetRemoteAssociatedInterfaces()->GetInterface( - &browser_remote); - browser_remote->SetTemporaryZoomLevel(level); + &web_contents_utility_remote); + web_contents_utility_remote->SetTemporaryZoomLevel(level); } double GetZoomLevel(v8::Isolate* isolate) { @@ -461,10 +462,11 @@ class WebFrameRenderer : public gin::Wrappable, if (!MaybeGetRenderFrame(isolate, "getZoomLevel", &render_frame)) return result; - mojo::AssociatedRemote browser_remote; + mojo::AssociatedRemote + web_contents_utility_remote; render_frame->GetRemoteAssociatedInterfaces()->GetInterface( - &browser_remote); - browser_remote->DoGetZoomLevel(&result); + &web_contents_utility_remote); + web_contents_utility_remote->DoGetZoomLevel(&result); return result; } diff --git a/shell/renderer/electron_render_frame_observer.cc b/shell/renderer/electron_render_frame_observer.cc index 0c6f91a14f327..e3dc3aa73cece 100644 --- a/shell/renderer/electron_render_frame_observer.cc +++ b/shell/renderer/electron_render_frame_observer.cc @@ -149,9 +149,11 @@ void ElectronRenderFrameObserver::DraggableRegionsChanged() { regions.push_back(std::move(region)); } - mojo::AssociatedRemote browser_remote; - render_frame_->GetRemoteAssociatedInterfaces()->GetInterface(&browser_remote); - browser_remote->UpdateDraggableRegions(std::move(regions)); + mojo::AssociatedRemote + web_contents_utility_remote; + render_frame_->GetRemoteAssociatedInterfaces()->GetInterface( + &web_contents_utility_remote); + web_contents_utility_remote->UpdateDraggableRegions(std::move(regions)); } void ElectronRenderFrameObserver::WillReleaseScriptContext( @@ -168,10 +170,11 @@ void ElectronRenderFrameObserver::OnDestruct() { void ElectronRenderFrameObserver::DidMeaningfulLayout( blink::WebMeaningfulLayout layout_type) { if (layout_type == blink::WebMeaningfulLayout::kVisuallyNonEmpty) { - mojo::AssociatedRemote browser_remote; + mojo::AssociatedRemote + web_contents_utility_remote; render_frame_->GetRemoteAssociatedInterfaces()->GetInterface( - &browser_remote); - browser_remote->OnFirstNonEmptyLayout(); + &web_contents_utility_remote); + web_contents_utility_remote->OnFirstNonEmptyLayout(); } }