blob: 487312b193c4858661c3493e047b1d4e4fb73aa0 [file] [log] [blame]
[email protected]de7d61ff2013-08-20 11:30:411// Copyright 2013 The Chromium Authors. All rights reserved.
[email protected]5629e0c2011-09-12 22:07:362// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]de7d61ff2013-08-20 11:30:415#ifndef CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_
6#define CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_
[email protected]5629e0c2011-09-12 22:07:367
dcheng6003e0b2016-04-09 18:42:348#include <memory>
[email protected]5629e0c2011-09-12 22:07:369#include <string>
10
Jun Caibc561f412018-02-28 18:41:3911#include "base/callback.h"
[email protected]5629e0c2011-09-12 22:07:3612#include "base/compiler_specific.h"
[email protected]57999812013-02-24 05:40:5213#include "base/files/file_path.h"
avi66a07722015-12-25 23:38:1214#include "build/build_config.h"
[email protected]87f3c082011-10-19 18:07:4415#include "content/public/browser/content_browser_client.h"
[email protected]9896c552013-08-29 19:03:2016#include "content/shell/browser/shell_speech_recognition_manager_delegate.h"
David Van Cleveb3aec9b2020-02-13 03:08:1217#include "services/network/public/mojom/network_context.mojom-forward.h"
[email protected]5629e0c2011-09-12 22:07:3618
19namespace content {
20
[email protected]147f8092012-03-21 11:47:4521class ShellBrowserContext;
[email protected]b0f146f2011-09-15 22:14:2522class ShellBrowserMainParts;
23
Yutaka Hirano968d6252018-12-04 05:09:3124std::string GetShellUserAgent();
Yoav Weiss8c9688d2019-11-07 17:21:0425std::string GetShellLanguage();
Mike West6e4cbb32019-02-13 09:40:1726blink::UserAgentMetadata GetShellUserAgentMetadata();
Yutaka Hirano968d6252018-12-04 05:09:3127
[email protected]7f5500872013-11-12 20:03:5428class ShellContentBrowserClient : public ContentBrowserClient {
[email protected]5629e0c2011-09-12 22:07:3629 public:
[email protected]eabbfb12013-04-05 23:28:3530 // Gets the current instance.
31 static ShellContentBrowserClient* Get();
32
[email protected]b0f146f2011-09-15 22:14:2533 ShellContentBrowserClient();
dchenge933b3e2014-10-21 11:44:0934 ~ShellContentBrowserClient() override;
[email protected]5629e0c2011-09-12 22:07:3635
Scott Violeta0a72ce2020-04-22 21:46:4136 // The value supplied here is set when creating the NetworkContext.
37 // Specifically
38 // network::mojom::NetworkContext::allow_any_cors_exempt_header_for_browser.
39 static void set_allow_any_cors_exempt_header_for_browser(bool value) {
40 allow_any_cors_exempt_header_for_browser_ = value;
41 }
42
[email protected]bdcf9152012-07-19 17:43:2143 // ContentBrowserClient overrides.
Patrick Monette61dfef92019-05-30 23:06:2744 std::unique_ptr<BrowserMainParts> CreateBrowserMainParts(
anand.ratn449f39a42014-10-06 13:45:5745 const MainFunctionParams& parameters) override;
dchenge933b3e2014-10-21 11:44:0946 bool IsHandledURL(const GURL& url) override;
James Cook5b2b3982017-10-17 03:04:2147 bool ShouldTerminateOnServiceQuit(
48 const service_manager::Identity& id) override;
dchenge933b3e2014-10-21 11:44:0949 void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
50 int child_process_id) override;
Matt Menkeeda739b2018-07-31 18:51:2851 std::string GetAcceptLangs(BrowserContext* context) override;
dchenge933b3e2014-10-21 11:44:0952 std::string GetDefaultDownloadName() override;
53 WebContentsViewDelegate* GetWebContentsViewDelegate(
anand.ratn449f39a42014-10-06 13:45:5754 WebContents* web_contents) override;
Yeolf3dc22ca2019-04-18 17:25:3255 scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext()
56 override;
Mythri Alle0b8de0d2018-10-22 11:06:2257 GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
58 content::BrowserContext* context) override;
Daniel McArdle85735f52019-06-25 03:27:0659 base::OnceClosure SelectClientCertificate(
davidben3b8455ae72015-03-11 19:42:1960 WebContents* web_contents,
61 net::SSLCertRequestInfo* cert_request_info,
mattm436ccfe2017-06-19 20:24:0862 net::ClientCertIdentityList client_certs,
dcheng6003e0b2016-04-09 18:42:3463 std::unique_ptr<ClientCertificateDelegate> delegate) override;
zorkb548de082014-11-14 21:40:4764 SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate()
dchenge933b3e2014-10-21 11:44:0965 override;
Alison Maher7f366dc62020-03-03 19:46:0066 void OverrideWebkitPrefs(RenderViewHost* render_view_host,
67 WebPreferences* prefs) override;
Dominik Röttsches7761c472019-09-05 07:22:3368 base::FilePath GetFontLookupTableCacheDir() override;
dchenge933b3e2014-10-21 11:44:0969 DevToolsManagerDelegate* GetDevToolsManagerDelegate() override;
Chris Hamilton82d3c962020-04-27 22:02:1270 void ExposeInterfacesToRenderer(
71 service_manager::BinderRegistry* registry,
72 blink::AssociatedInterfaceRegistry* associated_registry,
73 RenderProcessHost* render_process_host) override;
Ken Rockot965b4772019-12-12 23:23:0174 mojo::Remote<::media::mojom::MediaService> RunSecondaryMediaService()
75 override;
Chris Hamilton82d3c962020-04-27 22:02:1276 void RegisterBrowserInterfaceBindersForFrame(
77 RenderFrameHost* render_frame_host,
78 service_manager::BinderMapWithContext<RenderFrameHost*>* map) override;
Matt Falkenhagen18c5c5d2018-11-26 02:55:3779 void OpenURL(SiteInstance* site_instance,
peterbbcccc12015-02-11 22:23:3380 const OpenURLParams& params,
danakja9fe91c2019-05-01 19:02:2981 base::OnceCallback<void(WebContents*)> callback) override;
David Benjamineced01fc2019-02-27 18:29:0282 std::unique_ptr<LoginDelegate> CreateLoginDelegate(
Emily Starkf2c9bbd2019-04-09 17:08:5883 const net::AuthChallengeInfo& auth_info,
David Benjamineced01fc2019-02-27 18:29:0284 content::WebContents* web_contents,
Ken Rockot5f734e32018-06-13 01:41:0385 const content::GlobalRequestID& request_id,
Jun Caibc561f412018-02-28 18:41:3986 bool is_main_frame,
87 const GURL& url,
Ken Rockot5f734e32018-06-13 01:41:0388 scoped_refptr<net::HttpResponseHeaders> response_headers,
Jun Caibc561f412018-02-28 18:41:3989 bool first_auth_attempt,
Mark Pilgrim7cfcd112018-05-08 00:07:5690 LoginAuthRequiredCallback auth_required_callback) override;
Ken Rockot4e284d32020-03-06 06:26:4991 base::FilePath GetSandboxedStorageServiceDataDirectory() override;
mlamourieb40d552015-02-05 00:57:0892
Lucas Furukawa Gadani4909f3c2019-06-18 22:36:5293 std::string GetUserAgent() override;
94 blink::UserAgentMetadata GetUserAgentMetadata() override;
Yutaka Hirano968d6252018-12-04 05:09:3195
David Van Cleveb3aec9b2020-02-13 03:08:1296 void OverrideURLLoaderFactoryParams(
97 BrowserContext* browser_context,
98 const url::Origin& origin,
99 bool is_for_isolated_world,
100 network::mojom::URLLoaderFactoryParams* factory_params) override;
101
Wez010464a2017-10-26 17:42:23102#if defined(OS_LINUX) || defined(OS_ANDROID)
agrieve05398f52015-06-24 18:59:00103 void GetAdditionalMappedFilesForChildProcess(
104 const base::CommandLine& command_line,
105 int child_process_id,
brettw3c98c7d32017-07-25 01:44:20106 content::PosixFileDescriptorInfo* mappings) override;
Wez010464a2017-10-26 17:42:23107#endif // defined(OS_LINUX) || defined(OS_ANDROID)
108
Julie Jeongeun Kim5984e992019-09-11 11:00:46109 mojo::Remote<network::mojom::NetworkContext> CreateNetworkContext(
Eric Roman8e3170c2019-01-04 00:11:59110 BrowserContext* context,
111 bool in_memory,
112 const base::FilePath& relative_partition_path) override;
Robert Sesek466e43e2019-08-19 22:02:02113 std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
Eric Roman8e3170c2019-01-04 00:11:59114
[email protected]147f8092012-03-21 11:47:45115 ShellBrowserContext* browser_context();
[email protected]71d504f2012-07-25 17:15:28116 ShellBrowserContext* off_the_record_browser_context();
[email protected]7c17b692012-08-09 16:16:30117 ShellBrowserMainParts* shell_browser_main_parts() {
118 return shell_browser_main_parts_;
119 }
[email protected]147f8092012-03-21 11:47:45120
davidben3b8455ae72015-03-11 19:42:19121 // Used for content_browsertests.
122 void set_select_client_certificate_callback(
danakj1eaf6662019-04-26 19:15:58123 base::OnceClosure select_client_certificate_callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29124 select_client_certificate_callback_ =
125 std::move(select_client_certificate_callback);
davidben3b8455ae72015-03-11 19:42:19126 }
James Cook5b2b3982017-10-17 03:04:21127 void set_should_terminate_on_service_quit_callback(
danakj1eaf6662019-04-26 19:15:58128 base::OnceCallback<bool(const service_manager::Identity&)> callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29129 should_terminate_on_service_quit_callback_ = std::move(callback);
James Cook5b2b3982017-10-17 03:04:21130 }
Hayato Itoee6ca192019-06-04 03:06:36131 void set_login_request_callback(
132 base::OnceCallback<void(bool is_main_frame)> login_request_callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29133 login_request_callback_ = std::move(login_request_callback);
Jun Caibc561f412018-02-28 18:41:39134 }
David Van Cleveb3aec9b2020-02-13 03:08:12135 void set_url_loader_factory_params_callback(
136 base::RepeatingCallback<void(
137 const network::mojom::URLLoaderFactoryParams*,
138 const url::Origin&,
139 bool is_for_isolated_world)> url_loader_factory_params_callback) {
140 url_loader_factory_params_callback_ =
141 std::move(url_loader_factory_params_callback);
142 }
Chris Hamilton82d3c962020-04-27 22:02:12143 void set_expose_interfaces_to_renderer_callback(
144 base::RepeatingCallback<
145 void(service_manager::BinderRegistry* registry,
146 blink::AssociatedInterfaceRegistry* associated_registry,
147 RenderProcessHost* render_process_host)>
148 expose_interfaces_to_renderer_callback) {
149 expose_interfaces_to_renderer_callback_ =
150 expose_interfaces_to_renderer_callback;
151 }
152 void set_register_browser_interface_binders_for_frame_callback(
153 base::RepeatingCallback<
154 void(RenderFrameHost* render_frame_host,
155 service_manager::BinderMapWithContext<RenderFrameHost*>* map)>
156 register_browser_interface_binders_for_frame_callback) {
157 register_browser_interface_binders_for_frame_callback_ =
158 register_browser_interface_binders_for_frame_callback;
159 }
davidben3b8455ae72015-03-11 19:42:19160
jochen5ce1af92016-02-17 20:39:45161 protected:
danakjc7cd1dc2020-03-26 16:21:38162 // Call this if CreateBrowserMainParts() is overridden in a subclass.
jochen5ce1af92016-02-17 20:39:45163 void set_browser_main_parts(ShellBrowserMainParts* parts) {
164 shell_browser_main_parts_ = parts;
165 }
166
danakjc7cd1dc2020-03-26 16:21:38167 // Used by CreateNetworkContext(), and can be overridden to change the
168 // parameters used there.
169 virtual network::mojom::NetworkContextParamsPtr CreateNetworkContextParams(
170 BrowserContext* context);
171
[email protected]b0f146f2011-09-15 22:14:25172 private:
Scott Violeta0a72ce2020-04-22 21:46:41173 static bool allow_any_cors_exempt_header_for_browser_;
174
danakj1eaf6662019-04-26 19:15:58175 base::OnceClosure select_client_certificate_callback_;
176 base::OnceCallback<bool(const service_manager::Identity&)>
James Cook5b2b3982017-10-17 03:04:21177 should_terminate_on_service_quit_callback_;
Hayato Itoee6ca192019-06-04 03:06:36178 base::OnceCallback<void(bool is_main_frame)> login_request_callback_;
David Van Cleveb3aec9b2020-02-13 03:08:12179 base::RepeatingCallback<void(const network::mojom::URLLoaderFactoryParams*,
180 const url::Origin&,
181 bool is_for_isolated_world)>
182 url_loader_factory_params_callback_;
Chris Hamilton82d3c962020-04-27 22:02:12183 base::RepeatingCallback<void(
184 service_manager::BinderRegistry* registry,
185 blink::AssociatedInterfaceRegistry* associated_registry,
186 RenderProcessHost* render_process_host)>
187 expose_interfaces_to_renderer_callback_;
188 base::RepeatingCallback<void(
189 RenderFrameHost* render_frame_host,
190 service_manager::BinderMapWithContext<RenderFrameHost*>* map)>
191 register_browser_interface_binders_for_frame_callback_;
davidben3b8455ae72015-03-11 19:42:19192
Patrick Monette61dfef92019-05-30 23:06:27193 // Owned by content::BrowserMainLoop.
[email protected]b0f146f2011-09-15 22:14:25194 ShellBrowserMainParts* shell_browser_main_parts_;
[email protected]5629e0c2011-09-12 22:07:36195};
196
Eric Roman8e3170c2019-01-04 00:11:59197// The delay for sending reports when running with --run-web-tests
198constexpr base::TimeDelta kReportingDeliveryIntervalTimeForWebTests =
199 base::TimeDelta::FromMilliseconds(100);
200
[email protected]5629e0c2011-09-12 22:07:36201} // namespace content
202
[email protected]de7d61ff2013-08-20 11:30:41203#endif // CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_