• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 The Chromium Embedded Framework Authors.
2 // Portions copyright 2012 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 
6 #ifndef CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_
7 #define CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_
8 
9 #include <memory>
10 
11 #include "libcef/browser/request_context_impl.h"
12 
13 #include "base/macros.h"
14 #include "chrome/browser/chrome_content_browser_client.h"
15 
16 class ChromeBrowserMainExtraPartsCef;
17 
18 // CEF override of ChromeContentBrowserClient.
19 class ChromeContentBrowserClientCef : public ChromeContentBrowserClient {
20  public:
21   ChromeContentBrowserClientCef();
22   ~ChromeContentBrowserClientCef() override;
23 
24   // ChromeContentBrowserClient overrides.
25   std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
26       const content::MainFunctionParams& parameters) override;
27   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
28                                       int child_process_id) override;
29   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
30   bool CanCreateWindow(content::RenderFrameHost* opener,
31                        const GURL& opener_url,
32                        const GURL& opener_top_level_frame_url,
33                        const url::Origin& source_origin,
34                        content::mojom::WindowContainerType container_type,
35                        const GURL& target_url,
36                        const content::Referrer& referrer,
37                        const std::string& frame_name,
38                        WindowOpenDisposition disposition,
39                        const blink::mojom::WindowFeatures& features,
40                        bool user_gesture,
41                        bool opener_suppressed,
42                        bool* no_javascript_access) override;
43   void OverrideWebkitPrefs(content::WebContents* web_contents,
44                            blink::web_pref::WebPreferences* prefs) override;
45   bool WillCreateURLLoaderFactory(
46       content::BrowserContext* browser_context,
47       content::RenderFrameHost* frame,
48       int render_process_id,
49       URLLoaderFactoryType type,
50       const url::Origin& request_initiator,
51       base::Optional<int64_t> navigation_id,
52       ukm::SourceIdObj ukm_source_id,
53       mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
54       mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
55           header_client,
56       bool* bypass_redirect_checks,
57       bool* disable_secure_dns,
58       network::mojom::URLLoaderFactoryOverridePtr* factory_override) override;
59   bool HandleExternalProtocol(
60       const GURL& url,
61       content::WebContents::OnceGetter web_contents_getter,
62       int child_id,
63       int frame_tree_node_id,
64       content::NavigationUIData* navigation_data,
65       bool is_main_frame,
66       ui::PageTransition page_transition,
67       bool has_user_gesture,
68       const base::Optional<url::Origin>& initiating_origin,
69       mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
70       override;
71   bool HandleExternalProtocol(
72       content::WebContents::Getter web_contents_getter,
73       int frame_tree_node_id,
74       content::NavigationUIData* navigation_data,
75       const network::ResourceRequest& request,
76       mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
77       override;
78   std::vector<std::unique_ptr<content::NavigationThrottle>>
79   CreateThrottlesForNavigation(
80       content::NavigationHandle* navigation_handle) override;
81   void ConfigureNetworkContextParams(
82       content::BrowserContext* context,
83       bool in_memory,
84       const base::FilePath& relative_partition_path,
85       network::mojom::NetworkContextParams* network_context_params,
86       cert_verifier::mojom::CertVerifierCreationParams*
87           cert_verifier_creation_params) override;
88   std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
89       const net::AuthChallengeInfo& auth_info,
90       content::WebContents* web_contents,
91       const content::GlobalRequestID& request_id,
92       bool is_request_for_main_frame,
93       const GURL& url,
94       scoped_refptr<net::HttpResponseHeaders> response_headers,
95       bool first_auth_attempt,
96       LoginAuthRequiredCallback auth_required_callback) override;
97   void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
98   bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin) override;
99 
100   CefRefPtr<CefRequestContextImpl> request_context() const;
101 
102   scoped_refptr<base::SingleThreadTaskRunner> background_task_runner() const;
103   scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner() const;
104   scoped_refptr<base::SingleThreadTaskRunner> user_blocking_task_runner() const;
105 
106  private:
107   ChromeBrowserMainExtraPartsCef* browser_main_parts_ = nullptr;
108 
109   DISALLOW_COPY_AND_ASSIGN(ChromeContentBrowserClientCef);
110 };
111 
112 #endif  // CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTENT_BROWSER_CLIENT_CEF_
113