// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_EXTENSION_FRAME_HOST_H_ #define EXTENSIONS_BROWSER_EXTENSION_FRAME_HOST_H_ #include "base/memory/raw_ptr.h" #include "content/public/browser/render_frame_host_receiver_set.h" #include "extensions/common/mojom/frame.mojom.h" #include "extensions/common/mojom/injection_type.mojom-shared.h" #include "extensions/common/mojom/run_location.mojom-shared.h" namespace content { class WebContents; } namespace extensions { class Extension; class ProcessManager; // Implements the mojo interface of extensions::mojom::LocalFrameHost. // ExtensionWebContentsObserver creates and owns this class and it's destroyed // when WebContents is destroyed. class ExtensionFrameHost : public mojom::LocalFrameHost { public: explicit ExtensionFrameHost(content::WebContents* web_contents); ExtensionFrameHost(const ExtensionFrameHost&) = delete; ExtensionFrameHost& operator=(const ExtensionFrameHost&) = delete; ~ExtensionFrameHost() override; void BindLocalFrameHost( mojo::PendingAssociatedReceiver receiver, content::RenderFrameHost* render_frame_host); content::RenderFrameHostReceiverSet& receivers_for_testing() { return receivers_; } // mojom::LocalFrameHost: void RequestScriptInjectionPermission( const std::string& extension_id, mojom::InjectionType script_type, mojom::RunLocation run_location, RequestScriptInjectionPermissionCallback callback) override; void GetAppInstallState(const GURL& requestor_url, GetAppInstallStateCallback callback) override; void Request(mojom::RequestParamsPtr params, RequestCallback callback) override; void ResponseAck(const base::Uuid& request_uuid) override; void WatchedPageChange( const std::vector& css_selectors) override; void DetailedConsoleMessageAdded( const std::u16string& message, const std::u16string& source, const StackTrace& stack_trace, blink::mojom::ConsoleMessageLevel level) override; void ContentScriptsExecuting( const base::flat_map>& extension_id_to_scripts, const GURL& frame_url) override; void IncrementLazyKeepaliveCount() override; void DecrementLazyKeepaliveCount() override; void UpdateDraggableRegions( std::vector regions) override; void AppWindowReady() override; void OpenChannelToExtension( extensions::mojom::ExternalConnectionInfoPtr info, extensions::mojom::ChannelType channel_type, const std::string& channel_name, const PortId& port_id, mojo::PendingAssociatedRemote port, mojo::PendingAssociatedReceiver port_host) override; void OpenChannelToNativeApp( const std::string& native_app_name, const PortId& port_id, mojo::PendingAssociatedRemote port, mojo::PendingAssociatedReceiver port_host) override; void OpenChannelToTab( int32_t tab_id, int32_t frame_id, const std::optional& document_id, extensions::mojom::ChannelType channel_type, const std::string& channel_name, const PortId& port_id, mojo::PendingAssociatedRemote port, mojo::PendingAssociatedReceiver port_host) override; protected: const Extension* GetExtension(ProcessManager* process_manager, content::RenderFrameHost* frame); // This raw pointer is safe to use because ExtensionWebContentsObserver whose // lifetime is tied to the WebContents owns this instance. raw_ptr web_contents_; content::RenderFrameHostReceiverSet receivers_; }; } // namespace extensions #endif // EXTENSIONS_BROWSER_EXTENSION_FRAME_HOST_H_