blob: 6deee14760e7e3fba3dc09eb913be7e3162bd7e0 [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"
Julie Jeongeun Kimf65376f2019-11-05 03:54:5521#include "mojo/public/cpp/bindings/pending_receiver.h"
Julie Jeongeun Kim6dd4c7b2019-11-18 05:56:3022#include "mojo/public/cpp/bindings/pending_remote.h"
[email protected]b9f6ba32014-03-10 18:34:0823
24namespace extensions {
steelc8e6ede2016-09-29 00:56:2725class KioskDelegate;
[email protected]b9f6ba32014-03-10 18:34:0826
27// A simplified ExtensionsBrowserClient for a single normal browser context and
28// an optional incognito browser context associated with it. A test that uses
29// this class should call ExtensionsBrowserClient::Set() with its instance.
30class TestExtensionsBrowserClient : public ExtensionsBrowserClient {
31 public:
Michael Giuffridae2b0ee572017-08-04 04:06:5232 // If provided, |main_context| must not be an incognito context.
[email protected]883346042014-06-03 12:04:3333 explicit TestExtensionsBrowserClient(content::BrowserContext* main_context);
Michael Giuffridae2b0ee572017-08-04 04:06:5234 // Alternate constructor allowing |main_context_| to be set later.
35 TestExtensionsBrowserClient();
dcheng9168b2f2014-10-21 12:38:2436 ~TestExtensionsBrowserClient() override;
[email protected]b9f6ba32014-03-10 18:34:0837
[email protected]6b54fda2014-07-22 02:13:4738 void set_process_manager_delegate(ProcessManagerDelegate* delegate) {
39 process_manager_delegate_ = delegate;
40 }
[email protected]9fc5bdc82014-08-03 23:49:2641 void set_extension_system_factory(ExtensionSystemProvider* factory) {
42 extension_system_factory_ = factory;
43 }
dchengf5d241082016-04-21 03:43:1144 void set_extension_cache(std::unique_ptr<ExtensionCache> extension_cache) {
dchenge59eca1602015-12-18 17:48:0045 extension_cache_ = std::move(extension_cache);
rockotffa65b12014-10-14 17:19:0646 }
[email protected]6b54fda2014-07-22 02:13:4747
tbarzicd9a88fc92017-07-14 02:18:1048 void set_lock_screen_context(content::BrowserContext* context) {
49 lock_screen_context_ = context;
50 }
51
asargent631a99a2015-10-15 21:51:4852 // Sets a factory to respond to calls of the CreateUpdateClient method.
53 void SetUpdateClientFactory(
54 const base::Callback<update_client::UpdateClient*(void)>& factory);
55
Michael Giuffridae2b0ee572017-08-04 04:06:5256 // Sets the main browser context. Only call if a BrowserContext was not
57 // already provided. |main_context| must not be an incognito context.
58 void SetMainContext(content::BrowserContext* main_context);
59
[email protected]b9f6ba32014-03-10 18:34:0860 // Associates an incognito context with |main_context_|.
61 void SetIncognitoContext(content::BrowserContext* incognito_context);
62
63 // ExtensionsBrowserClient overrides:
dcheng9168b2f2014-10-21 12:38:2464 bool IsShuttingDown() override;
65 bool AreExtensionsDisabled(const base::CommandLine& command_line,
66 content::BrowserContext* context) override;
67 bool IsValidContext(content::BrowserContext* context) override;
68 bool IsSameContext(content::BrowserContext* first,
69 content::BrowserContext* second) override;
70 bool HasOffTheRecordContext(content::BrowserContext* context) override;
71 content::BrowserContext* GetOffTheRecordContext(
mostynb0eac4e1b2014-10-03 16:32:1972 content::BrowserContext* context) override;
dcheng9168b2f2014-10-21 12:38:2473 content::BrowserContext* GetOriginalContext(
mostynb0eac4e1b2014-10-03 16:32:1974 content::BrowserContext* context) override;
stevenjbd194dd1362015-01-28 17:30:0875#if defined(OS_CHROMEOS)
76 std::string GetUserIdHashFromContext(
77 content::BrowserContext* context) override;
78#endif
dcheng9168b2f2014-10-21 12:38:2479 bool IsGuestSession(content::BrowserContext* context) const override;
80 bool IsExtensionIncognitoEnabled(
[email protected]b9f6ba32014-03-10 18:34:0881 const std::string& extension_id,
mostynb0eac4e1b2014-10-03 16:32:1982 content::BrowserContext* context) const override;
dcheng9168b2f2014-10-21 12:38:2483 bool CanExtensionCrossIncognito(
[email protected]b9f6ba32014-03-10 18:34:0884 const extensions::Extension* extension,
mostynb0eac4e1b2014-10-03 16:32:1985 content::BrowserContext* context) const override;
Chris Mumford8f812662018-02-22 00:27:5786 base::FilePath GetBundleResourcePath(
87 const network::ResourceRequest& request,
88 const base::FilePath& extension_resources_path,
dpapad669a89702019-05-10 18:00:4989 int* resource_id) const override;
Chris Mumford8f812662018-02-22 00:27:5790 void LoadResourceFromResourceBundle(
91 const network::ResourceRequest& request,
Julie Jeongeun Kimf65376f2019-11-05 03:54:5592 mojo::PendingReceiver<network::mojom::URLLoader> loader,
Chris Mumford8f812662018-02-22 00:27:5793 const base::FilePath& resource_relative_path,
dpapad669a89702019-05-10 18:00:4994 int resource_id,
Chris Mumford8f812662018-02-22 00:27:5795 const std::string& content_security_policy,
Julie Jeongeun Kim6dd4c7b2019-11-18 05:56:3096 mojo::PendingRemote<network::mojom::URLLoaderClient> client,
Chris Mumford8f812662018-02-22 00:27:5797 bool send_cors_header) override;
98
Ken Rockot6414c4d92017-11-08 19:58:3299 bool AllowCrossRendererResourceLoad(const GURL& url,
100 content::ResourceType resource_type,
101 ui::PageTransition page_transition,
102 int child_id,
dcheng9168b2f2014-10-21 12:38:24103 bool is_incognito,
104 const Extension* extension,
Ken Rockot6414c4d92017-11-08 19:58:32105 const ExtensionSet& extensions,
106 const ProcessMap& process_map) override;
dcheng9168b2f2014-10-21 12:38:24107 PrefService* GetPrefServiceForContext(
mostynb0eac4e1b2014-10-03 16:32:19108 content::BrowserContext* context) override;
dcheng9168b2f2014-10-21 12:38:24109 void GetEarlyExtensionPrefsObservers(
[email protected]d31e2482014-04-02 22:52:20110 content::BrowserContext* context,
Nigel Tao650b7312019-04-27 00:18:32111 std::vector<EarlyExtensionPrefsObserver*>* observers) const override;
dcheng9168b2f2014-10-21 12:38:24112 ProcessManagerDelegate* GetProcessManagerDelegate() const override;
dchengf5d241082016-04-21 03:43:11113 std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override;
dcheng9168b2f2014-10-21 12:38:24114 bool DidVersionUpdate(content::BrowserContext* context) override;
115 void PermitExternalProtocolHandler() override;
Michael Giuffrida456e84e92018-07-12 01:33:12116 bool IsInDemoMode() override;
Wenzhao Zangc6955542018-09-19 18:49:01117 bool IsScreensaverInDemoMode(const std::string& app_id) override;
dcheng9168b2f2014-10-21 12:38:24118 bool IsRunningInForcedAppMode() override;
Toni Barzicfc4a81a2018-01-31 01:48:59119 bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
kelvinp1b80b8f2015-10-01 01:22:13120 bool IsLoggedInAsPublicAccount() override;
dcheng9168b2f2014-10-21 12:38:24121 ExtensionSystemProvider* GetExtensionSystemFactory() override;
Miyoung Shin70485f02019-12-05 05:21:03122 void RegisterBrowserInterfaceBindersForFrame(
Miyoung Shin34f63a82019-12-12 05:40:08123 service_manager::BinderMapWithContext<content::RenderFrameHost*>*
124 binder_map,
Miyoung Shin70485f02019-12-05 05:21:03125 content::RenderFrameHost* render_frame_host,
126 const Extension* extension) const override;
dchengf5d241082016-04-21 03:43:11127 std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
mostynb0eac4e1b2014-10-03 16:32:19128 content::BrowserContext* context) const override;
mukaiee458c92015-01-06 01:30:33129 const ComponentExtensionResourceManager*
130 GetComponentExtensionResourceManager() override;
dchengf5d241082016-04-21 03:43:11131 void BroadcastEventToRenderers(
132 events::HistogramValue histogram_value,
133 const std::string& event_name,
Keith Leed9510012019-08-27 06:22:00134 std::unique_ptr<base::ListValue> args,
135 bool dispatch_to_off_the_record_profiles) override;
dcheng9168b2f2014-10-21 12:38:24136 ExtensionCache* GetExtensionCache() override;
137 bool IsBackgroundUpdateAllowed() override;
138 bool IsMinBrowserVersionSupported(const std::string& min_version) override;
rdevlin.cronincb2ec659a2015-06-10 23:32:41139 ExtensionWebContentsObserver* GetExtensionWebContentsObserver(
140 content::WebContents* web_contents) override;
steelc8e6ede2016-09-29 00:56:27141 KioskDelegate* GetKioskDelegate() override;
asargent631a99a2015-10-15 21:51:48142 scoped_refptr<update_client::UpdateClient> CreateUpdateClient(
143 content::BrowserContext* context) override;
tbarzic8e89b0b12017-06-10 03:25:51144 bool IsLockScreenContext(content::BrowserContext* context) override;
Michael Giuffrida717aac42017-08-02 11:24:21145 std::string GetApplicationLocale() override;
[email protected]b9f6ba32014-03-10 18:34:08146
afakhry2bd481832016-06-16 16:17:24147 ExtensionSystemProvider* extension_system_factory() {
148 return extension_system_factory_;
149 }
150
[email protected]b9f6ba32014-03-10 18:34:08151 private:
tbarzicd9a88fc92017-07-14 02:18:10152 // Not owned.
153 content::BrowserContext* main_context_;
154 // Not owned, defaults to nullptr.
155 content::BrowserContext* incognito_context_;
156 // Not owned, defaults to nullptr.
157 content::BrowserContext* lock_screen_context_;
[email protected]b9f6ba32014-03-10 18:34:08158
tbarzicd9a88fc92017-07-14 02:18:10159 // Not owned, defaults to nullptr.
[email protected]6b54fda2014-07-22 02:13:47160 ProcessManagerDelegate* process_manager_delegate_;
161
tbarzicd9a88fc92017-07-14 02:18:10162 // Not owned, defaults to nullptr.
[email protected]9fc5bdc82014-08-03 23:49:26163 ExtensionSystemProvider* extension_system_factory_;
164
dchengf5d241082016-04-21 03:43:11165 std::unique_ptr<ExtensionCache> extension_cache_;
rockotffa65b12014-10-14 17:19:06166
asargent631a99a2015-10-15 21:51:48167 base::Callback<update_client::UpdateClient*(void)> update_client_factory_;
168
[email protected]b9f6ba32014-03-10 18:34:08169 DISALLOW_COPY_AND_ASSIGN(TestExtensionsBrowserClient);
170};
171
172} // namespace extensions
173
174#endif // EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_