blob: 10810a512f82e5d3efd464335492bc4453ccd6b8 [file] [log] [blame]
[email protected]b9f6ba32014-03-10 18:34:081// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_
6#define EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_
7
tbarzicd9a88fc92017-07-14 02:18:108#include <memory>
asargent631a99a2015-10-15 21:51:489#include <string>
dchenge59eca1602015-12-18 17:48:0010#include <utility>
asargent631a99a2015-10-15 21:51:4811#include <vector>
12
13#include "base/callback.h"
[email protected]b9f6ba32014-03-10 18:34:0814#include "base/compiler_specific.h"
avic9cec102015-12-23 00:39:2615#include "base/macros.h"
asargent631a99a2015-10-15 21:51:4816#include "base/memory/ref_counted.h"
avic9cec102015-12-23 00:39:2617#include "build/build_config.h"
asargent631a99a2015-10-15 21:51:4818#include "components/update_client/update_client.h"
[email protected]b9f6ba32014-03-10 18:34:0819#include "extensions/browser/extensions_browser_client.h"
rockotffa65b12014-10-14 17:19:0620#include "extensions/browser/updater/extension_cache.h"
[email protected]b9f6ba32014-03-10 18:34:0821
22namespace extensions {
steelc8e6ede2016-09-29 00:56:2723class KioskDelegate;
[email protected]b9f6ba32014-03-10 18:34:0824
25// A simplified ExtensionsBrowserClient for a single normal browser context and
26// an optional incognito browser context associated with it. A test that uses
27// this class should call ExtensionsBrowserClient::Set() with its instance.
28class TestExtensionsBrowserClient : public ExtensionsBrowserClient {
29 public:
Michael Giuffridae2b0ee572017-08-04 04:06:5230 // If provided, |main_context| must not be an incognito context.
[email protected]883346042014-06-03 12:04:3331 explicit TestExtensionsBrowserClient(content::BrowserContext* main_context);
Michael Giuffridae2b0ee572017-08-04 04:06:5232 // Alternate constructor allowing |main_context_| to be set later.
33 TestExtensionsBrowserClient();
dcheng9168b2f2014-10-21 12:38:2434 ~TestExtensionsBrowserClient() override;
[email protected]b9f6ba32014-03-10 18:34:0835
[email protected]6b54fda2014-07-22 02:13:4736 void set_process_manager_delegate(ProcessManagerDelegate* delegate) {
37 process_manager_delegate_ = delegate;
38 }
[email protected]9fc5bdc82014-08-03 23:49:2639 void set_extension_system_factory(ExtensionSystemProvider* factory) {
40 extension_system_factory_ = factory;
41 }
dchengf5d241082016-04-21 03:43:1142 void set_extension_cache(std::unique_ptr<ExtensionCache> extension_cache) {
dchenge59eca1602015-12-18 17:48:0043 extension_cache_ = std::move(extension_cache);
rockotffa65b12014-10-14 17:19:0644 }
[email protected]6b54fda2014-07-22 02:13:4745
tbarzicd9a88fc92017-07-14 02:18:1046 void set_lock_screen_context(content::BrowserContext* context) {
47 lock_screen_context_ = context;
48 }
49
asargent631a99a2015-10-15 21:51:4850 // Sets a factory to respond to calls of the CreateUpdateClient method.
51 void SetUpdateClientFactory(
52 const base::Callback<update_client::UpdateClient*(void)>& factory);
53
Michael Giuffridae2b0ee572017-08-04 04:06:5254 // Sets the main browser context. Only call if a BrowserContext was not
55 // already provided. |main_context| must not be an incognito context.
56 void SetMainContext(content::BrowserContext* main_context);
57
[email protected]b9f6ba32014-03-10 18:34:0858 // Associates an incognito context with |main_context_|.
59 void SetIncognitoContext(content::BrowserContext* incognito_context);
60
61 // ExtensionsBrowserClient overrides:
dcheng9168b2f2014-10-21 12:38:2462 bool IsShuttingDown() override;
63 bool AreExtensionsDisabled(const base::CommandLine& command_line,
64 content::BrowserContext* context) override;
65 bool IsValidContext(content::BrowserContext* context) override;
66 bool IsSameContext(content::BrowserContext* first,
67 content::BrowserContext* second) override;
68 bool HasOffTheRecordContext(content::BrowserContext* context) override;
69 content::BrowserContext* GetOffTheRecordContext(
mostynb0eac4e1b2014-10-03 16:32:1970 content::BrowserContext* context) override;
dcheng9168b2f2014-10-21 12:38:2471 content::BrowserContext* GetOriginalContext(
mostynb0eac4e1b2014-10-03 16:32:1972 content::BrowserContext* context) override;
stevenjbd194dd1362015-01-28 17:30:0873#if defined(OS_CHROMEOS)
74 std::string GetUserIdHashFromContext(
75 content::BrowserContext* context) override;
76#endif
dcheng9168b2f2014-10-21 12:38:2477 bool IsGuestSession(content::BrowserContext* context) const override;
78 bool IsExtensionIncognitoEnabled(
[email protected]b9f6ba32014-03-10 18:34:0879 const std::string& extension_id,
mostynb0eac4e1b2014-10-03 16:32:1980 content::BrowserContext* context) const override;
dcheng9168b2f2014-10-21 12:38:2481 bool CanExtensionCrossIncognito(
[email protected]b9f6ba32014-03-10 18:34:0882 const extensions::Extension* extension,
mostynb0eac4e1b2014-10-03 16:32:1983 content::BrowserContext* context) const override;
dcheng9168b2f2014-10-21 12:38:2484 net::URLRequestJob* MaybeCreateResourceBundleRequestJob(
[email protected]1791e6c92014-04-11 08:29:0185 net::URLRequest* request,
86 net::NetworkDelegate* network_delegate,
87 const base::FilePath& directory_path,
88 const std::string& content_security_policy,
mostynb0eac4e1b2014-10-03 16:32:1989 bool send_cors_header) override;
Chris Mumford8f812662018-02-22 00:27:5790 base::FilePath GetBundleResourcePath(
91 const network::ResourceRequest& request,
92 const base::FilePath& extension_resources_path,
dpapad669a89702019-05-10 18:00:4993 int* resource_id) const override;
Chris Mumford8f812662018-02-22 00:27:5794 void LoadResourceFromResourceBundle(
95 const network::ResourceRequest& request,
96 network::mojom::URLLoaderRequest loader,
97 const base::FilePath& resource_relative_path,
dpapad669a89702019-05-10 18:00:4998 int resource_id,
Chris Mumford8f812662018-02-22 00:27:5799 const std::string& content_security_policy,
100 network::mojom::URLLoaderClientPtr client,
101 bool send_cors_header) override;
102
Ken Rockot6414c4d92017-11-08 19:58:32103 bool AllowCrossRendererResourceLoad(const GURL& url,
104 content::ResourceType resource_type,
105 ui::PageTransition page_transition,
106 int child_id,
dcheng9168b2f2014-10-21 12:38:24107 bool is_incognito,
108 const Extension* extension,
Ken Rockot6414c4d92017-11-08 19:58:32109 const ExtensionSet& extensions,
110 const ProcessMap& process_map) override;
dcheng9168b2f2014-10-21 12:38:24111 PrefService* GetPrefServiceForContext(
mostynb0eac4e1b2014-10-03 16:32:19112 content::BrowserContext* context) override;
dcheng9168b2f2014-10-21 12:38:24113 void GetEarlyExtensionPrefsObservers(
[email protected]d31e2482014-04-02 22:52:20114 content::BrowserContext* context,
Nigel Tao650b7312019-04-27 00:18:32115 std::vector<EarlyExtensionPrefsObserver*>* observers) const override;
dcheng9168b2f2014-10-21 12:38:24116 ProcessManagerDelegate* GetProcessManagerDelegate() const override;
dchengf5d241082016-04-21 03:43:11117 std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override;
dcheng9168b2f2014-10-21 12:38:24118 bool DidVersionUpdate(content::BrowserContext* context) override;
119 void PermitExternalProtocolHandler() override;
Michael Giuffrida456e84e92018-07-12 01:33:12120 bool IsInDemoMode() override;
Wenzhao Zangc6955542018-09-19 18:49:01121 bool IsScreensaverInDemoMode(const std::string& app_id) override;
dcheng9168b2f2014-10-21 12:38:24122 bool IsRunningInForcedAppMode() override;
Toni Barzicfc4a81a2018-01-31 01:48:59123 bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
kelvinp1b80b8f2015-10-01 01:22:13124 bool IsLoggedInAsPublicAccount() override;
dcheng9168b2f2014-10-21 12:38:24125 ExtensionSystemProvider* GetExtensionSystemFactory() override;
Ben Goodgerb6169152017-07-22 04:09:43126 void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<
127 content::RenderFrameHost*>* registry,
128 content::RenderFrameHost* render_frame_host,
129 const Extension* extension) const override;
dchengf5d241082016-04-21 03:43:11130 std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
mostynb0eac4e1b2014-10-03 16:32:19131 content::BrowserContext* context) const override;
mukaiee458c92015-01-06 01:30:33132 const ComponentExtensionResourceManager*
133 GetComponentExtensionResourceManager() override;
dchengf5d241082016-04-21 03:43:11134 void BroadcastEventToRenderers(
135 events::HistogramValue histogram_value,
136 const std::string& event_name,
137 std::unique_ptr<base::ListValue> args) override;
dcheng9168b2f2014-10-21 12:38:24138 net::NetLog* GetNetLog() override;
139 ExtensionCache* GetExtensionCache() override;
140 bool IsBackgroundUpdateAllowed() override;
141 bool IsMinBrowserVersionSupported(const std::string& min_version) override;
rdevlin.cronincb2ec659a2015-06-10 23:32:41142 ExtensionWebContentsObserver* GetExtensionWebContentsObserver(
143 content::WebContents* web_contents) override;
steelc8e6ede2016-09-29 00:56:27144 KioskDelegate* GetKioskDelegate() override;
asargent631a99a2015-10-15 21:51:48145 scoped_refptr<update_client::UpdateClient> CreateUpdateClient(
146 content::BrowserContext* context) override;
tbarzic8e89b0b12017-06-10 03:25:51147 bool IsLockScreenContext(content::BrowserContext* context) override;
Michael Giuffrida717aac42017-08-02 11:24:21148 std::string GetApplicationLocale() override;
[email protected]b9f6ba32014-03-10 18:34:08149
afakhry2bd481832016-06-16 16:17:24150 ExtensionSystemProvider* extension_system_factory() {
151 return extension_system_factory_;
152 }
153
[email protected]b9f6ba32014-03-10 18:34:08154 private:
tbarzicd9a88fc92017-07-14 02:18:10155 // Not owned.
156 content::BrowserContext* main_context_;
157 // Not owned, defaults to nullptr.
158 content::BrowserContext* incognito_context_;
159 // Not owned, defaults to nullptr.
160 content::BrowserContext* lock_screen_context_;
[email protected]b9f6ba32014-03-10 18:34:08161
tbarzicd9a88fc92017-07-14 02:18:10162 // Not owned, defaults to nullptr.
[email protected]6b54fda2014-07-22 02:13:47163 ProcessManagerDelegate* process_manager_delegate_;
164
tbarzicd9a88fc92017-07-14 02:18:10165 // Not owned, defaults to nullptr.
[email protected]9fc5bdc82014-08-03 23:49:26166 ExtensionSystemProvider* extension_system_factory_;
167
dchengf5d241082016-04-21 03:43:11168 std::unique_ptr<ExtensionCache> extension_cache_;
rockotffa65b12014-10-14 17:19:06169
asargent631a99a2015-10-15 21:51:48170 base::Callback<update_client::UpdateClient*(void)> update_client_factory_;
171
[email protected]b9f6ba32014-03-10 18:34:08172 DISALLOW_COPY_AND_ASSIGN(TestExtensionsBrowserClient);
173};
174
175} // namespace extensions
176
177#endif // EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_