OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/extensions_test.h" | 5 #include "extensions/browser/extensions_test.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "components/keyed_service/content/browser_context_dependency_manager.h" | 8 #include "components/keyed_service/content/browser_context_dependency_manager.h" |
9 #include "components/pref_registry/pref_registry_syncable.h" | 9 #include "components/pref_registry/pref_registry_syncable.h" |
10 #include "components/prefs/pref_service_factory.h" | 10 #include "components/prefs/pref_service_factory.h" |
(...skipping 14 matching lines...) Expand all Loading... | |
25 std::unique_ptr<content::TestBrowserContext> incognito_context = | 25 std::unique_ptr<content::TestBrowserContext> incognito_context = |
26 base::MakeUnique<content::TestBrowserContext>(); | 26 base::MakeUnique<content::TestBrowserContext>(); |
27 incognito_context->set_is_off_the_record(true); | 27 incognito_context->set_is_off_the_record(true); |
28 return incognito_context; | 28 return incognito_context; |
29 } | 29 } |
30 | 30 |
31 } // namespace | 31 } // namespace |
32 | 32 |
33 namespace extensions { | 33 namespace extensions { |
34 | 34 |
35 // This class does work in the constructor instead of SetUp() to give subclasses | 35 ExtensionsTest::ExtensionsTest() {} |
36 // a valid BrowserContext to use while initializing their members. For example: | 36 |
37 // | 37 ExtensionsTest::~ExtensionsTest() { |
38 // class MyExtensionsTest : public ExtensionsTest { | 38 content::SetBrowserClientForTesting(nullptr); |
karandeepb
2017/04/10 22:26:23
I also tried to move:
content::SetBrowserClientF
| |
39 // MyExtensionsTest() | 39 content::SetUtilityClientForTesting(nullptr); |
40 // : my_object_(browser_context())) { | 40 } |
41 // } | 41 |
42 // }; | 42 void ExtensionsTest::SetUp() { |
43 // TODO(crbug.com/708256): All these instances are setup in the constructor, but | 43 content_browser_client_ = base::MakeUnique<TestContentBrowserClient>(); |
44 // destroyed in TearDown(), which may cause problems. Move this initialization | 44 content_utility_client_ = base::MakeUnique<TestContentUtilityClient>(); |
45 // to SetUp(). | 45 browser_context_ = base::MakeUnique<content::TestBrowserContext>(); |
46 ExtensionsTest::ExtensionsTest() | 46 incognito_context_ = CreateTestIncognitoContext(); |
47 : content_browser_client_(new TestContentBrowserClient), | 47 extensions_browser_client_ = |
48 content_utility_client_(new TestContentUtilityClient), | 48 base::MakeUnique<TestExtensionsBrowserClient>(browser_context_.get()); |
49 browser_context_(new content::TestBrowserContext), | 49 |
50 incognito_context_(CreateTestIncognitoContext()), | |
51 extensions_browser_client_( | |
52 new TestExtensionsBrowserClient(browser_context_.get())) { | |
53 BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive( | 50 BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive( |
54 browser_context_.get()); | 51 browser_context_.get()); |
55 content::SetBrowserClientForTesting(content_browser_client_.get()); | 52 content::SetBrowserClientForTesting(content_browser_client_.get()); |
56 content::SetUtilityClientForTesting(content_utility_client_.get()); | 53 content::SetUtilityClientForTesting(content_utility_client_.get()); |
57 ExtensionsBrowserClient::Set(extensions_browser_client_.get()); | 54 ExtensionsBrowserClient::Set(extensions_browser_client_.get()); |
58 extensions_browser_client_->set_extension_system_factory( | 55 extensions_browser_client_->set_extension_system_factory( |
59 &extension_system_factory_); | 56 &extension_system_factory_); |
60 extensions_browser_client_->SetIncognitoContext(incognito_context_.get()); | 57 extensions_browser_client_->SetIncognitoContext(incognito_context_.get()); |
61 | 58 |
62 // Set up all the dependencies of ExtensionPrefs. | 59 // Set up all the dependencies of ExtensionPrefs. |
63 extension_pref_value_map_.reset(new ExtensionPrefValueMap()); | 60 extension_pref_value_map_.reset(new ExtensionPrefValueMap()); |
64 PrefServiceFactory factory; | 61 PrefServiceFactory factory; |
65 factory.set_user_prefs(new TestingPrefStore()); | 62 factory.set_user_prefs(new TestingPrefStore()); |
66 factory.set_extension_prefs(new TestingPrefStore()); | 63 factory.set_extension_prefs(new TestingPrefStore()); |
67 user_prefs::PrefRegistrySyncable* pref_registry = | 64 user_prefs::PrefRegistrySyncable* pref_registry = |
68 new user_prefs::PrefRegistrySyncable(); | 65 new user_prefs::PrefRegistrySyncable(); |
69 // Prefs should be registered before the PrefService is created. | 66 // Prefs should be registered before the PrefService is created. |
70 ExtensionPrefs::RegisterProfilePrefs(pref_registry); | 67 ExtensionPrefs::RegisterProfilePrefs(pref_registry); |
71 pref_service_ = factory.Create(pref_registry); | 68 pref_service_ = factory.Create(pref_registry); |
72 | 69 |
73 std::unique_ptr<ExtensionPrefs> extension_prefs(ExtensionPrefs::Create( | 70 std::unique_ptr<ExtensionPrefs> extension_prefs(ExtensionPrefs::Create( |
74 browser_context(), pref_service_.get(), | 71 browser_context(), pref_service_.get(), |
75 browser_context()->GetPath().AppendASCII("Extensions"), | 72 browser_context()->GetPath().AppendASCII("Extensions"), |
76 extension_pref_value_map_.get(), false /* extensions_disabled */, | 73 extension_pref_value_map_.get(), false /* extensions_disabled */, |
77 std::vector<ExtensionPrefsObserver*>())); | 74 std::vector<ExtensionPrefsObserver*>())); |
78 | 75 |
79 ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( | 76 ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( |
80 browser_context(), std::move(extension_prefs)); | 77 browser_context(), std::move(extension_prefs)); |
81 } | |
82 | 78 |
83 ExtensionsTest::~ExtensionsTest() { | |
84 ExtensionsBrowserClient::Set(nullptr); | |
85 content::SetBrowserClientForTesting(nullptr); | |
86 content::SetUtilityClientForTesting(nullptr); | |
87 } | |
88 | |
89 void ExtensionsTest::SetUp() { | |
90 // Crashing here? Don't use this class in Chrome's unit_tests. See header. | 79 // Crashing here? Don't use this class in Chrome's unit_tests. See header. |
91 BrowserContextDependencyManager::GetInstance() | 80 BrowserContextDependencyManager::GetInstance() |
92 ->CreateBrowserContextServicesForTest(browser_context_.get()); | 81 ->CreateBrowserContextServicesForTest(browser_context_.get()); |
93 } | 82 } |
94 | 83 |
95 void ExtensionsTest::TearDown() { | 84 void ExtensionsTest::TearDown() { |
96 // Allows individual tests to have BrowserContextKeyedServiceFactory objects | 85 // Allows individual tests to have BrowserContextKeyedServiceFactory objects |
97 // as member variables instead of singletons. The individual services will be | 86 // as member variables instead of singletons. The individual services will be |
98 // cleaned up before the factories are destroyed. | 87 // cleaned up before the factories are destroyed. |
99 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( | 88 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( |
100 browser_context_.get()); | 89 browser_context_.get()); |
101 | 90 |
102 // TODO(crbug.com/708256): |extension_browser_client_| is reset here but not | |
103 // unset as the singleton until the destructor. This can lead to use after | |
104 // free errors. | |
105 extensions_browser_client_.reset(); | 91 extensions_browser_client_.reset(); |
92 ExtensionsBrowserClient::Set(nullptr); | |
93 | |
106 browser_context_.reset(); | 94 browser_context_.reset(); |
107 incognito_context_.reset(); | 95 incognito_context_.reset(); |
108 pref_service_.reset(); | 96 pref_service_.reset(); |
109 } | 97 } |
110 | 98 |
111 } // namespace extensions | 99 } // namespace extensions |
OLD | NEW |