[email protected] | de7d61ff | 2013-08-20 11:30:41 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | de7d61ff | 2013-08-20 11:30:41 | [diff] [blame] | 5 | #ifndef CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_ |
| 6 | #define CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_ |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 7 | |
dcheng | 6003e0b | 2016-04-09 18:42:34 | [diff] [blame] | 8 | #include <memory> |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 9 | #include <string> |
| 10 | |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 11 | #include "base/callback.h" |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 12 | #include "base/compiler_specific.h" |
[email protected] | 5799981 | 2013-02-24 05:40:52 | [diff] [blame] | 13 | #include "base/files/file_path.h" |
avi | 66a0772 | 2015-12-25 23:38:12 | [diff] [blame] | 14 | #include "build/build_config.h" |
[email protected] | 87f3c08 | 2011-10-19 18:07:44 | [diff] [blame] | 15 | #include "content/public/browser/content_browser_client.h" |
[email protected] | 9896c55 | 2013-08-29 19:03:20 | [diff] [blame] | 16 | #include "content/shell/browser/shell_speech_recognition_manager_delegate.h" |
David Van Cleve | b3aec9b | 2020-02-13 03:08:12 | [diff] [blame] | 17 | #include "services/network/public/mojom/network_context.mojom-forward.h" |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 18 | |
| 19 | namespace content { |
| 20 | |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 21 | class ShellBrowserContext; |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 22 | class ShellBrowserMainParts; |
| 23 | |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 24 | std::string GetShellUserAgent(); |
Yoav Weiss | 8c9688d | 2019-11-07 17:21:04 | [diff] [blame] | 25 | std::string GetShellLanguage(); |
Mike West | 6e4cbb3 | 2019-02-13 09:40:17 | [diff] [blame] | 26 | blink::UserAgentMetadata GetShellUserAgentMetadata(); |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 27 | |
[email protected] | 7f550087 | 2013-11-12 20:03:54 | [diff] [blame] | 28 | class ShellContentBrowserClient : public ContentBrowserClient { |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 29 | public: |
[email protected] | eabbfb1 | 2013-04-05 23:28:35 | [diff] [blame] | 30 | // Gets the current instance. |
| 31 | static ShellContentBrowserClient* Get(); |
| 32 | |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 33 | ShellContentBrowserClient(); |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 34 | ~ShellContentBrowserClient() override; |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 35 | |
Scott Violet | a0a72ce | 2020-04-22 21:46:41 | [diff] [blame] | 36 | // 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] | bdcf915 | 2012-07-19 17:43:21 | [diff] [blame] | 43 | // ContentBrowserClient overrides. |
Patrick Monette | 61dfef9 | 2019-05-30 23:06:27 | [diff] [blame] | 44 | std::unique_ptr<BrowserMainParts> CreateBrowserMainParts( |
anand.ratn | 449f39a4 | 2014-10-06 13:45:57 | [diff] [blame] | 45 | const MainFunctionParams& parameters) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 46 | bool IsHandledURL(const GURL& url) override; |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 47 | bool ShouldTerminateOnServiceQuit( |
| 48 | const service_manager::Identity& id) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 49 | void AppendExtraCommandLineSwitches(base::CommandLine* command_line, |
| 50 | int child_process_id) override; |
Matt Menke | eda739b | 2018-07-31 18:51:28 | [diff] [blame] | 51 | std::string GetAcceptLangs(BrowserContext* context) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 52 | std::string GetDefaultDownloadName() override; |
| 53 | WebContentsViewDelegate* GetWebContentsViewDelegate( |
anand.ratn | 449f39a4 | 2014-10-06 13:45:57 | [diff] [blame] | 54 | WebContents* web_contents) override; |
Yeol | f3dc22ca | 2019-04-18 17:25:32 | [diff] [blame] | 55 | scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext() |
| 56 | override; |
Mythri Alle | 0b8de0d | 2018-10-22 11:06:22 | [diff] [blame] | 57 | GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings( |
| 58 | content::BrowserContext* context) override; |
Daniel McArdle | 85735f5 | 2019-06-25 03:27:06 | [diff] [blame] | 59 | base::OnceClosure SelectClientCertificate( |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 60 | WebContents* web_contents, |
| 61 | net::SSLCertRequestInfo* cert_request_info, |
mattm | 436ccfe | 2017-06-19 20:24:08 | [diff] [blame] | 62 | net::ClientCertIdentityList client_certs, |
dcheng | 6003e0b | 2016-04-09 18:42:34 | [diff] [blame] | 63 | std::unique_ptr<ClientCertificateDelegate> delegate) override; |
zork | b548de08 | 2014-11-14 21:40:47 | [diff] [blame] | 64 | SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate() |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 65 | override; |
Alison Maher | 7f366dc6 | 2020-03-03 19:46:00 | [diff] [blame] | 66 | void OverrideWebkitPrefs(RenderViewHost* render_view_host, |
| 67 | WebPreferences* prefs) override; |
Dominik Röttsches | 7761c47 | 2019-09-05 07:22:33 | [diff] [blame] | 68 | base::FilePath GetFontLookupTableCacheDir() override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 69 | DevToolsManagerDelegate* GetDevToolsManagerDelegate() override; |
Chris Hamilton | 82d3c96 | 2020-04-27 22:02:12 | [diff] [blame] | 70 | void ExposeInterfacesToRenderer( |
| 71 | service_manager::BinderRegistry* registry, |
| 72 | blink::AssociatedInterfaceRegistry* associated_registry, |
| 73 | RenderProcessHost* render_process_host) override; |
Ken Rockot | 965b477 | 2019-12-12 23:23:01 | [diff] [blame] | 74 | mojo::Remote<::media::mojom::MediaService> RunSecondaryMediaService() |
| 75 | override; |
Chris Hamilton | 82d3c96 | 2020-04-27 22:02:12 | [diff] [blame] | 76 | void RegisterBrowserInterfaceBindersForFrame( |
| 77 | RenderFrameHost* render_frame_host, |
| 78 | service_manager::BinderMapWithContext<RenderFrameHost*>* map) override; |
Matt Falkenhagen | 18c5c5d | 2018-11-26 02:55:37 | [diff] [blame] | 79 | void OpenURL(SiteInstance* site_instance, |
peter | bbcccc1 | 2015-02-11 22:23:33 | [diff] [blame] | 80 | const OpenURLParams& params, |
danakj | a9fe91c | 2019-05-01 19:02:29 | [diff] [blame] | 81 | base::OnceCallback<void(WebContents*)> callback) override; |
David Benjamin | eced01fc | 2019-02-27 18:29:02 | [diff] [blame] | 82 | std::unique_ptr<LoginDelegate> CreateLoginDelegate( |
Emily Stark | f2c9bbd | 2019-04-09 17:08:58 | [diff] [blame] | 83 | const net::AuthChallengeInfo& auth_info, |
David Benjamin | eced01fc | 2019-02-27 18:29:02 | [diff] [blame] | 84 | content::WebContents* web_contents, |
Ken Rockot | 5f734e3 | 2018-06-13 01:41:03 | [diff] [blame] | 85 | const content::GlobalRequestID& request_id, |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 86 | bool is_main_frame, |
| 87 | const GURL& url, |
Ken Rockot | 5f734e3 | 2018-06-13 01:41:03 | [diff] [blame] | 88 | scoped_refptr<net::HttpResponseHeaders> response_headers, |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 89 | bool first_auth_attempt, |
Mark Pilgrim | 7cfcd11 | 2018-05-08 00:07:56 | [diff] [blame] | 90 | LoginAuthRequiredCallback auth_required_callback) override; |
Ken Rockot | 4e284d3 | 2020-03-06 06:26:49 | [diff] [blame] | 91 | base::FilePath GetSandboxedStorageServiceDataDirectory() override; |
mlamouri | eb40d55 | 2015-02-05 00:57:08 | [diff] [blame] | 92 | |
Lucas Furukawa Gadani | 4909f3c | 2019-06-18 22:36:52 | [diff] [blame] | 93 | std::string GetUserAgent() override; |
| 94 | blink::UserAgentMetadata GetUserAgentMetadata() override; |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 95 | |
David Van Cleve | b3aec9b | 2020-02-13 03:08:12 | [diff] [blame] | 96 | 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 | |
Wez | 010464a | 2017-10-26 17:42:23 | [diff] [blame] | 102 | #if defined(OS_LINUX) || defined(OS_ANDROID) |
agrieve | 05398f5 | 2015-06-24 18:59:00 | [diff] [blame] | 103 | void GetAdditionalMappedFilesForChildProcess( |
| 104 | const base::CommandLine& command_line, |
| 105 | int child_process_id, |
brettw | 3c98c7d3 | 2017-07-25 01:44:20 | [diff] [blame] | 106 | content::PosixFileDescriptorInfo* mappings) override; |
Wez | 010464a | 2017-10-26 17:42:23 | [diff] [blame] | 107 | #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
| 108 | |
Julie Jeongeun Kim | 5984e99 | 2019-09-11 11:00:46 | [diff] [blame] | 109 | mojo::Remote<network::mojom::NetworkContext> CreateNetworkContext( |
Eric Roman | 8e3170c | 2019-01-04 00:11:59 | [diff] [blame] | 110 | BrowserContext* context, |
| 111 | bool in_memory, |
| 112 | const base::FilePath& relative_partition_path) override; |
Robert Sesek | 466e43e | 2019-08-19 22:02:02 | [diff] [blame] | 113 | std::vector<base::FilePath> GetNetworkContextsParentDirectory() override; |
Eric Roman | 8e3170c | 2019-01-04 00:11:59 | [diff] [blame] | 114 | |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 115 | ShellBrowserContext* browser_context(); |
[email protected] | 71d504f | 2012-07-25 17:15:28 | [diff] [blame] | 116 | ShellBrowserContext* off_the_record_browser_context(); |
[email protected] | 7c17b69 | 2012-08-09 16:16:30 | [diff] [blame] | 117 | ShellBrowserMainParts* shell_browser_main_parts() { |
| 118 | return shell_browser_main_parts_; |
| 119 | } |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 120 | |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 121 | // Used for content_browsertests. |
| 122 | void set_select_client_certificate_callback( |
danakj | 1eaf666 | 2019-04-26 19:15:58 | [diff] [blame] | 123 | base::OnceClosure select_client_certificate_callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 124 | select_client_certificate_callback_ = |
| 125 | std::move(select_client_certificate_callback); |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 126 | } |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 127 | void set_should_terminate_on_service_quit_callback( |
danakj | 1eaf666 | 2019-04-26 19:15:58 | [diff] [blame] | 128 | base::OnceCallback<bool(const service_manager::Identity&)> callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 129 | should_terminate_on_service_quit_callback_ = std::move(callback); |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 130 | } |
Hayato Ito | ee6ca19 | 2019-06-04 03:06:36 | [diff] [blame] | 131 | void set_login_request_callback( |
| 132 | base::OnceCallback<void(bool is_main_frame)> login_request_callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 133 | login_request_callback_ = std::move(login_request_callback); |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 134 | } |
David Van Cleve | b3aec9b | 2020-02-13 03:08:12 | [diff] [blame] | 135 | 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 Hamilton | 82d3c96 | 2020-04-27 22:02:12 | [diff] [blame] | 143 | 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 | } |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 160 | |
jochen | 5ce1af9 | 2016-02-17 20:39:45 | [diff] [blame] | 161 | protected: |
danakj | c7cd1dc | 2020-03-26 16:21:38 | [diff] [blame] | 162 | // Call this if CreateBrowserMainParts() is overridden in a subclass. |
jochen | 5ce1af9 | 2016-02-17 20:39:45 | [diff] [blame] | 163 | void set_browser_main_parts(ShellBrowserMainParts* parts) { |
| 164 | shell_browser_main_parts_ = parts; |
| 165 | } |
| 166 | |
danakj | c7cd1dc | 2020-03-26 16:21:38 | [diff] [blame] | 167 | // 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] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 172 | private: |
Scott Violet | a0a72ce | 2020-04-22 21:46:41 | [diff] [blame] | 173 | static bool allow_any_cors_exempt_header_for_browser_; |
| 174 | |
danakj | 1eaf666 | 2019-04-26 19:15:58 | [diff] [blame] | 175 | base::OnceClosure select_client_certificate_callback_; |
| 176 | base::OnceCallback<bool(const service_manager::Identity&)> |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 177 | should_terminate_on_service_quit_callback_; |
Hayato Ito | ee6ca19 | 2019-06-04 03:06:36 | [diff] [blame] | 178 | base::OnceCallback<void(bool is_main_frame)> login_request_callback_; |
David Van Cleve | b3aec9b | 2020-02-13 03:08:12 | [diff] [blame] | 179 | base::RepeatingCallback<void(const network::mojom::URLLoaderFactoryParams*, |
| 180 | const url::Origin&, |
| 181 | bool is_for_isolated_world)> |
| 182 | url_loader_factory_params_callback_; |
Chris Hamilton | 82d3c96 | 2020-04-27 22:02:12 | [diff] [blame] | 183 | 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_; |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 192 | |
Patrick Monette | 61dfef9 | 2019-05-30 23:06:27 | [diff] [blame] | 193 | // Owned by content::BrowserMainLoop. |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 194 | ShellBrowserMainParts* shell_browser_main_parts_; |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 195 | }; |
| 196 | |
Eric Roman | 8e3170c | 2019-01-04 00:11:59 | [diff] [blame] | 197 | // The delay for sending reports when running with --run-web-tests |
| 198 | constexpr base::TimeDelta kReportingDeliveryIntervalTimeForWebTests = |
| 199 | base::TimeDelta::FromMilliseconds(100); |
| 200 | |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 201 | } // namespace content |
| 202 | |
[email protected] | de7d61ff | 2013-08-20 11:30:41 | [diff] [blame] | 203 | #endif // CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_ |