1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CEF_LIBCEF_BROWSER_ALLOY_ALLOY_CONTENT_BROWSER_CLIENT_H_ 6 #define CEF_LIBCEF_BROWSER_ALLOY_ALLOY_CONTENT_BROWSER_CLIENT_H_ 7 #pragma once 8 9 #include <string> 10 #include <utility> 11 12 #include "include/cef_request_context_handler.h" 13 #include "libcef/browser/request_context_impl.h" 14 15 #include "base/macros.h" 16 #include "base/memory/ref_counted.h" 17 #include "build/build_config.h" 18 #include "content/public/browser/content_browser_client.h" 19 #include "third_party/skia/include/core/SkColor.h" 20 21 class AlloyBrowserMainParts; 22 class CefDevToolsDelegate; 23 24 namespace content { 25 class PluginServiceFilter; 26 class SiteInstance; 27 } // namespace content 28 29 namespace extensions { 30 class Extension; 31 } 32 33 class AlloyContentBrowserClient : public content::ContentBrowserClient { 34 public: 35 AlloyContentBrowserClient(); 36 ~AlloyContentBrowserClient() override; 37 38 // ContentBrowserClient implementation. 39 std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts( 40 const content::MainFunctionParams& parameters) override; 41 void RenderProcessWillLaunch(content::RenderProcessHost* host) override; 42 bool ShouldUseProcessPerSite(content::BrowserContext* browser_context, 43 const GURL& effective_url) override; 44 bool DoesSiteRequireDedicatedProcess(content::BrowserContext* browser_context, 45 const GURL& effective_site_url) override; 46 void OverrideURLLoaderFactoryParams( 47 content::BrowserContext* browser_context, 48 const url::Origin& origin, 49 bool is_for_isolated_world, 50 network::mojom::URLLoaderFactoryParams* factory_params) override; 51 void GetAdditionalWebUISchemes( 52 std::vector<std::string>* additional_schemes) override; 53 void GetAdditionalViewSourceSchemes( 54 std::vector<std::string>* additional_schemes) override; 55 void GetAdditionalAllowedSchemesForFileSystem( 56 std::vector<std::string>* additional_allowed_schemes) override; 57 bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin) override; 58 bool IsHandledURL(const GURL& url) override; 59 void SiteInstanceGotProcess(content::SiteInstance* site_instance) override; 60 void SiteInstanceDeleting(content::SiteInstance* site_instance) override; 61 void BindHostReceiverForRenderer( 62 content::RenderProcessHost* render_process_host, 63 mojo::GenericPendingReceiver receiver) override; 64 void AppendExtraCommandLineSwitches(base::CommandLine* command_line, 65 int child_process_id) override; 66 std::string GetApplicationLocale() override; 67 scoped_refptr<network::SharedURLLoaderFactory> 68 GetSystemSharedURLLoaderFactory() override; 69 network::mojom::NetworkContext* GetSystemNetworkContext() override; 70 scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext() 71 override; 72 content::MediaObserver* GetMediaObserver() override; 73 content::SpeechRecognitionManagerDelegate* 74 CreateSpeechRecognitionManagerDelegate() override; 75 content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings( 76 content::BrowserContext* context) override; 77 void AllowCertificateError( 78 content::WebContents* web_contents, 79 int cert_error, 80 const net::SSLInfo& ssl_info, 81 const GURL& request_url, 82 bool is_main_frame_request, 83 bool strict_enforcement, 84 base::OnceCallback<void(content::CertificateRequestResultType)> callback) 85 override; 86 base::OnceClosure SelectClientCertificate( 87 content::WebContents* web_contents, 88 net::SSLCertRequestInfo* cert_request_info, 89 net::ClientCertIdentityList client_certs, 90 std::unique_ptr<content::ClientCertificateDelegate> delegate) override; 91 bool CanCreateWindow(content::RenderFrameHost* opener, 92 const GURL& opener_url, 93 const GURL& opener_top_level_frame_url, 94 const url::Origin& source_origin, 95 content::mojom::WindowContainerType container_type, 96 const GURL& target_url, 97 const content::Referrer& referrer, 98 const std::string& frame_name, 99 WindowOpenDisposition disposition, 100 const blink::mojom::WindowFeatures& features, 101 bool user_gesture, 102 bool opener_suppressed, 103 bool* no_javascript_access) override; 104 void OverrideWebkitPrefs(content::WebContents* web_contents, 105 blink::web_pref::WebPreferences* prefs) override; 106 bool OverrideWebPreferencesAfterNavigation( 107 content::WebContents* web_contents, 108 blink::web_pref::WebPreferences* prefs) override; 109 void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override; 110 std::string GetDefaultDownloadName() override; 111 void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override; 112 std::unique_ptr<content::DevToolsManagerDelegate> 113 CreateDevToolsManagerDelegate() override; 114 std::vector<std::unique_ptr<content::NavigationThrottle>> 115 CreateThrottlesForNavigation( 116 content::NavigationHandle* navigation_handle) override; 117 std::vector<std::unique_ptr<blink::URLLoaderThrottle>> 118 CreateURLLoaderThrottles( 119 const network::ResourceRequest& request, 120 content::BrowserContext* browser_context, 121 const base::RepeatingCallback<content::WebContents*()>& wc_getter, 122 content::NavigationUIData* navigation_ui_data, 123 int frame_tree_node_id) override; 124 125 #if defined(OS_LINUX) 126 void GetAdditionalMappedFilesForChildProcess( 127 const base::CommandLine& command_line, 128 int child_process_id, 129 content::PosixFileDescriptorInfo* mappings) override; 130 #endif 131 132 void ExposeInterfacesToRenderer( 133 service_manager::BinderRegistry* registry, 134 blink::AssociatedInterfaceRegistry* associated_registry, 135 content::RenderProcessHost* render_process_host) override; 136 std::unique_ptr<net::ClientCertStore> CreateClientCertStore( 137 content::BrowserContext* browser_context) override; 138 std::unique_ptr<content::LoginDelegate> CreateLoginDelegate( 139 const net::AuthChallengeInfo& auth_info, 140 content::WebContents* web_contents, 141 const content::GlobalRequestID& request_id, 142 bool is_request_for_main_frame, 143 const GURL& url, 144 scoped_refptr<net::HttpResponseHeaders> response_headers, 145 bool first_auth_attempt, 146 LoginAuthRequiredCallback auth_required_callback) override; 147 void RegisterNonNetworkNavigationURLLoaderFactories( 148 int frame_tree_node_id, 149 ukm::SourceIdObj ukm_source_id, 150 NonNetworkURLLoaderFactoryMap* factories) override; 151 void RegisterNonNetworkSubresourceURLLoaderFactories( 152 int render_process_id, 153 int render_frame_id, 154 NonNetworkURLLoaderFactoryMap* factories) override; 155 bool WillCreateURLLoaderFactory( 156 content::BrowserContext* browser_context, 157 content::RenderFrameHost* frame, 158 int render_process_id, 159 URLLoaderFactoryType type, 160 const url::Origin& request_initiator, 161 base::Optional<int64_t> navigation_id, 162 ukm::SourceIdObj ukm_source_id, 163 mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver, 164 mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>* 165 header_client, 166 bool* bypass_redirect_checks, 167 bool* disable_secure_dns, 168 network::mojom::URLLoaderFactoryOverridePtr* factory_override) override; 169 void OnNetworkServiceCreated( 170 network::mojom::NetworkService* network_service) override; 171 void ConfigureNetworkContextParams( 172 content::BrowserContext* context, 173 bool in_memory, 174 const base::FilePath& relative_partition_path, 175 network::mojom::NetworkContextParams* network_context_params, 176 cert_verifier::mojom::CertVerifierCreationParams* 177 cert_verifier_creation_params) override; 178 std::vector<base::FilePath> GetNetworkContextsParentDirectory() override; 179 bool HandleExternalProtocol( 180 const GURL& url, 181 content::WebContents::OnceGetter web_contents_getter, 182 int child_id, 183 int frame_tree_node_id, 184 content::NavigationUIData* navigation_data, 185 bool is_main_frame, 186 ui::PageTransition page_transition, 187 bool has_user_gesture, 188 const base::Optional<url::Origin>& initiating_origin, 189 mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) 190 override; 191 bool HandleExternalProtocol( 192 content::WebContents::Getter web_contents_getter, 193 int frame_tree_node_id, 194 content::NavigationUIData* navigation_data, 195 const network::ResourceRequest& request, 196 mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) 197 override; 198 std::unique_ptr<content::OverlayWindow> CreateWindowForPictureInPicture( 199 content::PictureInPictureWindowController* controller) override; 200 void RegisterBrowserInterfaceBindersForFrame( 201 content::RenderFrameHost* render_frame_host, 202 mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override; 203 base::FilePath GetSandboxedStorageServiceDataDirectory() override; 204 std::string GetProduct() override; 205 std::string GetChromeProduct() override; 206 std::string GetUserAgent() override; 207 blink::UserAgentMetadata GetUserAgentMetadata() override; 208 base::flat_set<std::string> GetPluginMimeTypesWithExternalHandlers( 209 content::BrowserContext* browser_context) override; 210 bool ArePersistentMediaDeviceIDsAllowed( 211 content::BrowserContext* browser_context, 212 const GURL& scope, 213 const GURL& site_for_cookies, 214 const base::Optional<url::Origin>& top_frame_origin) override; 215 bool ShouldAllowPluginCreation( 216 const url::Origin& embedder_origin, 217 const content::PepperPluginInfo& plugin_info) override; 218 219 CefRefPtr<CefRequestContextImpl> request_context() const; 220 CefDevToolsDelegate* devtools_delegate() const; 221 222 scoped_refptr<base::SingleThreadTaskRunner> background_task_runner() const; 223 scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner() const; 224 scoped_refptr<base::SingleThreadTaskRunner> user_blocking_task_runner() const; 225 226 private: 227 // Returns the extension or app associated with |site_instance| or NULL. 228 const extensions::Extension* GetExtension( 229 content::SiteInstance* site_instance); 230 231 AlloyBrowserMainParts* browser_main_parts_ = nullptr; 232 233 std::unique_ptr<content::PluginServiceFilter> plugin_service_filter_; 234 }; 235 236 #endif // CEF_LIBCEF_BROWSER_ALLOY_ALLOY_CONTENT_BROWSER_CLIENT_H_ 237