[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 1 | // 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" |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 8 | #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] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 11 | #include "content/public/common/content_client.h" |
Ken Rockot | 91216c0f | 2019-10-11 20:38:11 | [diff] [blame] | 12 | #include "content/public/common/network_service_util.h" |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 13 | #include "content/public/test/test_browser_context.h" |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 14 | #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] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 17 | #include "extensions/browser/test_extensions_browser_client.h" |
asargent | 275faaa | 2015-01-27 23:43:29 | [diff] [blame] | 18 | #include "extensions/test/test_content_utility_client.h" |
Takuto Ikuta | aa3b796c | 2019-02-06 02:54:56 | [diff] [blame] | 19 | #include "services/network/public/mojom/cors_origin_pattern.mojom.h" |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 20 | |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 21 | namespace { |
| 22 | |
| 23 | std::unique_ptr<content::TestBrowserContext> CreateTestIncognitoContext() { |
| 24 | std::unique_ptr<content::TestBrowserContext> incognito_context = |
Jeremy Roman | 16529d0e | 2017-08-24 18:13:47 | [diff] [blame] | 25 | std::make_unique<content::TestBrowserContext>(); |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 26 | incognito_context->set_is_off_the_record(true); |
| 27 | return incognito_context; |
| 28 | } |
| 29 | |
Takashi Toyoshima | 0190a3b | 2019-01-21 07:39:06 | [diff] [blame] | 30 | class 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 | |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 44 | } // namespace |
| 45 | |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 46 | namespace extensions { |
| 47 | |
danakj | aee6717 | 2017-06-13 16:37:02 | [diff] [blame] | 48 | ExtensionsTest::ExtensionsTest( |
Gabriel Charette | 798fde7 | 2019-08-20 22:24:04 | [diff] [blame] | 49 | std::unique_ptr<content::BrowserTaskEnvironment> task_environment) |
| 50 | : task_environment_(std::move(task_environment)), |
danakj | aee6717 | 2017-06-13 16:37:02 | [diff] [blame] | 51 | rvh_test_enabler_( |
Jeremy Roman | 16529d0e | 2017-08-24 18:13:47 | [diff] [blame] | 52 | std::make_unique<content::RenderViewHostTestEnabler>()) {} |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 53 | |
| 54 | ExtensionsTest::~ExtensionsTest() { |
danakj | aee6717 | 2017-06-13 16:37:02 | [diff] [blame] | 55 | // Destroy the task runners before nulling the browser/utility clients, as |
| 56 | // posted tasks may use them. |
| 57 | rvh_test_enabler_.reset(); |
Gabriel Charette | 798fde7 | 2019-08-20 22:24:04 | [diff] [blame] | 58 | task_environment_.reset(); |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 59 | content::SetUtilityClientForTesting(nullptr); |
| 60 | } |
| 61 | |
Michael Giuffrida | e2b0ee57 | 2017-08-04 04:06:52 | [diff] [blame] | 62 | void 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 | |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 69 | void ExtensionsTest::SetUp() { |
Ken Rockot | 91216c0f | 2019-10-11 20:38:11 | [diff] [blame] | 70 | content::ForceInProcessNetworkService(true); |
Jeremy Roman | 16529d0e | 2017-08-24 18:13:47 | [diff] [blame] | 71 | content_utility_client_ = std::make_unique<TestContentUtilityClient>(); |
Takashi Toyoshima | 0190a3b | 2019-01-21 07:39:06 | [diff] [blame] | 72 | browser_context_ = std::make_unique<ExtensionTestBrowserContext>(); |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 73 | incognito_context_ = CreateTestIncognitoContext(); |
Michael Giuffrida | e2b0ee57 | 2017-08-04 04:06:52 | [diff] [blame] | 74 | |
| 75 | if (!extensions_browser_client_) { |
| 76 | extensions_browser_client_ = |
Jeremy Roman | 16529d0e | 2017-08-24 18:13:47 | [diff] [blame] | 77 | std::make_unique<TestExtensionsBrowserClient>(); |
Michael Giuffrida | e2b0ee57 | 2017-08-04 04:06:52 | [diff] [blame] | 78 | } |
| 79 | extensions_browser_client_->SetMainContext(browser_context_.get()); |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 80 | |
asargent | 275faaa | 2015-01-27 23:43:29 | [diff] [blame] | 81 | content::SetUtilityClientForTesting(content_utility_client_.get()); |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 82 | ExtensionsBrowserClient::Set(extensions_browser_client_.get()); |
thestig | 34f7eca | 2015-02-03 18:42:40 | [diff] [blame] | 83 | extensions_browser_client_->set_extension_system_factory( |
| 84 | &extension_system_factory_); |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 85 | 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 Tao | 650b731 | 2019-04-27 00:18:32 | [diff] [blame] | 102 | std::vector<EarlyExtensionPrefsObserver*>())); |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 103 | |
| 104 | ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( |
| 105 | browser_context(), std::move(extension_prefs)); |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 106 | |
| 107 | // Crashing here? Don't use this class in Chrome's unit_tests. See header. |
| 108 | BrowserContextDependencyManager::GetInstance() |
| 109 | ->CreateBrowserContextServicesForTest(browser_context_.get()); |
Karandeep Bhatia | 670f41ee | 2018-01-24 23:56:10 | [diff] [blame] | 110 | BrowserContextDependencyManager::GetInstance() |
| 111 | ->CreateBrowserContextServicesForTest(incognito_context_.get()); |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 112 | } |
| 113 | |
[email protected] | 9fc5bdc8 | 2014-08-03 23:49:26 | [diff] [blame] | 114 | void 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] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 118 | BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( |
Karandeep Bhatia | 670f41ee | 2018-01-24 23:56:10 | [diff] [blame] | 119 | incognito_context_.get()); |
Mikhail Atuchin | 12d657da | 2018-03-16 19:05:53 | [diff] [blame] | 120 | BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( |
| 121 | browser_context_.get()); |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 122 | |
jam | b84299e | 2016-04-12 16:58:59 | [diff] [blame] | 123 | extensions_browser_client_.reset(); |
karandeepb | fb19fb9 | 2017-04-12 00:23:20 | [diff] [blame] | 124 | ExtensionsBrowserClient::Set(nullptr); |
| 125 | |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 126 | incognito_context_.reset(); |
Mikhail Atuchin | 12d657da | 2018-03-16 19:05:53 | [diff] [blame] | 127 | browser_context_.reset(); |
karandeepb | 0daf48a | 2017-04-06 04:38:34 | [diff] [blame] | 128 | pref_service_.reset(); |
[email protected] | a80de911 | 2014-07-31 03:15:08 | [diff] [blame] | 129 | } |
| 130 | |
| 131 | } // namespace extensions |