blob: e07c9a09c9783b3b4b08a2c618b70a274910f0c0 [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"
Ben Goodger6a695c012017-06-20 20:21:2017#include "services/service_manager/public/cpp/binder_registry.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();
Mike West6e4cbb32019-02-13 09:40:1725blink::UserAgentMetadata GetShellUserAgentMetadata();
Yutaka Hirano968d6252018-12-04 05:09:3126
[email protected]7f5500872013-11-12 20:03:5427class ShellContentBrowserClient : public ContentBrowserClient {
[email protected]5629e0c2011-09-12 22:07:3628 public:
[email protected]eabbfb12013-04-05 23:28:3529 // Gets the current instance.
30 static ShellContentBrowserClient* Get();
31
[email protected]b0f146f2011-09-15 22:14:2532 ShellContentBrowserClient();
dchenge933b3e2014-10-21 11:44:0933 ~ShellContentBrowserClient() override;
[email protected]5629e0c2011-09-12 22:07:3634
[email protected]bdcf9152012-07-19 17:43:2135 // ContentBrowserClient overrides.
Patrick Monette61dfef92019-05-30 23:06:2736 std::unique_ptr<BrowserMainParts> CreateBrowserMainParts(
anand.ratn449f39a42014-10-06 13:45:5737 const MainFunctionParams& parameters) override;
dchenge933b3e2014-10-21 11:44:0938 bool IsHandledURL(const GURL& url) override;
Ben Goodger6a695c012017-06-20 20:21:2039 void BindInterfaceRequestFromFrame(
40 content::RenderFrameHost* render_frame_host,
Ben Goodger6a695c012017-06-20 20:21:2041 const std::string& interface_name,
42 mojo::ScopedMessagePipeHandle interface_pipe) override;
Ken Rockot06fd2832019-05-24 17:24:4443 void RunServiceInstance(
44 const service_manager::Identity& identity,
45 mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
46 override;
James Cook5b2b3982017-10-17 03:04:2147 bool ShouldTerminateOnServiceQuit(
48 const service_manager::Identity& id) override;
Ken Rockot8f39a272018-12-21 23:38:3549 base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
sammc2b0375b2016-12-22 01:26:1750 base::StringPiece name) override;
dchenge933b3e2014-10-21 11:44:0951 void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
52 int child_process_id) override;
Matt Menkeeda739b2018-07-31 18:51:2853 std::string GetAcceptLangs(BrowserContext* context) override;
dchenge933b3e2014-10-21 11:44:0954 std::string GetDefaultDownloadName() override;
55 WebContentsViewDelegate* GetWebContentsViewDelegate(
anand.ratn449f39a42014-10-06 13:45:5756 WebContents* web_contents) override;
Yeolf3dc22ca2019-04-18 17:25:3257 scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext()
58 override;
michaeln10e5fc352017-02-07 02:07:5859 void GetQuotaSettings(
60 content::BrowserContext* context,
61 content::StoragePartition* partition,
taptede6d878e2017-06-24 01:53:4562 storage::OptionalQuotaSettingsCallback callback) override;
Mythri Alle0b8de0d2018-10-22 11:06:2263 GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
64 content::BrowserContext* context) override;
Daniel McArdle85735f52019-06-25 03:27:0665 base::OnceClosure SelectClientCertificate(
davidben3b8455ae72015-03-11 19:42:1966 WebContents* web_contents,
67 net::SSLCertRequestInfo* cert_request_info,
mattm436ccfe2017-06-19 20:24:0868 net::ClientCertIdentityList client_certs,
dcheng6003e0b2016-04-09 18:42:3469 std::unique_ptr<ClientCertificateDelegate> delegate) override;
zorkb548de082014-11-14 21:40:4770 SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate()
dchenge933b3e2014-10-21 11:44:0971 override;
Rune Lillesveen96e3ba72019-05-25 22:00:4372 void OverrideWebkitPrefs(RenderViewHost* render_view_host,
73 WebPreferences* prefs) override;
dchenge933b3e2014-10-21 11:44:0974 DevToolsManagerDelegate* GetDevToolsManagerDelegate() override;
Matt Falkenhagen18c5c5d2018-11-26 02:55:3775 void OpenURL(SiteInstance* site_instance,
peterbbcccc12015-02-11 22:23:3376 const OpenURLParams& params,
danakja9fe91c2019-05-01 19:02:2977 base::OnceCallback<void(WebContents*)> callback) override;
David Benjamineced01fc2019-02-27 18:29:0278 std::unique_ptr<LoginDelegate> CreateLoginDelegate(
Emily Starkf2c9bbd2019-04-09 17:08:5879 const net::AuthChallengeInfo& auth_info,
David Benjamineced01fc2019-02-27 18:29:0280 content::WebContents* web_contents,
Ken Rockot5f734e32018-06-13 01:41:0381 const content::GlobalRequestID& request_id,
Jun Caibc561f412018-02-28 18:41:3982 bool is_main_frame,
83 const GURL& url,
Ken Rockot5f734e32018-06-13 01:41:0384 scoped_refptr<net::HttpResponseHeaders> response_headers,
Jun Caibc561f412018-02-28 18:41:3985 bool first_auth_attempt,
Mark Pilgrim7cfcd112018-05-08 00:07:5686 LoginAuthRequiredCallback auth_required_callback) override;
mlamourieb40d552015-02-05 00:57:0887
Lucas Furukawa Gadani4909f3c2019-06-18 22:36:5288 std::string GetUserAgent() override;
89 blink::UserAgentMetadata GetUserAgentMetadata() override;
Yutaka Hirano968d6252018-12-04 05:09:3190
Wez010464a2017-10-26 17:42:2391#if defined(OS_LINUX) || defined(OS_ANDROID)
agrieve05398f52015-06-24 18:59:0092 void GetAdditionalMappedFilesForChildProcess(
93 const base::CommandLine& command_line,
94 int child_process_id,
brettw3c98c7d32017-07-25 01:44:2095 content::PosixFileDescriptorInfo* mappings) override;
Wez010464a2017-10-26 17:42:2396#endif // defined(OS_LINUX) || defined(OS_ANDROID)
97
[email protected]a553b672014-04-16 05:40:4198#if defined(OS_WIN)
rickyz50109312015-11-11 00:37:0899 bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override;
[email protected]a553b672014-04-16 05:40:41100#endif
[email protected]f83a47392012-07-12 22:15:04101
Eric Roman8e3170c2019-01-04 00:11:59102 network::mojom::NetworkContextPtr CreateNetworkContext(
103 BrowserContext* context,
104 bool in_memory,
105 const base::FilePath& relative_partition_path) override;
Robert Sesek466e43e2019-08-19 22:02:02106 std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
Eric Roman8e3170c2019-01-04 00:11:59107
[email protected]147f8092012-03-21 11:47:45108 ShellBrowserContext* browser_context();
[email protected]71d504f2012-07-25 17:15:28109 ShellBrowserContext* off_the_record_browser_context();
[email protected]7c17b692012-08-09 16:16:30110 ShellBrowserMainParts* shell_browser_main_parts() {
111 return shell_browser_main_parts_;
112 }
[email protected]147f8092012-03-21 11:47:45113
davidben3b8455ae72015-03-11 19:42:19114 // Used for content_browsertests.
115 void set_select_client_certificate_callback(
danakj1eaf6662019-04-26 19:15:58116 base::OnceClosure select_client_certificate_callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29117 select_client_certificate_callback_ =
118 std::move(select_client_certificate_callback);
davidben3b8455ae72015-03-11 19:42:19119 }
James Cook5b2b3982017-10-17 03:04:21120 void set_should_terminate_on_service_quit_callback(
danakj1eaf6662019-04-26 19:15:58121 base::OnceCallback<bool(const service_manager::Identity&)> callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29122 should_terminate_on_service_quit_callback_ = std::move(callback);
James Cook5b2b3982017-10-17 03:04:21123 }
Hayato Itoee6ca192019-06-04 03:06:36124 void set_login_request_callback(
125 base::OnceCallback<void(bool is_main_frame)> login_request_callback) {
Tommy Nyquist4b749d02018-03-20 21:46:29126 login_request_callback_ = std::move(login_request_callback);
Jun Caibc561f412018-02-28 18:41:39127 }
davidben3b8455ae72015-03-11 19:42:19128
jochen5ce1af92016-02-17 20:39:45129 protected:
Reilly Grantb0b47832017-08-31 23:57:09130 virtual void ExposeInterfacesToFrame(
131 service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>*
132 registry);
133
jochen5ce1af92016-02-17 20:39:45134 void set_browser_main_parts(ShellBrowserMainParts* parts) {
135 shell_browser_main_parts_ = parts;
136 }
137
[email protected]b0f146f2011-09-15 22:14:25138 private:
danakj1eaf6662019-04-26 19:15:58139 base::OnceClosure select_client_certificate_callback_;
140 base::OnceCallback<bool(const service_manager::Identity&)>
James Cook5b2b3982017-10-17 03:04:21141 should_terminate_on_service_quit_callback_;
Hayato Itoee6ca192019-06-04 03:06:36142 base::OnceCallback<void(bool is_main_frame)> login_request_callback_;
davidben3b8455ae72015-03-11 19:42:19143
Reilly Grantb0b47832017-08-31 23:57:09144 std::unique_ptr<
145 service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>>
Ben Goodger6a695c012017-06-20 20:21:20146 frame_interfaces_;
147
Patrick Monette61dfef92019-05-30 23:06:27148 // Owned by content::BrowserMainLoop.
[email protected]b0f146f2011-09-15 22:14:25149 ShellBrowserMainParts* shell_browser_main_parts_;
[email protected]5629e0c2011-09-12 22:07:36150};
151
Eric Roman8e3170c2019-01-04 00:11:59152// The delay for sending reports when running with --run-web-tests
153constexpr base::TimeDelta kReportingDeliveryIntervalTimeForWebTests =
154 base::TimeDelta::FromMilliseconds(100);
155
[email protected]5629e0c2011-09-12 22:07:36156} // namespace content
157
[email protected]de7d61ff2013-08-20 11:30:41158#endif // CONTENT_SHELL_BROWSER_SHELL_CONTENT_BROWSER_CLIENT_H_