// Copyright 2020 The Chromium Embedded Framework Authors. // Portions copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_ #define CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_ #include #include "base/memory/raw_ptr.h" #include "cef/libcef/browser/request_context_impl.h" #include "chrome/browser/chrome_content_browser_client.h" #include "content/public/browser/web_contents_view_delegate.h" class ChromeBrowserMainExtraPartsCef; // CEF override of ChromeContentBrowserClient. class ChromeContentBrowserClientCef : public ChromeContentBrowserClient { public: ChromeContentBrowserClientCef(); ChromeContentBrowserClientCef(const ChromeContentBrowserClientCef&) = delete; ChromeContentBrowserClientCef& operator=( const ChromeContentBrowserClientCef&) = delete; ~ChromeContentBrowserClientCef() override; void CleanupOnUIThread() override; // ChromeContentBrowserClient overrides. std::unique_ptr CreateBrowserMainParts( bool is_integration_test) override; void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) override; void RenderProcessWillLaunch(content::RenderProcessHost* host) override; void AllowCertificateError( content::WebContents* web_contents, int cert_error, const net::SSLInfo& ssl_info, const GURL& request_url, bool is_main_frame_request, bool strict_enforcement, base::OnceCallback 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 delegate) override; bool CanCreateWindow(content::RenderFrameHost* opener, const GURL& opener_url, const GURL& opener_top_level_frame_url, const url::Origin& source_origin, content::mojom::WindowContainerType container_type, const GURL& target_url, const content::Referrer& referrer, const std::string& frame_name, WindowOpenDisposition disposition, const blink::mojom::WindowFeatures& features, bool user_gesture, bool opener_suppressed, bool* no_javascript_access) override; void CreateWindowResult(content::RenderFrameHost* opener, bool success) override; void OverrideWebkitPrefs(content::WebContents* web_contents, blink::web_pref::WebPreferences* prefs) override; void WillCreateURLLoaderFactory( content::BrowserContext* browser_context, content::RenderFrameHost* frame, int render_process_id, URLLoaderFactoryType type, const url::Origin& request_initiator, const net::IsolationInfo& isolation_info, std::optional navigation_id, ukm::SourceIdObj ukm_source_id, network::URLLoaderFactoryBuilder& factory_builder, mojo::PendingRemote* header_client, bool* bypass_redirect_checks, bool* disable_secure_dns, network::mojom::URLLoaderFactoryOverridePtr* factory_override, scoped_refptr navigation_response_task_runner) override; bool HandleExternalProtocol( const GURL& url, content::WebContents::Getter web_contents_getter, content::FrameTreeNodeId frame_tree_node_id, content::NavigationUIData* navigation_data, bool is_primary_main_frame, bool is_in_fenced_frame_tree, network::mojom::WebSandboxFlags sandbox_flags, ui::PageTransition page_transition, bool has_user_gesture, const std::optional& initiating_origin, content::RenderFrameHost* initiator_document, const net::IsolationInfo& isolation_info, mojo::PendingRemote* out_factory) override; bool HandleExternalProtocol( content::WebContents::Getter web_contents_getter, content::FrameTreeNodeId frame_tree_node_id, content::NavigationUIData* navigation_data, bool is_primary_main_frame, bool is_in_fenced_frame_tree, network::mojom::WebSandboxFlags sandbox_flags, const network::ResourceRequest& request, const std::optional& initiating_origin, content::RenderFrameHost* initiator_document, const net::IsolationInfo& isolation_info, mojo::PendingRemote* out_factory) override; std::vector> CreateThrottlesForNavigation( content::NavigationHandle* navigation_handle) override; bool 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::unique_ptr CreateLoginDelegate( const net::AuthChallengeInfo& auth_info, content::WebContents* web_contents, content::BrowserContext* browser_context, const content::GlobalRequestID& request_id, bool is_request_for_primary_main_frame_navigation, bool is_request_for_navigation, const GURL& url, scoped_refptr response_headers, bool first_auth_attempt, LoginAuthRequiredCallback auth_required_callback) override; void ExposeInterfacesToRenderer( service_manager::BinderRegistry* registry, blink::AssociatedInterfaceRegistry* associated_registry, content::RenderProcessHost* render_process_host) override; void RegisterBrowserInterfaceBindersForFrame( content::RenderFrameHost* render_frame_host, mojo::BinderMapWithContext* map) override; std::unique_ptr GetWebContentsViewDelegate( content::WebContents* web_contents) override; CefRefPtr request_context() const; scoped_refptr background_task_runner() const; scoped_refptr user_visible_task_runner() const; scoped_refptr user_blocking_task_runner() const; private: static std::unique_ptr CreateWebContentsViewDelegate(content::WebContents* web_contents); raw_ptr browser_main_parts_ = nullptr; }; #endif // CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_