Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: chrome/browser/extensions/component_loader_unittest.cc

Issue 709813004: Remove the deprecated function ExtensionService::extensions(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed thestig@'s comments. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/component_loader.h" 5 #include "chrome/browser/extensions/component_loader.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/prefs/pref_registry_simple.h" 11 #include "base/prefs/pref_registry_simple.h"
12 #include "chrome/browser/extensions/test_extension_service.h" 12 #include "chrome/browser/extensions/test_extension_service.h"
13 #include "chrome/common/chrome_paths.h" 13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/testing_pref_service_syncable.h" 15 #include "chrome/test/base/testing_pref_service_syncable.h"
16 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
17 #include "components/pref_registry/pref_registry_syncable.h" 17 #include "components/pref_registry/pref_registry_syncable.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 18 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "extensions/browser/extension_registry.h"
19 #include "extensions/common/constants.h" 20 #include "extensions/common/constants.h"
20 #include "extensions/common/extension.h" 21 #include "extensions/common/extension.h"
21 #include "extensions/common/extension_set.h" 22 #include "extensions/common/extension_set.h"
22 #include "extensions/common/manifest_handlers/background_info.h" 23 #include "extensions/common/manifest_handlers/background_info.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 namespace extensions { 26 namespace extensions {
26 27
27 namespace { 28 namespace {
28 29
29 class MockExtensionService : public TestExtensionService { 30 class MockExtensionService : public TestExtensionService {
30 private: 31 private:
31 bool ready_; 32 bool ready_;
32 size_t unloaded_count_; 33 size_t unloaded_count_;
33 ExtensionSet extension_set_; 34 ExtensionRegistry* registry_;
34 35
35 public: 36 public:
36 MockExtensionService() : ready_(false), unloaded_count_(0) { 37 explicit MockExtensionService(Profile* profile)
37 } 38 : ready_(false),
39 unloaded_count_(0),
40 registry_(ExtensionRegistry::Get(profile)) {}
38 41
39 void AddComponentExtension(const Extension* extension) override { 42 void AddComponentExtension(const Extension* extension) override {
40 EXPECT_FALSE(extension_set_.Contains(extension->id())); 43 EXPECT_FALSE(registry_->enabled_extensions().Contains(extension->id()));
41 // ExtensionService must become the owner of the extension object. 44 // ExtensionService must become the owner of the extension object.
42 extension_set_.Insert(extension); 45 registry_->AddEnabled(extension);
43 } 46 }
44 47
45 void UnloadExtension(const std::string& extension_id, 48 void UnloadExtension(const std::string& extension_id,
46 UnloadedExtensionInfo::Reason reason) override { 49 UnloadedExtensionInfo::Reason reason) override {
47 ASSERT_TRUE(extension_set_.Contains(extension_id)); 50 ASSERT_TRUE(registry_->enabled_extensions().Contains(extension_id));
48 // Remove the extension with the matching id. 51 // Remove the extension with the matching id.
49 extension_set_.Remove(extension_id); 52 registry_->RemoveEnabled(extension_id);
50 unloaded_count_++; 53 unloaded_count_++;
51 } 54 }
52 55
53 void RemoveComponentExtension(const std::string& extension_id) override { 56 void RemoveComponentExtension(const std::string& extension_id) override {
54 UnloadExtension(extension_id, UnloadedExtensionInfo::REASON_DISABLE); 57 UnloadExtension(extension_id, UnloadedExtensionInfo::REASON_DISABLE);
55 } 58 }
56 59
57 bool is_ready() override { return ready_; } 60 bool is_ready() override { return ready_; }
58 61
59 const ExtensionSet* extensions() const override { return &extension_set_; }
60
61 void set_ready(bool ready) { 62 void set_ready(bool ready) {
62 ready_ = ready; 63 ready_ = ready;
63 } 64 }
64 65
65 size_t unloaded_count() const { 66 size_t unloaded_count() const {
66 return unloaded_count_; 67 return unloaded_count_;
67 } 68 }
68 69
69 void clear_extensions() { 70 void clear_extensions() { registry_->ClearAll(); }
70 extension_set_.Clear();
71 }
72 }; 71 };
73 72
74 } // namespace 73 } // namespace
75 74
76 class ComponentLoaderTest : public testing::Test { 75 class ComponentLoaderTest : public testing::Test {
77 public: 76 public:
78 ComponentLoaderTest() 77 ComponentLoaderTest()
79 // Note: we pass the same pref service here, to stand in for both 78 // Note: we pass the same pref service here, to stand in for both
80 // user prefs and local state. 79 // user prefs and local state.
81 : component_loader_(&extension_service_, 80 : extension_service_(&profile_),
81 component_loader_(&extension_service_,
82 &prefs_, 82 &prefs_,
83 &local_state_, 83 &local_state_,
84 &profile_) { 84 &profile_) {}
85 }
86 85
87 void SetUp() override { 86 void SetUp() override {
88 extension_path_ = 87 extension_path_ =
89 GetBasePath().AppendASCII("good") 88 GetBasePath().AppendASCII("good")
90 .AppendASCII("Extensions") 89 .AppendASCII("Extensions")
91 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 90 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
92 .AppendASCII("1.0.0.0"); 91 .AppendASCII("1.0.0.0");
93 92
94 // Read in the extension manifest. 93 // Read in the extension manifest.
95 ASSERT_TRUE(base::ReadFileToString( 94 ASSERT_TRUE(base::ReadFileToString(
96 extension_path_.Append(kManifestFilename), 95 extension_path_.Append(kManifestFilename),
97 &manifest_contents_)); 96 &manifest_contents_));
98 97
99 // Register the local state prefs. 98 // Register the local state prefs.
100 #if defined(OS_CHROMEOS) 99 #if defined(OS_CHROMEOS)
101 local_state_.registry()->RegisterBooleanPref( 100 local_state_.registry()->RegisterBooleanPref(
102 prefs::kAccessibilitySpokenFeedbackEnabled, false); 101 prefs::kAccessibilitySpokenFeedbackEnabled, false);
103 #endif 102 #endif
104 } 103 }
105 104
106 protected: 105 protected:
106 TestingProfile profile_;
107 MockExtensionService extension_service_; 107 MockExtensionService extension_service_;
108 TestingPrefServiceSyncable prefs_; 108 TestingPrefServiceSyncable prefs_;
109 TestingPrefServiceSimple local_state_; 109 TestingPrefServiceSimple local_state_;
110 TestingProfile profile_;
111 ComponentLoader component_loader_; 110 ComponentLoader component_loader_;
112 111
113 // The root directory of the text extension. 112 // The root directory of the text extension.
114 base::FilePath extension_path_; 113 base::FilePath extension_path_;
115 114
116 // The contents of the text extension's manifest file. 115 // The contents of the text extension's manifest file.
117 std::string manifest_contents_; 116 std::string manifest_contents_;
118 117
119 content::TestBrowserThreadBundle thread_bundle_; 118 content::TestBrowserThreadBundle thread_bundle_;
120 119
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 ASSERT_TRUE(manifest->GetString("background.page", &string_value)); 172 ASSERT_TRUE(manifest->GetString("background.page", &string_value));
174 EXPECT_EQ("backgroundpage.html", string_value); 173 EXPECT_EQ("backgroundpage.html", string_value);
175 } 174 }
176 175
177 // Test that the extension isn't loaded if the extension service isn't ready. 176 // Test that the extension isn't loaded if the extension service isn't ready.
178 TEST_F(ComponentLoaderTest, AddWhenNotReady) { 177 TEST_F(ComponentLoaderTest, AddWhenNotReady) {
179 extension_service_.set_ready(false); 178 extension_service_.set_ready(false);
180 std::string extension_id = 179 std::string extension_id =
181 component_loader_.Add(manifest_contents_, extension_path_); 180 component_loader_.Add(manifest_contents_, extension_path_);
182 EXPECT_NE("", extension_id); 181 EXPECT_NE("", extension_id);
183 EXPECT_EQ(0u, extension_service_.extensions()->size()); 182 ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_);
183 EXPECT_EQ(0u, registry->enabled_extensions().size());
184 } 184 }
185 185
186 // Test that it *is* loaded when the extension service *is* ready. 186 // Test that it *is* loaded when the extension service *is* ready.
187 TEST_F(ComponentLoaderTest, AddWhenReady) { 187 TEST_F(ComponentLoaderTest, AddWhenReady) {
188 extension_service_.set_ready(true); 188 extension_service_.set_ready(true);
189 std::string extension_id = 189 std::string extension_id =
190 component_loader_.Add(manifest_contents_, extension_path_); 190 component_loader_.Add(manifest_contents_, extension_path_);
191 EXPECT_NE("", extension_id); 191 EXPECT_NE("", extension_id);
192 EXPECT_EQ(1u, extension_service_.extensions()->size()); 192 ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_);
193 EXPECT_TRUE(extension_service_.extensions()->GetByID(extension_id)); 193 EXPECT_EQ(1u, registry->enabled_extensions().size());
194 EXPECT_TRUE(registry->enabled_extensions().GetByID(extension_id));
194 } 195 }
195 196
196 TEST_F(ComponentLoaderTest, Remove) { 197 TEST_F(ComponentLoaderTest, Remove) {
197 extension_service_.set_ready(false); 198 extension_service_.set_ready(false);
199 ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_);
198 200
199 // Removing an extension that was never added should be ok. 201 // Removing an extension that was never added should be ok.
200 component_loader_.Remove(extension_path_); 202 component_loader_.Remove(extension_path_);
201 EXPECT_EQ(0u, extension_service_.extensions()->size()); 203 EXPECT_EQ(0u, registry->enabled_extensions().size());
202 204
203 // Try adding and removing before LoadAll() is called. 205 // Try adding and removing before LoadAll() is called.
204 component_loader_.Add(manifest_contents_, extension_path_); 206 component_loader_.Add(manifest_contents_, extension_path_);
205 component_loader_.Remove(extension_path_); 207 component_loader_.Remove(extension_path_);
206 component_loader_.LoadAll(); 208 component_loader_.LoadAll();
207 EXPECT_EQ(0u, extension_service_.extensions()->size()); 209 EXPECT_EQ(0u, registry->enabled_extensions().size());
208 210
209 // Load an extension, and check that it's unloaded when Remove() is called. 211 // Load an extension, and check that it's unloaded when Remove() is called.
210 extension_service_.set_ready(true); 212 extension_service_.set_ready(true);
211 std::string extension_id = 213 std::string extension_id =
212 component_loader_.Add(manifest_contents_, extension_path_); 214 component_loader_.Add(manifest_contents_, extension_path_);
213 EXPECT_EQ(1u, extension_service_.extensions()->size()); 215 EXPECT_EQ(1u, registry->enabled_extensions().size());
214 component_loader_.Remove(extension_path_); 216 component_loader_.Remove(extension_path_);
215 EXPECT_EQ(0u, extension_service_.extensions()->size()); 217 EXPECT_EQ(0u, registry->enabled_extensions().size());
216 218
217 // And after calling LoadAll(), it shouldn't get loaded. 219 // And after calling LoadAll(), it shouldn't get loaded.
218 component_loader_.LoadAll(); 220 component_loader_.LoadAll();
219 EXPECT_EQ(0u, extension_service_.extensions()->size()); 221 EXPECT_EQ(0u, registry->enabled_extensions().size());
220 } 222 }
221 223
222 TEST_F(ComponentLoaderTest, LoadAll) { 224 TEST_F(ComponentLoaderTest, LoadAll) {
223 extension_service_.set_ready(false); 225 extension_service_.set_ready(false);
226 ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_);
224 227
225 // No extensions should be loaded if none were added. 228 // No extensions should be loaded if none were added.
226 component_loader_.LoadAll(); 229 component_loader_.LoadAll();
227 EXPECT_EQ(0u, extension_service_.extensions()->size()); 230 EXPECT_EQ(0u, registry->enabled_extensions().size());
228 231
229 // Use LoadAll() to load the default extensions. 232 // Use LoadAll() to load the default extensions.
230 component_loader_.AddDefaultComponentExtensions(false); 233 component_loader_.AddDefaultComponentExtensions(false);
231 component_loader_.LoadAll(); 234 component_loader_.LoadAll();
232 unsigned int default_count = extension_service_.extensions()->size(); 235 unsigned int default_count = registry->enabled_extensions().size();
233 236
234 // Clear the list of loaded extensions, and reload with one more. 237 // Clear the list of loaded extensions, and reload with one more.
235 extension_service_.clear_extensions(); 238 extension_service_.clear_extensions();
236 component_loader_.Add(manifest_contents_, extension_path_); 239 component_loader_.Add(manifest_contents_, extension_path_);
237 component_loader_.LoadAll(); 240 component_loader_.LoadAll();
238 241
239 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); 242 EXPECT_EQ(default_count + 1, registry->enabled_extensions().size());
240 } 243 }
241 244
242 TEST_F(ComponentLoaderTest, AddOrReplace) { 245 TEST_F(ComponentLoaderTest, AddOrReplace) {
243 EXPECT_EQ(0u, component_loader_.registered_extensions_count()); 246 EXPECT_EQ(0u, component_loader_.registered_extensions_count());
244 component_loader_.AddDefaultComponentExtensions(false); 247 component_loader_.AddDefaultComponentExtensions(false);
245 size_t const default_count = component_loader_.registered_extensions_count(); 248 size_t const default_count = component_loader_.registered_extensions_count();
246 base::FilePath known_extension = GetBasePath() 249 base::FilePath known_extension = GetBasePath()
247 .AppendASCII("override_component_extension"); 250 .AppendASCII("override_component_extension");
248 base::FilePath unknow_extension = extension_path_; 251 base::FilePath unknow_extension = extension_path_;
249 base::FilePath invalid_extension = GetBasePath().AppendASCII("bad"); 252 base::FilePath invalid_extension = GetBasePath().AppendASCII("bad");
250 253
251 // Replace a default component extension. 254 // Replace a default component extension.
252 component_loader_.AddOrReplace(known_extension); 255 component_loader_.AddOrReplace(known_extension);
253 EXPECT_EQ(default_count, 256 EXPECT_EQ(default_count,
254 component_loader_.registered_extensions_count()); 257 component_loader_.registered_extensions_count());
255 258
256 // Add a new component extension. 259 // Add a new component extension.
257 component_loader_.AddOrReplace(unknow_extension); 260 component_loader_.AddOrReplace(unknow_extension);
258 EXPECT_EQ(default_count + 1, 261 EXPECT_EQ(default_count + 1,
259 component_loader_.registered_extensions_count()); 262 component_loader_.registered_extensions_count());
260 263
261 extension_service_.set_ready(true); 264 extension_service_.set_ready(true);
262 component_loader_.LoadAll(); 265 component_loader_.LoadAll();
266 ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_);
263 267
264 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); 268 EXPECT_EQ(default_count + 1, registry->enabled_extensions().size());
265 EXPECT_EQ(0u, extension_service_.unloaded_count()); 269 EXPECT_EQ(0u, extension_service_.unloaded_count());
266 270
267 // replace loaded component extension. 271 // replace loaded component extension.
268 component_loader_.AddOrReplace(known_extension); 272 component_loader_.AddOrReplace(known_extension);
269 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); 273 EXPECT_EQ(default_count + 1, registry->enabled_extensions().size());
270 EXPECT_EQ(1u, extension_service_.unloaded_count()); 274 EXPECT_EQ(1u, extension_service_.unloaded_count());
271 275
272 // Add an invalid component extension. 276 // Add an invalid component extension.
273 std::string extension_id = component_loader_.AddOrReplace(invalid_extension); 277 std::string extension_id = component_loader_.AddOrReplace(invalid_extension);
274 EXPECT_TRUE(extension_id.empty()); 278 EXPECT_TRUE(extension_id.empty());
275 } 279 }
276 280
277 } // namespace extensions 281 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc ('k') | chrome/browser/extensions/crx_installer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698