blob: 6ae3ab8ae08a1edf03ef3ab75468a59d1c56e775 [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;
Chris Mumford8f812662018-02-22 00:27:5784 base::FilePath GetBundleResourcePath(
85 const network::ResourceRequest& request,
86 const base::FilePath& extension_resources_path,
dpapad669a89702019-05-10 18:00:4987 int* resource_id) const override;
Chris Mumford8f812662018-02-22 00:27:5788 void LoadResourceFromResourceBundle(
89 const network::ResourceRequest& request,
90 network::mojom::URLLoaderRequest loader,
91 const base::FilePath& resource_relative_path,
dpapad669a89702019-05-10 18:00:4992 int resource_id,
Chris Mumford8f812662018-02-22 00:27:5793 const std::string& content_security_policy,
94 network::mojom::URLLoaderClientPtr client,
95 bool send_cors_header) override;
96
Ken Rockot6414c4d92017-11-08 19:58:3297 bool AllowCrossRendererResourceLoad(const GURL& url,
98 content::ResourceType resource_type,
99 ui::PageTransition page_transition,
100 int child_id,
dcheng9168b2f2014-10-21 12:38:24101 bool is_incognito,
102 const Extension* extension,
Ken Rockot6414c4d92017-11-08 19:58:32103 const ExtensionSet& extensions,
104 const ProcessMap& process_map) override;
dcheng9168b2f2014-10-21 12:38:24105 PrefService* GetPrefServiceForContext(
mostynb0eac4e1b2014-10-03 16:32:19106 content::BrowserContext* context) override;
dcheng9168b2f2014-10-21 12:38:24107 void GetEarlyExtensionPrefsObservers(
[email protected]d31e2482014-04-02 22:52:20108 content::BrowserContext* context,
Nigel Tao650b7312019-04-27 00:18:32109 std::vector<EarlyExtensionPrefsObserver*>* observers) const override;
dcheng9168b2f2014-10-21 12:38:24110 ProcessManagerDelegate* GetProcessManagerDelegate() const override;
dchengf5d241082016-04-21 03:43:11111 std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override;
dcheng9168b2f2014-10-21 12:38:24112 bool DidVersionUpdate(content::BrowserContext* context) override;
113 void PermitExternalProtocolHandler() override;
Michael Giuffrida456e84e92018-07-12 01:33:12114 bool IsInDemoMode() override;
Wenzhao Zangc6955542018-09-19 18:49:01115 bool IsScreensaverInDemoMode(const std::string& app_id) override;
dcheng9168b2f2014-10-21 12:38:24116 bool IsRunningInForcedAppMode() override;
Toni Barzicfc4a81a2018-01-31 01:48:59117 bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
kelvinp1b80b8f2015-10-01 01:22:13118 bool IsLoggedInAsPublicAccount() override;
dcheng9168b2f2014-10-21 12:38:24119 ExtensionSystemProvider* GetExtensionSystemFactory() override;
Ben Goodgerb6169152017-07-22 04:09:43120 void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<
121 content::RenderFrameHost*>* registry,
122 content::RenderFrameHost* render_frame_host,
123 const Extension* extension) const override;
dchengf5d241082016-04-21 03:43:11124 std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
mostynb0eac4e1b2014-10-03 16:32:19125 content::BrowserContext* context) const override;
mukaiee458c92015-01-06 01:30:33126 const ComponentExtensionResourceManager*
127 GetComponentExtensionResourceManager() override;
dchengf5d241082016-04-21 03:43:11128 void BroadcastEventToRenderers(
129 events::HistogramValue histogram_value,
130 const std::string& event_name,
131 std::unique_ptr<base::ListValue> args) override;
dcheng9168b2f2014-10-21 12:38:24132 ExtensionCache* GetExtensionCache() override;
133 bool IsBackgroundUpdateAllowed() override;
134 bool IsMinBrowserVersionSupported(const std::string& min_version) override;
rdevlin.cronincb2ec659a2015-06-10 23:32:41135 ExtensionWebContentsObserver* GetExtensionWebContentsObserver(
136 content::WebContents* web_contents) override;
steelc8e6ede2016-09-29 00:56:27137 KioskDelegate* GetKioskDelegate() override;
asargent631a99a2015-10-15 21:51:48138 scoped_refptr<update_client::UpdateClient> CreateUpdateClient(
139 content::BrowserContext* context) override;
tbarzic8e89b0b12017-06-10 03:25:51140 bool IsLockScreenContext(content::BrowserContext* context) override;
Michael Giuffrida717aac42017-08-02 11:24:21141 std::string GetApplicationLocale() override;
[email protected]b9f6ba32014-03-10 18:34:08142
afakhry2bd481832016-06-16 16:17:24143 ExtensionSystemProvider* extension_system_factory() {
144 return extension_system_factory_;
145 }
146
[email protected]b9f6ba32014-03-10 18:34:08147 private:
tbarzicd9a88fc92017-07-14 02:18:10148 // Not owned.
149 content::BrowserContext* main_context_;
150 // Not owned, defaults to nullptr.
151 content::BrowserContext* incognito_context_;
152 // Not owned, defaults to nullptr.
153 content::BrowserContext* lock_screen_context_;
[email protected]b9f6ba32014-03-10 18:34:08154
tbarzicd9a88fc92017-07-14 02:18:10155 // Not owned, defaults to nullptr.
[email protected]6b54fda2014-07-22 02:13:47156 ProcessManagerDelegate* process_manager_delegate_;
157
tbarzicd9a88fc92017-07-14 02:18:10158 // Not owned, defaults to nullptr.
[email protected]9fc5bdc82014-08-03 23:49:26159 ExtensionSystemProvider* extension_system_factory_;
160
dchengf5d241082016-04-21 03:43:11161 std::unique_ptr<ExtensionCache> extension_cache_;
rockotffa65b12014-10-14 17:19:06162
asargent631a99a2015-10-15 21:51:48163 base::Callback<update_client::UpdateClient*(void)> update_client_factory_;
164
[email protected]b9f6ba32014-03-10 18:34:08165 DISALLOW_COPY_AND_ASSIGN(TestExtensionsBrowserClient);
166};
167
168} // namespace extensions
169
170#endif // EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_