• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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