blob: 8687277f3dee89d61855d70b17ec611c6ee2c616 [file] [log] [blame]
[email protected]a80de9112014-07-31 03:15: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#include "extensions/browser/extensions_test.h"
6
7#include "components/keyed_service/content/browser_context_dependency_manager.h"
karandeepb0daf48a2017-04-06 04:38:348#include "components/pref_registry/pref_registry_syncable.h"
9#include "components/prefs/pref_service_factory.h"
10#include "components/prefs/testing_pref_store.h"
[email protected]a80de9112014-07-31 03:15:0811#include "content/public/common/content_client.h"
Ken Rockot91216c0f2019-10-11 20:38:1112#include "content/public/common/network_service_util.h"
[email protected]a80de9112014-07-31 03:15:0813#include "content/public/test/test_browser_context.h"
karandeepb0daf48a2017-04-06 04:38:3414#include "extensions/browser/extension_pref_value_map.h"
15#include "extensions/browser/extension_prefs.h"
16#include "extensions/browser/extension_prefs_factory.h"
[email protected]a80de9112014-07-31 03:15:0817#include "extensions/browser/test_extensions_browser_client.h"
asargent275faaa2015-01-27 23:43:2918#include "extensions/test/test_content_utility_client.h"
Takuto Ikutaaa3b796c2019-02-06 02:54:5619#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
[email protected]a80de9112014-07-31 03:15:0820
karandeepb0daf48a2017-04-06 04:38:3421namespace {
22
23std::unique_ptr<content::TestBrowserContext> CreateTestIncognitoContext() {
24 std::unique_ptr<content::TestBrowserContext> incognito_context =
Jeremy Roman16529d0e2017-08-24 18:13:4725 std::make_unique<content::TestBrowserContext>();
karandeepb0daf48a2017-04-06 04:38:3426 incognito_context->set_is_off_the_record(true);
27 return incognito_context;
28}
29
Takashi Toyoshima0190a3b2019-01-21 07:39:0630class ExtensionTestBrowserContext : public content::TestBrowserContext {
31 private:
32 void SetCorsOriginAccessListForOrigin(
33 const url::Origin& source_origin,
34 std::vector<network::mojom::CorsOriginPatternPtr> allow_patterns,
35 std::vector<network::mojom::CorsOriginPatternPtr> block_patterns,
36 base::OnceClosure closure) override {
37 // This method is called for setting up Extensions, but can be ignored
38 // unless actual network requests need to be handled.
39 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
40 std::move(closure));
41 }
42};
43
karandeepb0daf48a2017-04-06 04:38:3444} // namespace
45
[email protected]a80de9112014-07-31 03:15:0846namespace extensions {
47
danakjaee67172017-06-13 16:37:0248ExtensionsTest::ExtensionsTest(
Gabriel Charette798fde72019-08-20 22:24:0449 std::unique_ptr<content::BrowserTaskEnvironment> task_environment)
50 : task_environment_(std::move(task_environment)),
danakjaee67172017-06-13 16:37:0251 rvh_test_enabler_(
Jeremy Roman16529d0e2017-08-24 18:13:4752 std::make_unique<content::RenderViewHostTestEnabler>()) {}
karandeepbfb19fb92017-04-12 00:23:2053
54ExtensionsTest::~ExtensionsTest() {
danakjaee67172017-06-13 16:37:0255 // Destroy the task runners before nulling the browser/utility clients, as
56 // posted tasks may use them.
57 rvh_test_enabler_.reset();
Gabriel Charette798fde72019-08-20 22:24:0458 task_environment_.reset();
karandeepbfb19fb92017-04-12 00:23:2059 content::SetUtilityClientForTesting(nullptr);
60}
61
Michael Giuffridae2b0ee572017-08-04 04:06:5262void ExtensionsTest::SetExtensionsBrowserClient(
63 std::unique_ptr<TestExtensionsBrowserClient> extensions_browser_client) {
64 DCHECK(extensions_browser_client);
65 DCHECK(!extensions_browser_client_);
66 extensions_browser_client_ = std::move(extensions_browser_client);
67}
68
karandeepbfb19fb92017-04-12 00:23:2069void ExtensionsTest::SetUp() {
Ken Rockot91216c0f2019-10-11 20:38:1170 content::ForceInProcessNetworkService(true);
Jeremy Roman16529d0e2017-08-24 18:13:4771 content_utility_client_ = std::make_unique<TestContentUtilityClient>();
Takashi Toyoshima0190a3b2019-01-21 07:39:0672 browser_context_ = std::make_unique<ExtensionTestBrowserContext>();
karandeepbfb19fb92017-04-12 00:23:2073 incognito_context_ = CreateTestIncognitoContext();
Michael Giuffridae2b0ee572017-08-04 04:06:5274
75 if (!extensions_browser_client_) {
76 extensions_browser_client_ =
Jeremy Roman16529d0e2017-08-24 18:13:4777 std::make_unique<TestExtensionsBrowserClient>();
Michael Giuffridae2b0ee572017-08-04 04:06:5278 }
79 extensions_browser_client_->SetMainContext(browser_context_.get());
karandeepbfb19fb92017-04-12 00:23:2080
asargent275faaa2015-01-27 23:43:2981 content::SetUtilityClientForTesting(content_utility_client_.get());
[email protected]a80de9112014-07-31 03:15:0882 ExtensionsBrowserClient::Set(extensions_browser_client_.get());
thestig34f7eca2015-02-03 18:42:4083 extensions_browser_client_->set_extension_system_factory(
84 &extension_system_factory_);
karandeepb0daf48a2017-04-06 04:38:3485 extensions_browser_client_->SetIncognitoContext(incognito_context_.get());
86
87 // Set up all the dependencies of ExtensionPrefs.
88 extension_pref_value_map_.reset(new ExtensionPrefValueMap());
89 PrefServiceFactory factory;
90 factory.set_user_prefs(new TestingPrefStore());
91 factory.set_extension_prefs(new TestingPrefStore());
92 user_prefs::PrefRegistrySyncable* pref_registry =
93 new user_prefs::PrefRegistrySyncable();
94 // Prefs should be registered before the PrefService is created.
95 ExtensionPrefs::RegisterProfilePrefs(pref_registry);
96 pref_service_ = factory.Create(pref_registry);
97
98 std::unique_ptr<ExtensionPrefs> extension_prefs(ExtensionPrefs::Create(
99 browser_context(), pref_service_.get(),
100 browser_context()->GetPath().AppendASCII("Extensions"),
101 extension_pref_value_map_.get(), false /* extensions_disabled */,
Nigel Tao650b7312019-04-27 00:18:32102 std::vector<EarlyExtensionPrefsObserver*>()));
karandeepb0daf48a2017-04-06 04:38:34103
104 ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting(
105 browser_context(), std::move(extension_prefs));
[email protected]a80de9112014-07-31 03:15:08106
107 // Crashing here? Don't use this class in Chrome's unit_tests. See header.
108 BrowserContextDependencyManager::GetInstance()
109 ->CreateBrowserContextServicesForTest(browser_context_.get());
Karandeep Bhatia670f41ee2018-01-24 23:56:10110 BrowserContextDependencyManager::GetInstance()
111 ->CreateBrowserContextServicesForTest(incognito_context_.get());
[email protected]a80de9112014-07-31 03:15:08112}
113
[email protected]9fc5bdc82014-08-03 23:49:26114void ExtensionsTest::TearDown() {
115 // Allows individual tests to have BrowserContextKeyedServiceFactory objects
116 // as member variables instead of singletons. The individual services will be
117 // cleaned up before the factories are destroyed.
[email protected]a80de9112014-07-31 03:15:08118 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
Karandeep Bhatia670f41ee2018-01-24 23:56:10119 incognito_context_.get());
Mikhail Atuchin12d657da2018-03-16 19:05:53120 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
121 browser_context_.get());
karandeepb0daf48a2017-04-06 04:38:34122
jamb84299e2016-04-12 16:58:59123 extensions_browser_client_.reset();
karandeepbfb19fb92017-04-12 00:23:20124 ExtensionsBrowserClient::Set(nullptr);
125
karandeepb0daf48a2017-04-06 04:38:34126 incognito_context_.reset();
Mikhail Atuchin12d657da2018-03-16 19:05:53127 browser_context_.reset();
karandeepb0daf48a2017-04-06 04:38:34128 pref_service_.reset();
[email protected]a80de9112014-07-31 03:15:08129}
130
131} // namespace extensions