| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef HEADLESS_LIB_BROWSER_HEADLESS_CONTENT_BROWSER_CLIENT_H_ |
| #define HEADLESS_LIB_BROWSER_HEADLESS_CONTENT_BROWSER_CLIENT_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "build/build_config.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "headless/public/headless_browser.h" |
| #include "services/network/network_service.h" |
| #include "third_party/blink/public/mojom/badging/badging.mojom.h" |
| #include "third_party/blink/public/mojom/persistent_renderer_prefs.mojom.h" |
| |
| namespace headless { |
| |
| class HeadlessBluetoothDelegate; |
| class HeadlessBrowserImpl; |
| |
| class HeadlessContentBrowserClient : public content::ContentBrowserClient { |
| public: |
| explicit HeadlessContentBrowserClient(HeadlessBrowserImpl* browser); |
| |
| HeadlessContentBrowserClient(const HeadlessContentBrowserClient&) = delete; |
| HeadlessContentBrowserClient& operator=(const HeadlessContentBrowserClient&) = |
| delete; |
| |
| ~HeadlessContentBrowserClient() override; |
| |
| // content::ContentBrowserClient implementation: |
| std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts( |
| bool is_integration_test) override; |
| void OverrideWebPreferences(content::WebContents* web_contents, |
| content::SiteInstance& main_frame_site, |
| blink::web_pref::WebPreferences* prefs) override; |
| void RegisterBrowserInterfaceBindersForFrame( |
| content::RenderFrameHost* render_frame_host, |
| mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override; |
| void RegisterAssociatedInterfaceBindersForRenderFrameHost( |
| content::RenderFrameHost& render_frame_host, |
| blink::AssociatedInterfaceRegistry& associated_registry) override; |
| std::unique_ptr<content::DevToolsManagerDelegate> |
| CreateDevToolsManagerDelegate() override; |
| content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings( |
| content::BrowserContext* context) override; |
| #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) |
| void GetAdditionalMappedFilesForChildProcess( |
| const base::CommandLine& command_line, |
| int child_process_id, |
| content::PosixFileDescriptorInfo* mappings) override; |
| #endif |
| void AppendExtraCommandLineSwitches(base::CommandLine* command_line, |
| int child_process_id) override; |
| std::string GetApplicationLocale() override; |
| std::string GetAcceptLangs(content::BrowserContext* context) override; |
| void AllowCertificateError( |
| content::WebContents* web_contents, |
| int cert_error, |
| const net::SSLInfo& ssl_info, |
| const GURL& request_url, |
| bool is_primary_main_frame_request, |
| bool strict_enforcement, |
| base::OnceCallback<void(content::CertificateRequestResultType)> callback) |
| override; |
| base::OnceClosure SelectClientCertificate( |
| content::BrowserContext* browser_context, |
| int process_id, |
| content::WebContents* web_contents, |
| net::SSLCertRequestInfo* cert_request_info, |
| net::ClientCertIdentityList client_certs, |
| std::unique_ptr<content::ClientCertificateDelegate> delegate) override; |
| bool ShouldEnableStrictSiteIsolation() override; |
| bool ShouldAllowProcessPerSiteForMultipleMainFrames( |
| content::BrowserContext* context) override; |
| |
| // Returns whether |api_origin| on |top_frame_origin| can perform |
| // |operation| within the interest group API. |
| bool IsInterestGroupAPIAllowed(content::BrowserContext* browser_context, |
| content::RenderFrameHost* render_frame_host, |
| content::InterestGroupApiOperation operation, |
| const url::Origin& top_frame_origin, |
| const url::Origin& api_origin) override; |
| |
| bool IsPrivacySandboxReportingDestinationAttested( |
| content::BrowserContext* browser_context, |
| const url::Origin& destination_origin, |
| content::PrivacySandboxInvokingAPI invoking_api) override; |
| |
| bool IsSharedStorageAllowed( |
| content::BrowserContext* browser_context, |
| content::RenderFrameHost* rfh, |
| const url::Origin& top_frame_origin, |
| const url::Origin& accessing_origin, |
| std::string* out_debug_message, |
| bool* out_block_is_site_setting_specific) override; |
| bool IsSharedStorageSelectURLAllowed( |
| content::BrowserContext* browser_context, |
| const url::Origin& top_frame_origin, |
| const url::Origin& accessing_origin, |
| std::string* out_debug_message, |
| bool* out_block_is_site_setting_specific) override; |
| bool IsFencedStorageReadAllowed(content::BrowserContext* browser_context, |
| content::RenderFrameHost* rfh, |
| const url::Origin& top_frame_origin, |
| const url::Origin& accessing_origin) override; |
| bool IsCookieDeprecationLabelAllowed( |
| content::BrowserContext* browser_context) override; |
| bool IsCookieDeprecationLabelAllowedForContext( |
| content::BrowserContext* browser_context, |
| const url::Origin& top_frame_origin, |
| const url::Origin& context_origin) override; |
| void ConfigureNetworkContextParams( |
| content::BrowserContext* context, |
| bool in_memory, |
| const base::FilePath& relative_partition_path, |
| ::network::mojom::NetworkContextParams* network_context_params, |
| ::cert_verifier::mojom::CertVerifierCreationParams* |
| cert_verifier_creation_params) override; |
| |
| std::string GetProduct() override; |
| std::string GetUserAgent() override; |
| blink::UserAgentMetadata GetUserAgentMetadata() override; |
| |
| bool CanAcceptUntrustedExchangesIfNeeded() override; |
| device::GeolocationSystemPermissionManager* |
| GetGeolocationSystemPermissionManager() override; |
| #if BUILDFLAG(IS_WIN) |
| void SessionEnding(std::optional<DWORD> control_type) override; |
| #endif |
| |
| #if defined(HEADLESS_USE_POLICY) |
| void CreateThrottlesForNavigation( |
| content::NavigationThrottleRegistry& registry) override; |
| #endif |
| |
| void OnNetworkServiceCreated( |
| ::network::mojom::NetworkService* network_service) override; |
| |
| void GetHyphenationDictionary( |
| base::OnceCallback<void(const base::FilePath&)> callback) override; |
| |
| std::unique_ptr<content::VideoOverlayWindow> |
| CreateWindowForVideoPictureInPicture( |
| content::VideoPictureInPictureWindowController* controller) override; |
| |
| bool ShouldSandboxNetworkService() override; |
| |
| content::BluetoothDelegate* GetBluetoothDelegate() override; |
| |
| bool IsRendererProcessPriorityEnabled() override; |
| |
| private: |
| class StubBadgeService; |
| |
| class StubPersistentRendererPrefsService; |
| |
| void BindBadgeService( |
| content::RenderFrameHost* render_frame_host, |
| mojo::PendingReceiver<blink::mojom::BadgeService> receiver); |
| |
| void BindPersistentRendererPrefsService( |
| content::RenderFrameHost* render_frame_host, |
| mojo::PendingReceiver<blink::mojom::PersistentRendererPrefsService> |
| receiver); |
| |
| void HandleExplicitlyAllowedPorts( |
| ::network::mojom::NetworkService* network_service); |
| void SetEncryptionKey(::network::mojom::NetworkService* network_service); |
| |
| raw_ptr<HeadlessBrowserImpl> browser_; // Not owned. |
| |
| std::unique_ptr<StubBadgeService> stub_badge_service_; |
| |
| std::unique_ptr<StubPersistentRendererPrefsService> |
| stub_persistent_renderer_prefs_service_; |
| |
| std::unique_ptr<HeadlessBluetoothDelegate> bluetooth_delegate_; |
| }; |
| |
| } // namespace headless |
| |
| #endif // HEADLESS_LIB_BROWSER_HEADLESS_CONTENT_BROWSER_CLIENT_H_ |