[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" |
Ben Goodger | 6a695c01 | 2017-06-20 20:21:20 | [diff] [blame] | 17 | #include "services/service_manager/public/cpp/binder_registry.h" |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 18 | |
| 19 | namespace content { |
| 20 | |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 21 | class ResourceDispatcherHostDelegate; |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 22 | class ShellBrowserContext; |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 23 | class ShellBrowserMainParts; |
| 24 | |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 25 | std::string GetShellUserAgent(); |
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 | |
[email protected] | bdcf915 | 2012-07-19 17:43:21 | [diff] [blame] | 36 | // ContentBrowserClient overrides. |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 37 | BrowserMainParts* CreateBrowserMainParts( |
anand.ratn | 449f39a4 | 2014-10-06 13:45:57 | [diff] [blame] | 38 | const MainFunctionParams& parameters) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 39 | bool IsHandledURL(const GURL& url) override; |
Ben Goodger | 6a695c01 | 2017-06-20 20:21:20 | [diff] [blame] | 40 | void BindInterfaceRequestFromFrame( |
| 41 | content::RenderFrameHost* render_frame_host, |
Ben Goodger | 6a695c01 | 2017-06-20 20:21:20 | [diff] [blame] | 42 | const std::string& interface_name, |
| 43 | mojo::ScopedMessagePipeHandle interface_pipe) override; |
ben | d32292b | 2016-10-07 00:21:58 | [diff] [blame] | 44 | void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override; |
Ken Rockot | 3d8be74 | 2018-11-22 08:59:38 | [diff] [blame] | 45 | void HandleServiceRequest( |
| 46 | const std::string& service_name, |
| 47 | service_manager::mojom::ServiceRequest request) override; |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 48 | bool ShouldTerminateOnServiceQuit( |
| 49 | const service_manager::Identity& id) override; |
Ken Rockot | 8f39a27 | 2018-12-21 23:38:35 | [diff] [blame] | 50 | base::Optional<service_manager::Manifest> GetServiceManifestOverlay( |
sammc | 2b0375b | 2016-12-22 01:26:17 | [diff] [blame] | 51 | base::StringPiece name) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 52 | void AppendExtraCommandLineSwitches(base::CommandLine* command_line, |
| 53 | int child_process_id) override; |
Xiyuan Xia | af075dbd | 2018-09-19 18:14:12 | [diff] [blame] | 54 | void AdjustUtilityServiceProcessCommandLine( |
| 55 | const service_manager::Identity& identity, |
| 56 | base::CommandLine* command_line) override; |
Matt Menke | eda739b | 2018-07-31 18:51:28 | [diff] [blame] | 57 | std::string GetAcceptLangs(BrowserContext* context) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 58 | void ResourceDispatcherHostCreated() override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 59 | std::string GetDefaultDownloadName() override; |
| 60 | WebContentsViewDelegate* GetWebContentsViewDelegate( |
anand.ratn | 449f39a4 | 2014-10-06 13:45:57 | [diff] [blame] | 61 | WebContents* web_contents) override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 62 | QuotaPermissionContext* CreateQuotaPermissionContext() override; |
michaeln | 10e5fc35 | 2017-02-07 02:07:58 | [diff] [blame] | 63 | void GetQuotaSettings( |
| 64 | content::BrowserContext* context, |
| 65 | content::StoragePartition* partition, |
tapted | e6d878e | 2017-06-24 01:53:45 | [diff] [blame] | 66 | storage::OptionalQuotaSettingsCallback callback) override; |
Mythri Alle | 0b8de0d | 2018-10-22 11:06:22 | [diff] [blame] | 67 | GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings( |
| 68 | content::BrowserContext* context) override; |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 69 | void SelectClientCertificate( |
| 70 | WebContents* web_contents, |
| 71 | net::SSLCertRequestInfo* cert_request_info, |
mattm | 436ccfe | 2017-06-19 20:24:08 | [diff] [blame] | 72 | net::ClientCertIdentityList client_certs, |
dcheng | 6003e0b | 2016-04-09 18:42:34 | [diff] [blame] | 73 | std::unique_ptr<ClientCertificateDelegate> delegate) override; |
zork | b548de08 | 2014-11-14 21:40:47 | [diff] [blame] | 74 | SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate() |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 75 | override; |
| 76 | net::NetLog* GetNetLog() override; |
dcheng | e933b3e | 2014-10-21 11:44:09 | [diff] [blame] | 77 | DevToolsManagerDelegate* GetDevToolsManagerDelegate() override; |
Matt Falkenhagen | 18c5c5d | 2018-11-26 02:55:37 | [diff] [blame] | 78 | void OpenURL(SiteInstance* site_instance, |
peter | bbcccc1 | 2015-02-11 22:23:33 | [diff] [blame] | 79 | const OpenURLParams& params, |
| 80 | const base::Callback<void(WebContents*)>& callback) override; |
David Benjamin | eced01fc | 2019-02-27 18:29:02 | [diff] [blame] | 81 | std::unique_ptr<LoginDelegate> CreateLoginDelegate( |
Emily Stark | f2c9bbd | 2019-04-09 17:08:58 | [diff] [blame^] | 82 | const net::AuthChallengeInfo& auth_info, |
David Benjamin | eced01fc | 2019-02-27 18:29:02 | [diff] [blame] | 83 | content::WebContents* web_contents, |
Ken Rockot | 5f734e3 | 2018-06-13 01:41:03 | [diff] [blame] | 84 | const content::GlobalRequestID& request_id, |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 85 | bool is_main_frame, |
| 86 | const GURL& url, |
Ken Rockot | 5f734e3 | 2018-06-13 01:41:03 | [diff] [blame] | 87 | scoped_refptr<net::HttpResponseHeaders> response_headers, |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 88 | bool first_auth_attempt, |
Mark Pilgrim | 7cfcd11 | 2018-05-08 00:07:56 | [diff] [blame] | 89 | LoginAuthRequiredCallback auth_required_callback) override; |
mlamouri | eb40d55 | 2015-02-05 00:57:08 | [diff] [blame] | 90 | |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 91 | std::string GetUserAgent() const override; |
Mike West | 6e4cbb3 | 2019-02-13 09:40:17 | [diff] [blame] | 92 | blink::UserAgentMetadata GetUserAgentMetadata() const override; |
Yutaka Hirano | 968d625 | 2018-12-04 05:09:31 | [diff] [blame] | 93 | |
Wez | 010464a | 2017-10-26 17:42:23 | [diff] [blame] | 94 | #if defined(OS_LINUX) || defined(OS_ANDROID) |
agrieve | 05398f5 | 2015-06-24 18:59:00 | [diff] [blame] | 95 | void GetAdditionalMappedFilesForChildProcess( |
| 96 | const base::CommandLine& command_line, |
| 97 | int child_process_id, |
brettw | 3c98c7d3 | 2017-07-25 01:44:20 | [diff] [blame] | 98 | content::PosixFileDescriptorInfo* mappings) override; |
Wez | 010464a | 2017-10-26 17:42:23 | [diff] [blame] | 99 | #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
| 100 | |
[email protected] | a553b67 | 2014-04-16 05:40:41 | [diff] [blame] | 101 | #if defined(OS_WIN) |
rickyz | 5010931 | 2015-11-11 00:37:08 | [diff] [blame] | 102 | bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override; |
[email protected] | a553b67 | 2014-04-16 05:40:41 | [diff] [blame] | 103 | #endif |
[email protected] | f83a4739 | 2012-07-12 22:15:04 | [diff] [blame] | 104 | |
Eric Roman | 8e3170c | 2019-01-04 00:11:59 | [diff] [blame] | 105 | network::mojom::NetworkContextPtr CreateNetworkContext( |
| 106 | BrowserContext* context, |
| 107 | bool in_memory, |
| 108 | const base::FilePath& relative_partition_path) override; |
| 109 | |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 110 | ShellBrowserContext* browser_context(); |
[email protected] | 71d504f | 2012-07-25 17:15:28 | [diff] [blame] | 111 | ShellBrowserContext* off_the_record_browser_context(); |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 112 | ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate() { |
[email protected] | 71d504f | 2012-07-25 17:15:28 | [diff] [blame] | 113 | return resource_dispatcher_host_delegate_.get(); |
| 114 | } |
[email protected] | 7c17b69 | 2012-08-09 16:16:30 | [diff] [blame] | 115 | ShellBrowserMainParts* shell_browser_main_parts() { |
| 116 | return shell_browser_main_parts_; |
| 117 | } |
[email protected] | 147f809 | 2012-03-21 11:47:45 | [diff] [blame] | 118 | |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 119 | // Used for content_browsertests. |
| 120 | void set_select_client_certificate_callback( |
| 121 | base::Closure select_client_certificate_callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 122 | select_client_certificate_callback_ = |
| 123 | std::move(select_client_certificate_callback); |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 124 | } |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 125 | void set_should_terminate_on_service_quit_callback( |
| 126 | base::Callback<bool(const service_manager::Identity&)> callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 127 | should_terminate_on_service_quit_callback_ = std::move(callback); |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 128 | } |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 129 | void set_login_request_callback( |
| 130 | base::Callback<void()> login_request_callback) { |
Tommy Nyquist | 4b749d0 | 2018-03-20 21:46:29 | [diff] [blame] | 131 | login_request_callback_ = std::move(login_request_callback); |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 132 | } |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 133 | |
jochen | 5ce1af9 | 2016-02-17 20:39:45 | [diff] [blame] | 134 | protected: |
Reilly Grant | b0b4783 | 2017-08-31 23:57:09 | [diff] [blame] | 135 | virtual void ExposeInterfacesToFrame( |
| 136 | service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* |
| 137 | registry); |
| 138 | |
jochen | 5ce1af9 | 2016-02-17 20:39:45 | [diff] [blame] | 139 | void set_browser_main_parts(ShellBrowserMainParts* parts) { |
| 140 | shell_browser_main_parts_ = parts; |
| 141 | } |
| 142 | |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 143 | private: |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 144 | std::unique_ptr<ResourceDispatcherHostDelegate> |
[email protected] | e3503ac | 2012-04-05 15:01:36 | [diff] [blame] | 145 | resource_dispatcher_host_delegate_; |
| 146 | |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 147 | base::Closure select_client_certificate_callback_; |
James Cook | 5b2b398 | 2017-10-17 03:04:21 | [diff] [blame] | 148 | base::Callback<bool(const service_manager::Identity&)> |
| 149 | should_terminate_on_service_quit_callback_; |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 150 | base::Callback<void()> login_request_callback_; |
davidben | 3b8455ae7 | 2015-03-11 19:42:19 | [diff] [blame] | 151 | |
Reilly Grant | b0b4783 | 2017-08-31 23:57:09 | [diff] [blame] | 152 | std::unique_ptr< |
| 153 | service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>> |
Ben Goodger | 6a695c01 | 2017-06-20 20:21:20 | [diff] [blame] | 154 | frame_interfaces_; |
| 155 | |
[email protected] | b0f146f | 2011-09-15 22:14:25 | [diff] [blame] | 156 | ShellBrowserMainParts* shell_browser_main_parts_; |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 157 | }; |
| 158 | |
Eric Roman | 8e3170c | 2019-01-04 00:11:59 | [diff] [blame] | 159 | // The delay for sending reports when running with --run-web-tests |
| 160 | constexpr base::TimeDelta kReportingDeliveryIntervalTimeForWebTests = |
| 161 | base::TimeDelta::FromMilliseconds(100); |
| 162 | |
[email protected] | 5629e0c | 2011-09-12 22:07:36 | [diff] [blame] | 163 | } // namespace content |
| 164 | |
[email protected] | de7d61ff | 2013-08-20 11:30:41 | [diff] [blame] | 165 | #endif // CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_ |