OLD | NEW |
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/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 using content::IndexedDBContext; | 114 using content::IndexedDBContext; |
115 using content::PluginService; | 115 using content::PluginService; |
116 using extensions::APIPermission; | 116 using extensions::APIPermission; |
117 using extensions::APIPermissionSet; | 117 using extensions::APIPermissionSet; |
118 using extensions::CrxInstaller; | 118 using extensions::CrxInstaller; |
119 using extensions::Extension; | 119 using extensions::Extension; |
120 using extensions::ExtensionCreator; | 120 using extensions::ExtensionCreator; |
121 using extensions::ExtensionPrefs; | 121 using extensions::ExtensionPrefs; |
122 using extensions::ExtensionSystem; | 122 using extensions::ExtensionSystem; |
123 using extensions::FeatureSwitch; | 123 using extensions::FeatureSwitch; |
| 124 using extensions::Manifest; |
124 using extensions::PermissionSet; | 125 using extensions::PermissionSet; |
125 using extensions::URLPatternSet; | 126 using extensions::URLPatternSet; |
126 | 127 |
127 namespace keys = extension_manifest_keys; | 128 namespace keys = extension_manifest_keys; |
128 | 129 |
129 namespace { | 130 namespace { |
130 | 131 |
131 // Extension ids used during testing. | 132 // Extension ids used during testing. |
132 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 133 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
133 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; | 134 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 CHECK(file_util::CreateTemporaryFile(&temp_file)); | 179 CHECK(file_util::CreateTemporaryFile(&temp_file)); |
179 return temp_file; | 180 return temp_file; |
180 } | 181 } |
181 | 182 |
182 } // namespace | 183 } // namespace |
183 | 184 |
184 class MockExtensionProvider : public extensions::ExternalProviderInterface { | 185 class MockExtensionProvider : public extensions::ExternalProviderInterface { |
185 public: | 186 public: |
186 MockExtensionProvider( | 187 MockExtensionProvider( |
187 VisitorInterface* visitor, | 188 VisitorInterface* visitor, |
188 Extension::Location location) | 189 Manifest::Location location) |
189 : location_(location), visitor_(visitor), visit_count_(0) { | 190 : location_(location), visitor_(visitor), visit_count_(0) { |
190 } | 191 } |
191 | 192 |
192 virtual ~MockExtensionProvider() {} | 193 virtual ~MockExtensionProvider() {} |
193 | 194 |
194 void UpdateOrAddExtension(const std::string& id, | 195 void UpdateOrAddExtension(const std::string& id, |
195 const std::string& version, | 196 const std::string& version, |
196 const FilePath& path) { | 197 const FilePath& path) { |
197 extension_map_[id] = std::make_pair(version, path); | 198 extension_map_[id] = std::make_pair(version, path); |
198 } | 199 } |
(...skipping 15 matching lines...) Expand all Loading... |
214 } | 215 } |
215 visitor_->OnExternalProviderReady(this); | 216 visitor_->OnExternalProviderReady(this); |
216 } | 217 } |
217 | 218 |
218 virtual bool HasExtension(const std::string& id) const OVERRIDE { | 219 virtual bool HasExtension(const std::string& id) const OVERRIDE { |
219 return extension_map_.find(id) != extension_map_.end(); | 220 return extension_map_.find(id) != extension_map_.end(); |
220 } | 221 } |
221 | 222 |
222 virtual bool GetExtensionDetails( | 223 virtual bool GetExtensionDetails( |
223 const std::string& id, | 224 const std::string& id, |
224 Extension::Location* location, | 225 Manifest::Location* location, |
225 scoped_ptr<Version>* version) const OVERRIDE { | 226 scoped_ptr<Version>* version) const OVERRIDE { |
226 DataMap::const_iterator it = extension_map_.find(id); | 227 DataMap::const_iterator it = extension_map_.find(id); |
227 if (it == extension_map_.end()) | 228 if (it == extension_map_.end()) |
228 return false; | 229 return false; |
229 | 230 |
230 if (version) | 231 if (version) |
231 version->reset(new Version(it->second.first)); | 232 version->reset(new Version(it->second.first)); |
232 | 233 |
233 if (location) | 234 if (location) |
234 *location = location_; | 235 *location = location_; |
235 | 236 |
236 return true; | 237 return true; |
237 } | 238 } |
238 | 239 |
239 virtual bool IsReady() const OVERRIDE { | 240 virtual bool IsReady() const OVERRIDE { |
240 return true; | 241 return true; |
241 } | 242 } |
242 | 243 |
243 virtual void ServiceShutdown() OVERRIDE { | 244 virtual void ServiceShutdown() OVERRIDE { |
244 } | 245 } |
245 | 246 |
246 int visit_count() const { return visit_count_; } | 247 int visit_count() const { return visit_count_; } |
247 void set_visit_count(int visit_count) { | 248 void set_visit_count(int visit_count) { |
248 visit_count_ = visit_count; | 249 visit_count_ = visit_count; |
249 } | 250 } |
250 | 251 |
251 private: | 252 private: |
252 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap; | 253 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap; |
253 DataMap extension_map_; | 254 DataMap extension_map_; |
254 Extension::Location location_; | 255 Manifest::Location location_; |
255 VisitorInterface* visitor_; | 256 VisitorInterface* visitor_; |
256 | 257 |
257 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). | 258 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). |
258 // Mutable because it must be incremented on each call to | 259 // Mutable because it must be incremented on each call to |
259 // VisitRegisteredExtension(), which must be a const method to inherit | 260 // VisitRegisteredExtension(), which must be a const method to inherit |
260 // from the class being mocked. | 261 // from the class being mocked. |
261 mutable int visit_count_; | 262 mutable int visit_count_; |
262 | 263 |
263 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); | 264 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); |
264 }; | 265 }; |
(...skipping 14 matching lines...) Expand all Loading... |
279 : ids_found_(0), | 280 : ids_found_(0), |
280 fake_base_path_(fake_base_path), | 281 fake_base_path_(fake_base_path), |
281 expected_creation_flags_(expected_creation_flags) { | 282 expected_creation_flags_(expected_creation_flags) { |
282 } | 283 } |
283 | 284 |
284 int Visit(const std::string& json_data) { | 285 int Visit(const std::string& json_data) { |
285 // Give the test json file to the provider for parsing. | 286 // Give the test json file to the provider for parsing. |
286 provider_.reset(new extensions::ExternalProviderImpl( | 287 provider_.reset(new extensions::ExternalProviderImpl( |
287 this, | 288 this, |
288 new extensions::ExternalTestingLoader(json_data, fake_base_path_), | 289 new extensions::ExternalTestingLoader(json_data, fake_base_path_), |
289 Extension::EXTERNAL_PREF, | 290 Manifest::EXTERNAL_PREF, |
290 Extension::EXTERNAL_PREF_DOWNLOAD, | 291 Manifest::EXTERNAL_PREF_DOWNLOAD, |
291 Extension::NO_FLAGS)); | 292 Extension::NO_FLAGS)); |
292 | 293 |
293 // We also parse the file into a dictionary to compare what we get back | 294 // We also parse the file into a dictionary to compare what we get back |
294 // from the provider. | 295 // from the provider. |
295 JSONStringValueSerializer serializer(json_data); | 296 JSONStringValueSerializer serializer(json_data); |
296 Value* json_value = serializer.Deserialize(NULL, NULL); | 297 Value* json_value = serializer.Deserialize(NULL, NULL); |
297 | 298 |
298 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { | 299 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { |
299 NOTREACHED() << "Unable to deserialize json data"; | 300 NOTREACHED() << "Unable to deserialize json data"; |
300 return -1; | 301 return -1; |
301 } else { | 302 } else { |
302 DictionaryValue* external_extensions = | 303 DictionaryValue* external_extensions = |
303 static_cast<DictionaryValue*>(json_value); | 304 static_cast<DictionaryValue*>(json_value); |
304 prefs_.reset(external_extensions); | 305 prefs_.reset(external_extensions); |
305 } | 306 } |
306 | 307 |
307 // Reset our counter. | 308 // Reset our counter. |
308 ids_found_ = 0; | 309 ids_found_ = 0; |
309 // Ask the provider to look up all extensions and return them. | 310 // Ask the provider to look up all extensions and return them. |
310 provider_->VisitRegisteredExtension(); | 311 provider_->VisitRegisteredExtension(); |
311 | 312 |
312 return ids_found_; | 313 return ids_found_; |
313 } | 314 } |
314 | 315 |
315 virtual bool OnExternalExtensionFileFound(const std::string& id, | 316 virtual bool OnExternalExtensionFileFound(const std::string& id, |
316 const Version* version, | 317 const Version* version, |
317 const FilePath& path, | 318 const FilePath& path, |
318 Extension::Location unused, | 319 Manifest::Location unused, |
319 int creation_flags, | 320 int creation_flags, |
320 bool mark_acknowledged) { | 321 bool mark_acknowledged) { |
321 EXPECT_EQ(expected_creation_flags_, creation_flags); | 322 EXPECT_EQ(expected_creation_flags_, creation_flags); |
322 | 323 |
323 ++ids_found_; | 324 ++ids_found_; |
324 DictionaryValue* pref; | 325 DictionaryValue* pref; |
325 // This tests is to make sure that the provider only notifies us of the | 326 // This tests is to make sure that the provider only notifies us of the |
326 // values we gave it. So if the id we doesn't exist in our internal | 327 // values we gave it. So if the id we doesn't exist in our internal |
327 // dictionary then something is wrong. | 328 // dictionary then something is wrong. |
328 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) | 329 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) |
329 << "Got back ID (" << id.c_str() << ") we weren't expecting"; | 330 << "Got back ID (" << id.c_str() << ") we weren't expecting"; |
330 | 331 |
331 EXPECT_TRUE(path.IsAbsolute()); | 332 EXPECT_TRUE(path.IsAbsolute()); |
332 if (!fake_base_path_.empty()) | 333 if (!fake_base_path_.empty()) |
333 EXPECT_TRUE(fake_base_path_.IsParent(path)); | 334 EXPECT_TRUE(fake_base_path_.IsParent(path)); |
334 | 335 |
335 if (pref) { | 336 if (pref) { |
336 EXPECT_TRUE(provider_->HasExtension(id)); | 337 EXPECT_TRUE(provider_->HasExtension(id)); |
337 | 338 |
338 // Ask provider if the extension we got back is registered. | 339 // Ask provider if the extension we got back is registered. |
339 Extension::Location location = Extension::INVALID; | 340 Manifest::Location location = Manifest::INVALID_LOCATION; |
340 scoped_ptr<Version> v1; | 341 scoped_ptr<Version> v1; |
341 FilePath crx_path; | 342 FilePath crx_path; |
342 | 343 |
343 EXPECT_TRUE(provider_->GetExtensionDetails(id, NULL, &v1)); | 344 EXPECT_TRUE(provider_->GetExtensionDetails(id, NULL, &v1)); |
344 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); | 345 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); |
345 | 346 |
346 scoped_ptr<Version> v2; | 347 scoped_ptr<Version> v2; |
347 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location, &v2)); | 348 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location, &v2)); |
348 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); | 349 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); |
349 EXPECT_STREQ(version->GetString().c_str(), v2->GetString().c_str()); | 350 EXPECT_STREQ(version->GetString().c_str(), v2->GetString().c_str()); |
350 EXPECT_EQ(Extension::EXTERNAL_PREF, location); | 351 EXPECT_EQ(Manifest::EXTERNAL_PREF, location); |
351 | 352 |
352 // Remove it so we won't count it ever again. | 353 // Remove it so we won't count it ever again. |
353 prefs_->Remove(id, NULL); | 354 prefs_->Remove(id, NULL); |
354 } | 355 } |
355 return true; | 356 return true; |
356 } | 357 } |
357 | 358 |
358 virtual bool OnExternalExtensionUpdateUrlFound( | 359 virtual bool OnExternalExtensionUpdateUrlFound( |
359 const std::string& id, const GURL& update_url, | 360 const std::string& id, const GURL& update_url, |
360 Extension::Location location) { | 361 Manifest::Location location) { |
361 ++ids_found_; | 362 ++ids_found_; |
362 DictionaryValue* pref; | 363 DictionaryValue* pref; |
363 // This tests is to make sure that the provider only notifies us of the | 364 // This tests is to make sure that the provider only notifies us of the |
364 // values we gave it. So if the id we doesn't exist in our internal | 365 // values we gave it. So if the id we doesn't exist in our internal |
365 // dictionary then something is wrong. | 366 // dictionary then something is wrong. |
366 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) | 367 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) |
367 << L"Got back ID (" << id.c_str() << ") we weren't expecting"; | 368 << L"Got back ID (" << id.c_str() << ") we weren't expecting"; |
368 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location); | 369 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, location); |
369 | 370 |
370 if (pref) { | 371 if (pref) { |
371 EXPECT_TRUE(provider_->HasExtension(id)); | 372 EXPECT_TRUE(provider_->HasExtension(id)); |
372 | 373 |
373 // External extensions with update URLs do not have versions. | 374 // External extensions with update URLs do not have versions. |
374 scoped_ptr<Version> v1; | 375 scoped_ptr<Version> v1; |
375 Extension::Location location1 = Extension::INVALID; | 376 Manifest::Location location1 = Manifest::INVALID_LOCATION; |
376 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1)); | 377 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1)); |
377 EXPECT_FALSE(v1.get()); | 378 EXPECT_FALSE(v1.get()); |
378 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location1); | 379 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, location1); |
379 | 380 |
380 // Remove it so we won't count it again. | 381 // Remove it so we won't count it again. |
381 prefs_->Remove(id, NULL); | 382 prefs_->Remove(id, NULL); |
382 } | 383 } |
383 return true; | 384 return true; |
384 } | 385 } |
385 | 386 |
386 virtual void OnExternalProviderReady( | 387 virtual void OnExternalProviderReady( |
387 const extensions::ExternalProviderInterface* provider) { | 388 const extensions::ExternalProviderInterface* provider) { |
388 EXPECT_EQ(provider, provider_.get()); | 389 EXPECT_EQ(provider, provider_.get()); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 } | 596 } |
596 } | 597 } |
597 | 598 |
598 void AddMockExternalProvider( | 599 void AddMockExternalProvider( |
599 extensions::ExternalProviderInterface* provider) { | 600 extensions::ExternalProviderInterface* provider) { |
600 service_->AddProviderForTesting(provider); | 601 service_->AddProviderForTesting(provider); |
601 } | 602 } |
602 | 603 |
603 protected: | 604 protected: |
604 void TestExternalProvider(MockExtensionProvider* provider, | 605 void TestExternalProvider(MockExtensionProvider* provider, |
605 Extension::Location location); | 606 Manifest::Location location); |
606 | 607 |
607 void PackCRX(const FilePath& dir_path, | 608 void PackCRX(const FilePath& dir_path, |
608 const FilePath& pem_path, | 609 const FilePath& pem_path, |
609 const FilePath& crx_path) { | 610 const FilePath& crx_path) { |
610 // Use the existing pem key, if provided. | 611 // Use the existing pem key, if provided. |
611 FilePath pem_output_path; | 612 FilePath pem_output_path; |
612 if (pem_path.value().empty()) { | 613 if (pem_path.value().empty()) { |
613 pem_output_path = crx_path.DirName().AppendASCII("temp.pem"); | 614 pem_output_path = crx_path.DirName().AppendASCII("temp.pem"); |
614 } else { | 615 } else { |
615 ASSERT_TRUE(file_util::PathExists(pem_path)); | 616 ASSERT_TRUE(file_util::PathExists(pem_path)); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 return InstallCRX(path, install_state, Extension::NO_FLAGS); | 694 return InstallCRX(path, install_state, Extension::NO_FLAGS); |
694 } | 695 } |
695 | 696 |
696 const Extension* InstallCRXFromWebStore(const FilePath& path, | 697 const Extension* InstallCRXFromWebStore(const FilePath& path, |
697 InstallState install_state) { | 698 InstallState install_state) { |
698 StartCRXInstall(path, Extension::FROM_WEBSTORE); | 699 StartCRXInstall(path, Extension::FROM_WEBSTORE); |
699 return WaitForCrxInstall(path, install_state); | 700 return WaitForCrxInstall(path, install_state); |
700 } | 701 } |
701 | 702 |
702 const Extension* InstallCRXWithLocation(const FilePath& crx_path, | 703 const Extension* InstallCRXWithLocation(const FilePath& crx_path, |
703 Extension::Location install_location, | 704 Manifest::Location install_location, |
704 InstallState install_state) { | 705 InstallState install_state) { |
705 EXPECT_TRUE(file_util::PathExists(crx_path)) | 706 EXPECT_TRUE(file_util::PathExists(crx_path)) |
706 << "Path does not exist: "<< crx_path.value().c_str(); | 707 << "Path does not exist: "<< crx_path.value().c_str(); |
707 // no client (silent install) | 708 // no client (silent install) |
708 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); | 709 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); |
709 installer->set_install_source(install_location); | 710 installer->set_install_source(install_location); |
710 installer->InstallCrx(crx_path); | 711 installer->InstallCrx(crx_path); |
711 | 712 |
712 return WaitForCrxInstall(crx_path, install_state); | 713 return WaitForCrxInstall(crx_path, install_state); |
713 } | 714 } |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1117 service_->Init(); | 1118 service_->Init(); |
1118 | 1119 |
1119 uint32 expected_num_extensions = 3u; | 1120 uint32 expected_num_extensions = 3u; |
1120 ASSERT_EQ(expected_num_extensions, loaded_.size()); | 1121 ASSERT_EQ(expected_num_extensions, loaded_.size()); |
1121 | 1122 |
1122 EXPECT_EQ(std::string(good0), loaded_[0]->id()); | 1123 EXPECT_EQ(std::string(good0), loaded_[0]->id()); |
1123 EXPECT_EQ(std::string("My extension 1"), | 1124 EXPECT_EQ(std::string("My extension 1"), |
1124 loaded_[0]->name()); | 1125 loaded_[0]->name()); |
1125 EXPECT_EQ(std::string("The first extension that I made."), | 1126 EXPECT_EQ(std::string("The first extension that I made."), |
1126 loaded_[0]->description()); | 1127 loaded_[0]->description()); |
1127 EXPECT_EQ(Extension::INTERNAL, loaded_[0]->location()); | 1128 EXPECT_EQ(Manifest::INTERNAL, loaded_[0]->location()); |
1128 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)); | 1129 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)); |
1129 EXPECT_EQ(expected_num_extensions, service_->extensions()->size()); | 1130 EXPECT_EQ(expected_num_extensions, service_->extensions()->size()); |
1130 | 1131 |
1131 ValidatePrefKeyCount(3); | 1132 ValidatePrefKeyCount(3); |
1132 ValidateIntegerPref(good0, "state", Extension::ENABLED); | 1133 ValidateIntegerPref(good0, "state", Extension::ENABLED); |
1133 ValidateIntegerPref(good0, "location", Extension::INTERNAL); | 1134 ValidateIntegerPref(good0, "location", Manifest::INTERNAL); |
1134 ValidateIntegerPref(good1, "state", Extension::ENABLED); | 1135 ValidateIntegerPref(good1, "state", Extension::ENABLED); |
1135 ValidateIntegerPref(good1, "location", Extension::INTERNAL); | 1136 ValidateIntegerPref(good1, "location", Manifest::INTERNAL); |
1136 ValidateIntegerPref(good2, "state", Extension::ENABLED); | 1137 ValidateIntegerPref(good2, "state", Extension::ENABLED); |
1137 ValidateIntegerPref(good2, "location", Extension::INTERNAL); | 1138 ValidateIntegerPref(good2, "location", Manifest::INTERNAL); |
1138 | 1139 |
1139 URLPatternSet expected_patterns; | 1140 URLPatternSet expected_patterns; |
1140 AddPattern(&expected_patterns, "file:///*"); | 1141 AddPattern(&expected_patterns, "file:///*"); |
1141 AddPattern(&expected_patterns, "http://*.google.com/*"); | 1142 AddPattern(&expected_patterns, "http://*.google.com/*"); |
1142 AddPattern(&expected_patterns, "https://*.google.com/*"); | 1143 AddPattern(&expected_patterns, "https://*.google.com/*"); |
1143 const Extension* extension = loaded_[0]; | 1144 const Extension* extension = loaded_[0]; |
1144 const extensions::UserScriptList& scripts = extension->content_scripts(); | 1145 const extensions::UserScriptList& scripts = extension->content_scripts(); |
1145 ASSERT_EQ(2u, scripts.size()); | 1146 ASSERT_EQ(2u, scripts.size()); |
1146 EXPECT_EQ(expected_patterns, scripts[0].url_patterns()); | 1147 EXPECT_EQ(expected_patterns, scripts[0].url_patterns()); |
1147 EXPECT_EQ(2u, scripts[0].js_scripts().size()); | 1148 EXPECT_EQ(2u, scripts[0].js_scripts().size()); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1187 #else | 1188 #else |
1188 ASSERT_EQ(2u, loaded_[1]->plugins().size()); | 1189 ASSERT_EQ(2u, loaded_[1]->plugins().size()); |
1189 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), | 1190 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), |
1190 loaded_[1]->plugins()[0].path.value()); | 1191 loaded_[1]->plugins()[0].path.value()); |
1191 EXPECT_TRUE(loaded_[1]->plugins()[0].is_public); | 1192 EXPECT_TRUE(loaded_[1]->plugins()[0].is_public); |
1192 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), | 1193 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), |
1193 loaded_[1]->plugins()[1].path.value()); | 1194 loaded_[1]->plugins()[1].path.value()); |
1194 EXPECT_FALSE(loaded_[1]->plugins()[1].is_public); | 1195 EXPECT_FALSE(loaded_[1]->plugins()[1].is_public); |
1195 #endif | 1196 #endif |
1196 | 1197 |
1197 EXPECT_EQ(Extension::INTERNAL, loaded_[1]->location()); | 1198 EXPECT_EQ(Manifest::INTERNAL, loaded_[1]->location()); |
1198 | 1199 |
1199 int index = expected_num_extensions - 1; | 1200 int index = expected_num_extensions - 1; |
1200 EXPECT_EQ(std::string(good2), loaded_[index]->id()); | 1201 EXPECT_EQ(std::string(good2), loaded_[index]->id()); |
1201 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); | 1202 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); |
1202 EXPECT_EQ(std::string(""), loaded_[index]->description()); | 1203 EXPECT_EQ(std::string(""), loaded_[index]->description()); |
1203 EXPECT_EQ(0u, loaded_[index]->content_scripts().size()); | 1204 EXPECT_EQ(0u, loaded_[index]->content_scripts().size()); |
1204 EXPECT_EQ(Extension::INTERNAL, loaded_[index]->location()); | 1205 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location()); |
1205 }; | 1206 }; |
1206 | 1207 |
1207 // Test loading bad extensions from the profile directory. | 1208 // Test loading bad extensions from the profile directory. |
1208 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { | 1209 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { |
1209 // Initialize the test dir with a bad Preferences/extensions. | 1210 // Initialize the test dir with a bad Preferences/extensions. |
1210 FilePath source_install_dir = data_dir_ | 1211 FilePath source_install_dir = data_dir_ |
1211 .AppendASCII("bad") | 1212 .AppendASCII("bad") |
1212 .AppendASCII("Extensions"); | 1213 .AppendASCII("Extensions"); |
1213 FilePath pref_path = source_install_dir | 1214 FilePath pref_path = source_install_dir |
1214 .DirName() | 1215 .DirName() |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 ValidatePrefKeyCount(0); | 1372 ValidatePrefKeyCount(0); |
1372 | 1373 |
1373 // A simple extension that should install without error. | 1374 // A simple extension that should install without error. |
1374 path = data_dir_.AppendASCII("good.crx"); | 1375 path = data_dir_.AppendASCII("good.crx"); |
1375 InstallCRX(path, INSTALL_NEW); | 1376 InstallCRX(path, INSTALL_NEW); |
1376 // TODO(erikkay): verify the contents of the installed extension. | 1377 // TODO(erikkay): verify the contents of the installed extension. |
1377 | 1378 |
1378 int pref_count = 0; | 1379 int pref_count = 0; |
1379 ValidatePrefKeyCount(++pref_count); | 1380 ValidatePrefKeyCount(++pref_count); |
1380 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 1381 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
1381 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 1382 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
1382 | 1383 |
1383 // An extension with page actions. | 1384 // An extension with page actions. |
1384 path = data_dir_.AppendASCII("page_action.crx"); | 1385 path = data_dir_.AppendASCII("page_action.crx"); |
1385 InstallCRX(path, INSTALL_NEW); | 1386 InstallCRX(path, INSTALL_NEW); |
1386 ValidatePrefKeyCount(++pref_count); | 1387 ValidatePrefKeyCount(++pref_count); |
1387 ValidateIntegerPref(page_action, "state", Extension::ENABLED); | 1388 ValidateIntegerPref(page_action, "state", Extension::ENABLED); |
1388 ValidateIntegerPref(page_action, "location", Extension::INTERNAL); | 1389 ValidateIntegerPref(page_action, "location", Manifest::INTERNAL); |
1389 | 1390 |
1390 // Bad signature. | 1391 // Bad signature. |
1391 path = data_dir_.AppendASCII("bad_signature.crx"); | 1392 path = data_dir_.AppendASCII("bad_signature.crx"); |
1392 InstallCRX(path, INSTALL_FAILED); | 1393 InstallCRX(path, INSTALL_FAILED); |
1393 ValidatePrefKeyCount(pref_count); | 1394 ValidatePrefKeyCount(pref_count); |
1394 | 1395 |
1395 // 0-length extension file. | 1396 // 0-length extension file. |
1396 path = data_dir_.AppendASCII("not_an_extension.crx"); | 1397 path = data_dir_.AppendASCII("not_an_extension.crx"); |
1397 InstallCRX(path, INSTALL_FAILED); | 1398 InstallCRX(path, INSTALL_FAILED); |
1398 ValidatePrefKeyCount(pref_count); | 1399 ValidatePrefKeyCount(pref_count); |
(...skipping 24 matching lines...) Expand all Loading... |
1423 | 1424 |
1424 FilePath path = data_dir_.AppendASCII("good.crx"); | 1425 FilePath path = data_dir_.AppendASCII("good.crx"); |
1425 set_extensions_enabled(true); | 1426 set_extensions_enabled(true); |
1426 | 1427 |
1427 // Register and install an external extension. | 1428 // Register and install an external extension. |
1428 Version version("1.0.0.0"); | 1429 Version version("1.0.0.0"); |
1429 service_->OnExternalExtensionFileFound( | 1430 service_->OnExternalExtensionFileFound( |
1430 good_crx, | 1431 good_crx, |
1431 &version, | 1432 &version, |
1432 path, | 1433 path, |
1433 Extension::EXTERNAL_PREF, | 1434 Manifest::EXTERNAL_PREF, |
1434 Extension::FROM_BOOKMARK, | 1435 Extension::FROM_BOOKMARK, |
1435 false /* mark_acknowledged */); | 1436 false /* mark_acknowledged */); |
1436 loop_.RunUntilIdle(); | 1437 loop_.RunUntilIdle(); |
1437 | 1438 |
1438 const Extension* extension = service_->GetExtensionById(good_crx, false); | 1439 const Extension* extension = service_->GetExtensionById(good_crx, false); |
1439 ASSERT_TRUE(extension); | 1440 ASSERT_TRUE(extension); |
1440 ASSERT_TRUE(extension->from_bookmark()); | 1441 ASSERT_TRUE(extension->from_bookmark()); |
1441 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); | 1442 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); |
1442 | 1443 |
1443 // Upgrade to version 2.0, the flag should be preserved. | 1444 // Upgrade to version 2.0, the flag should be preserved. |
1444 path = data_dir_.AppendASCII("good2.crx"); | 1445 path = data_dir_.AppendASCII("good2.crx"); |
1445 UpdateExtension(good_crx, path, ENABLED); | 1446 UpdateExtension(good_crx, path, ENABLED); |
1446 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); | 1447 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); |
1447 extension = service_->GetExtensionById(good_crx, false); | 1448 extension = service_->GetExtensionById(good_crx, false); |
1448 ASSERT_TRUE(extension); | 1449 ASSERT_TRUE(extension); |
1449 ASSERT_TRUE(extension->from_bookmark()); | 1450 ASSERT_TRUE(extension->from_bookmark()); |
1450 } | 1451 } |
1451 | 1452 |
1452 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED | 1453 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED |
1453 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { | 1454 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { |
1454 InitializeEmptyExtensionService(); | 1455 InitializeEmptyExtensionService(); |
1455 | 1456 |
1456 FilePath path = data_dir_.AppendASCII("good.crx"); | 1457 FilePath path = data_dir_.AppendASCII("good.crx"); |
1457 set_extensions_enabled(true); | 1458 set_extensions_enabled(true); |
1458 | 1459 |
1459 Version version("1.0.0.0"); | 1460 Version version("1.0.0.0"); |
1460 // Install an external extension. | 1461 // Install an external extension. |
1461 service_->OnExternalExtensionFileFound(good_crx, &version, | 1462 service_->OnExternalExtensionFileFound(good_crx, &version, |
1462 path, Extension::EXTERNAL_PREF, | 1463 path, Manifest::EXTERNAL_PREF, |
1463 Extension::NO_FLAGS, false); | 1464 Extension::NO_FLAGS, false); |
1464 loop_.RunUntilIdle(); | 1465 loop_.RunUntilIdle(); |
1465 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1466 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1466 | 1467 |
1467 // Uninstall it and check that its killbit gets set. | 1468 // Uninstall it and check that its killbit gets set. |
1468 UninstallExtension(good_crx, false); | 1469 UninstallExtension(good_crx, false); |
1469 ValidateIntegerPref(good_crx, "location", | 1470 ValidateIntegerPref(good_crx, "location", |
1470 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1471 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1471 | 1472 |
1472 // Try to re-install it externally. This should fail because of the killbit. | 1473 // Try to re-install it externally. This should fail because of the killbit. |
1473 service_->OnExternalExtensionFileFound(good_crx, &version, | 1474 service_->OnExternalExtensionFileFound(good_crx, &version, |
1474 path, Extension::EXTERNAL_PREF, | 1475 path, Manifest::EXTERNAL_PREF, |
1475 Extension::NO_FLAGS, false); | 1476 Extension::NO_FLAGS, false); |
1476 loop_.RunUntilIdle(); | 1477 loop_.RunUntilIdle(); |
1477 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1478 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1478 ValidateIntegerPref(good_crx, "location", | 1479 ValidateIntegerPref(good_crx, "location", |
1479 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1480 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1480 | 1481 |
1481 version = Version("1.0.0.1"); | 1482 version = Version("1.0.0.1"); |
1482 // Repeat the same thing with a newer version of the extension. | 1483 // Repeat the same thing with a newer version of the extension. |
1483 path = data_dir_.AppendASCII("good2.crx"); | 1484 path = data_dir_.AppendASCII("good2.crx"); |
1484 service_->OnExternalExtensionFileFound(good_crx, &version, | 1485 service_->OnExternalExtensionFileFound(good_crx, &version, |
1485 path, Extension::EXTERNAL_PREF, | 1486 path, Manifest::EXTERNAL_PREF, |
1486 Extension::NO_FLAGS, false); | 1487 Extension::NO_FLAGS, false); |
1487 loop_.RunUntilIdle(); | 1488 loop_.RunUntilIdle(); |
1488 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1489 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1489 ValidateIntegerPref(good_crx, "location", | 1490 ValidateIntegerPref(good_crx, "location", |
1490 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1491 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1491 | 1492 |
1492 // Try adding the same extension from an external update URL. | 1493 // Try adding the same extension from an external update URL. |
1493 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 1494 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
1494 good_crx, | 1495 good_crx, |
1495 GURL("http:://fake.update/url"), | 1496 GURL("http:://fake.update/url"), |
1496 Extension::EXTERNAL_PREF_DOWNLOAD)); | 1497 Manifest::EXTERNAL_PREF_DOWNLOAD)); |
1497 | 1498 |
1498 ASSERT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); | 1499 ASSERT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); |
1499 } | 1500 } |
1500 | 1501 |
1501 // Test that uninstalling an external extension does not crash when | 1502 // Test that uninstalling an external extension does not crash when |
1502 // the extension could not be loaded. | 1503 // the extension could not be loaded. |
1503 // This extension shown in preferences file requires an experimental permission. | 1504 // This extension shown in preferences file requires an experimental permission. |
1504 // It could not be loaded without such permission. | 1505 // It could not be loaded without such permission. |
1505 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) { | 1506 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) { |
1506 FilePath source_install_dir = data_dir_ | 1507 FilePath source_install_dir = data_dir_ |
1507 .AppendASCII("good") | 1508 .AppendASCII("good") |
1508 .AppendASCII("Extensions"); | 1509 .AppendASCII("Extensions"); |
1509 // The preference contains an external extension | 1510 // The preference contains an external extension |
1510 // that requires 'experimental' permission. | 1511 // that requires 'experimental' permission. |
1511 FilePath pref_path = source_install_dir | 1512 FilePath pref_path = source_install_dir |
1512 .DirName() | 1513 .DirName() |
1513 .AppendASCII("PreferencesExperimental"); | 1514 .AppendASCII("PreferencesExperimental"); |
1514 | 1515 |
1515 // Aforementioned extension will not be loaded if | 1516 // Aforementioned extension will not be loaded if |
1516 // there is no '--enable-experimental-extension-apis' command line flag. | 1517 // there is no '--enable-experimental-extension-apis' command line flag. |
1517 InitializeInstalledExtensionService(pref_path, source_install_dir); | 1518 InitializeInstalledExtensionService(pref_path, source_install_dir); |
1518 | 1519 |
1519 service_->Init(); | 1520 service_->Init(); |
1520 | 1521 |
1521 // Check and try to uninstall it. | 1522 // Check and try to uninstall it. |
1522 // If we don't check whether the extension is loaded before we uninstall it | 1523 // If we don't check whether the extension is loaded before we uninstall it |
1523 // in CheckExternalUninstall, a crash will happen here because we will get or | 1524 // in CheckExternalUninstall, a crash will happen here because we will get or |
1524 // dereference a NULL pointer (extension) inside UninstallExtension. | 1525 // dereference a NULL pointer (extension) inside UninstallExtension. |
1525 MockExtensionProvider provider(NULL, Extension::EXTERNAL_REGISTRY); | 1526 MockExtensionProvider provider(NULL, Manifest::EXTERNAL_REGISTRY); |
1526 service_->OnExternalProviderReady(&provider); | 1527 service_->OnExternalProviderReady(&provider); |
1527 } | 1528 } |
1528 | 1529 |
1529 // Test that external extensions with incorrect IDs are not installed. | 1530 // Test that external extensions with incorrect IDs are not installed. |
1530 TEST_F(ExtensionServiceTest, FailOnWrongId) { | 1531 TEST_F(ExtensionServiceTest, FailOnWrongId) { |
1531 InitializeEmptyExtensionService(); | 1532 InitializeEmptyExtensionService(); |
1532 FilePath path = data_dir_.AppendASCII("good.crx"); | 1533 FilePath path = data_dir_.AppendASCII("good.crx"); |
1533 set_extensions_enabled(true); | 1534 set_extensions_enabled(true); |
1534 | 1535 |
1535 Version version("1.0.0.0"); | 1536 Version version("1.0.0.0"); |
1536 | 1537 |
1537 const std::string wrong_id = all_zero; | 1538 const std::string wrong_id = all_zero; |
1538 const std::string correct_id = good_crx; | 1539 const std::string correct_id = good_crx; |
1539 ASSERT_NE(correct_id, wrong_id); | 1540 ASSERT_NE(correct_id, wrong_id); |
1540 | 1541 |
1541 // Install an external extension with an ID from the external | 1542 // Install an external extension with an ID from the external |
1542 // source that is not equal to the ID in the extension manifest. | 1543 // source that is not equal to the ID in the extension manifest. |
1543 service_->OnExternalExtensionFileFound( | 1544 service_->OnExternalExtensionFileFound( |
1544 wrong_id, &version, path, Extension::EXTERNAL_PREF, | 1545 wrong_id, &version, path, Manifest::EXTERNAL_PREF, |
1545 Extension::NO_FLAGS, false); | 1546 Extension::NO_FLAGS, false); |
1546 | 1547 |
1547 loop_.RunUntilIdle(); | 1548 loop_.RunUntilIdle(); |
1548 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1549 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
1549 | 1550 |
1550 // Try again with the right ID. Expect success. | 1551 // Try again with the right ID. Expect success. |
1551 service_->OnExternalExtensionFileFound( | 1552 service_->OnExternalExtensionFileFound( |
1552 correct_id, &version, path, Extension::EXTERNAL_PREF, | 1553 correct_id, &version, path, Manifest::EXTERNAL_PREF, |
1553 Extension::NO_FLAGS, false); | 1554 Extension::NO_FLAGS, false); |
1554 loop_.RunUntilIdle(); | 1555 loop_.RunUntilIdle(); |
1555 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1556 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1556 } | 1557 } |
1557 | 1558 |
1558 // Test that external extensions with incorrect versions are not installed. | 1559 // Test that external extensions with incorrect versions are not installed. |
1559 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { | 1560 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { |
1560 InitializeEmptyExtensionService(); | 1561 InitializeEmptyExtensionService(); |
1561 FilePath path = data_dir_.AppendASCII("good.crx"); | 1562 FilePath path = data_dir_.AppendASCII("good.crx"); |
1562 set_extensions_enabled(true); | 1563 set_extensions_enabled(true); |
1563 | 1564 |
1564 // Install an external extension with a version from the external | 1565 // Install an external extension with a version from the external |
1565 // source that is not equal to the version in the extension manifest. | 1566 // source that is not equal to the version in the extension manifest. |
1566 Version wrong_version("1.2.3.4"); | 1567 Version wrong_version("1.2.3.4"); |
1567 service_->OnExternalExtensionFileFound( | 1568 service_->OnExternalExtensionFileFound( |
1568 good_crx, &wrong_version, path, Extension::EXTERNAL_PREF, | 1569 good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF, |
1569 Extension::NO_FLAGS, false); | 1570 Extension::NO_FLAGS, false); |
1570 | 1571 |
1571 loop_.RunUntilIdle(); | 1572 loop_.RunUntilIdle(); |
1572 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1573 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
1573 | 1574 |
1574 // Try again with the right version. Expect success. | 1575 // Try again with the right version. Expect success. |
1575 service_->pending_extension_manager()->Remove(good_crx); | 1576 service_->pending_extension_manager()->Remove(good_crx); |
1576 Version correct_version("1.0.0.0"); | 1577 Version correct_version("1.0.0.0"); |
1577 service_->OnExternalExtensionFileFound( | 1578 service_->OnExternalExtensionFileFound( |
1578 good_crx, &correct_version, path, Extension::EXTERNAL_PREF, | 1579 good_crx, &correct_version, path, Manifest::EXTERNAL_PREF, |
1579 Extension::NO_FLAGS, false); | 1580 Extension::NO_FLAGS, false); |
1580 loop_.RunUntilIdle(); | 1581 loop_.RunUntilIdle(); |
1581 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1582 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1582 } | 1583 } |
1583 | 1584 |
1584 // Install a user script (they get converted automatically to an extension) | 1585 // Install a user script (they get converted automatically to an extension) |
1585 TEST_F(ExtensionServiceTest, InstallUserScript) { | 1586 TEST_F(ExtensionServiceTest, InstallUserScript) { |
1586 // The details of script conversion are tested elsewhere, this just tests | 1587 // The details of script conversion are tested elsewhere, this just tests |
1587 // integration with ExtensionService. | 1588 // integration with ExtensionService. |
1588 InitializeEmptyExtensionService(); | 1589 InitializeEmptyExtensionService(); |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2055 | 2056 |
2056 TEST_F(ExtensionServiceTest, InstallTheme) { | 2057 TEST_F(ExtensionServiceTest, InstallTheme) { |
2057 InitializeEmptyExtensionService(); | 2058 InitializeEmptyExtensionService(); |
2058 | 2059 |
2059 // A theme. | 2060 // A theme. |
2060 FilePath path = data_dir_.AppendASCII("theme.crx"); | 2061 FilePath path = data_dir_.AppendASCII("theme.crx"); |
2061 InstallCRX(path, INSTALL_NEW); | 2062 InstallCRX(path, INSTALL_NEW); |
2062 int pref_count = 0; | 2063 int pref_count = 0; |
2063 ValidatePrefKeyCount(++pref_count); | 2064 ValidatePrefKeyCount(++pref_count); |
2064 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); | 2065 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); |
2065 ValidateIntegerPref(theme_crx, "location", Extension::INTERNAL); | 2066 ValidateIntegerPref(theme_crx, "location", Manifest::INTERNAL); |
2066 | 2067 |
2067 // A theme when extensions are disabled. Themes can be installed, even when | 2068 // A theme when extensions are disabled. Themes can be installed, even when |
2068 // extensions are disabled. | 2069 // extensions are disabled. |
2069 set_extensions_enabled(false); | 2070 set_extensions_enabled(false); |
2070 path = data_dir_.AppendASCII("theme2.crx"); | 2071 path = data_dir_.AppendASCII("theme2.crx"); |
2071 InstallCRX(path, INSTALL_NEW); | 2072 InstallCRX(path, INSTALL_NEW); |
2072 ValidatePrefKeyCount(++pref_count); | 2073 ValidatePrefKeyCount(++pref_count); |
2073 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED); | 2074 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED); |
2074 ValidateIntegerPref(theme2_crx, "location", Extension::INTERNAL); | 2075 ValidateIntegerPref(theme2_crx, "location", Manifest::INTERNAL); |
2075 | 2076 |
2076 // A theme with extension elements. Themes cannot have extension elements, | 2077 // A theme with extension elements. Themes cannot have extension elements, |
2077 // so any such elements (like content scripts) should be ignored. | 2078 // so any such elements (like content scripts) should be ignored. |
2078 set_extensions_enabled(true); | 2079 set_extensions_enabled(true); |
2079 { | 2080 { |
2080 path = data_dir_.AppendASCII("theme_with_extension.crx"); | 2081 path = data_dir_.AppendASCII("theme_with_extension.crx"); |
2081 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 2082 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
2082 ValidatePrefKeyCount(++pref_count); | 2083 ValidatePrefKeyCount(++pref_count); |
2083 ASSERT_TRUE(extension); | 2084 ASSERT_TRUE(extension); |
2084 EXPECT_TRUE(extension->is_theme()); | 2085 EXPECT_TRUE(extension->is_theme()); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2206 TEST_F(ExtensionServiceTest, InstallApps) { | 2207 TEST_F(ExtensionServiceTest, InstallApps) { |
2207 InitializeEmptyExtensionService(); | 2208 InitializeEmptyExtensionService(); |
2208 | 2209 |
2209 // An empty app. | 2210 // An empty app. |
2210 const Extension* app = PackAndInstallCRX(data_dir_.AppendASCII("app1"), | 2211 const Extension* app = PackAndInstallCRX(data_dir_.AppendASCII("app1"), |
2211 INSTALL_NEW); | 2212 INSTALL_NEW); |
2212 int pref_count = 0; | 2213 int pref_count = 0; |
2213 ValidatePrefKeyCount(++pref_count); | 2214 ValidatePrefKeyCount(++pref_count); |
2214 ASSERT_EQ(1u, service_->extensions()->size()); | 2215 ASSERT_EQ(1u, service_->extensions()->size()); |
2215 ValidateIntegerPref(app->id(), "state", Extension::ENABLED); | 2216 ValidateIntegerPref(app->id(), "state", Extension::ENABLED); |
2216 ValidateIntegerPref(app->id(), "location", Extension::INTERNAL); | 2217 ValidateIntegerPref(app->id(), "location", Manifest::INTERNAL); |
2217 | 2218 |
2218 // Another app with non-overlapping extent. Should succeed. | 2219 // Another app with non-overlapping extent. Should succeed. |
2219 PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); | 2220 PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); |
2220 ValidatePrefKeyCount(++pref_count); | 2221 ValidatePrefKeyCount(++pref_count); |
2221 | 2222 |
2222 // A third app whose extent overlaps the first. Should fail. | 2223 // A third app whose extent overlaps the first. Should fail. |
2223 PackAndInstallCRX(data_dir_.AppendASCII("app3"), INSTALL_FAILED); | 2224 PackAndInstallCRX(data_dir_.AppendASCII("app3"), INSTALL_FAILED); |
2224 ValidatePrefKeyCount(pref_count); | 2225 ValidatePrefKeyCount(pref_count); |
2225 } | 2226 } |
2226 | 2227 |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2402 // Test that when an extension version is reinstalled, nothing happens. | 2403 // Test that when an extension version is reinstalled, nothing happens. |
2403 TEST_F(ExtensionServiceTest, Reinstall) { | 2404 TEST_F(ExtensionServiceTest, Reinstall) { |
2404 InitializeEmptyExtensionService(); | 2405 InitializeEmptyExtensionService(); |
2405 | 2406 |
2406 // A simple extension that should install without error. | 2407 // A simple extension that should install without error. |
2407 FilePath path = data_dir_.AppendASCII("good.crx"); | 2408 FilePath path = data_dir_.AppendASCII("good.crx"); |
2408 InstallCRX(path, INSTALL_NEW); | 2409 InstallCRX(path, INSTALL_NEW); |
2409 | 2410 |
2410 ValidatePrefKeyCount(1); | 2411 ValidatePrefKeyCount(1); |
2411 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 2412 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
2412 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 2413 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
2413 | 2414 |
2414 // Reinstall the same version, it should overwrite the previous one. | 2415 // Reinstall the same version, it should overwrite the previous one. |
2415 InstallCRX(path, INSTALL_UPDATED); | 2416 InstallCRX(path, INSTALL_UPDATED); |
2416 | 2417 |
2417 ValidatePrefKeyCount(1); | 2418 ValidatePrefKeyCount(1); |
2418 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 2419 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
2419 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 2420 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
2420 } | 2421 } |
2421 | 2422 |
2422 // Test that we can determine if extensions came from the | 2423 // Test that we can determine if extensions came from the |
2423 // Chrome web store. | 2424 // Chrome web store. |
2424 TEST_F(ExtensionServiceTest, FromWebStore) { | 2425 TEST_F(ExtensionServiceTest, FromWebStore) { |
2425 InitializeEmptyExtensionService(); | 2426 InitializeEmptyExtensionService(); |
2426 | 2427 |
2427 // A simple extension that should install without error. | 2428 // A simple extension that should install without error. |
2428 FilePath path = data_dir_.AppendASCII("good.crx"); | 2429 FilePath path = data_dir_.AppendASCII("good.crx"); |
2429 // Not from web store. | 2430 // Not from web store. |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2591 good2->id())); | 2592 good2->id())); |
2592 } | 2593 } |
2593 | 2594 |
2594 // Tests that updating preserves extension location. | 2595 // Tests that updating preserves extension location. |
2595 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { | 2596 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { |
2596 InitializeEmptyExtensionService(); | 2597 InitializeEmptyExtensionService(); |
2597 | 2598 |
2598 FilePath path = data_dir_.AppendASCII("good.crx"); | 2599 FilePath path = data_dir_.AppendASCII("good.crx"); |
2599 | 2600 |
2600 const Extension* good = | 2601 const Extension* good = |
2601 InstallCRXWithLocation(path, Extension::EXTERNAL_PREF, INSTALL_NEW); | 2602 InstallCRXWithLocation(path, Manifest::EXTERNAL_PREF, INSTALL_NEW); |
2602 | 2603 |
2603 ASSERT_EQ("1.0.0.0", good->VersionString()); | 2604 ASSERT_EQ("1.0.0.0", good->VersionString()); |
2604 ASSERT_EQ(good_crx, good->id()); | 2605 ASSERT_EQ(good_crx, good->id()); |
2605 | 2606 |
2606 path = data_dir_.AppendASCII("good2.crx"); | 2607 path = data_dir_.AppendASCII("good2.crx"); |
2607 UpdateExtension(good_crx, path, ENABLED); | 2608 UpdateExtension(good_crx, path, ENABLED); |
2608 const Extension* good2 = service_->GetExtensionById(good_crx, false); | 2609 const Extension* good2 = service_->GetExtensionById(good_crx, false); |
2609 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); | 2610 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); |
2610 EXPECT_EQ(good2->location(), Extension::EXTERNAL_PREF); | 2611 EXPECT_EQ(good2->location(), Manifest::EXTERNAL_PREF); |
2611 } | 2612 } |
2612 | 2613 |
2613 // Makes sure that LOAD extension types can downgrade. | 2614 // Makes sure that LOAD extension types can downgrade. |
2614 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { | 2615 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { |
2615 InitializeEmptyExtensionService(); | 2616 InitializeEmptyExtensionService(); |
2616 | 2617 |
2617 base::ScopedTempDir temp; | 2618 base::ScopedTempDir temp; |
2618 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2619 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2619 | 2620 |
2620 // We'll write the extension manifest dynamically to a temporary path | 2621 // We'll write the extension manifest dynamically to a temporary path |
2621 // to make it easier to change the version number. | 2622 // to make it easier to change the version number. |
2622 FilePath extension_path = temp.path(); | 2623 FilePath extension_path = temp.path(); |
2623 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename); | 2624 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename); |
2624 ASSERT_FALSE(file_util::PathExists(manifest_path)); | 2625 ASSERT_FALSE(file_util::PathExists(manifest_path)); |
2625 | 2626 |
2626 // Start with version 2.0. | 2627 // Start with version 2.0. |
2627 DictionaryValue manifest; | 2628 DictionaryValue manifest; |
2628 manifest.SetString("version", "2.0"); | 2629 manifest.SetString("version", "2.0"); |
2629 manifest.SetString("name", "LOAD Downgrade Test"); | 2630 manifest.SetString("name", "LOAD Downgrade Test"); |
2630 manifest.SetInteger("manifest_version", 2); | 2631 manifest.SetInteger("manifest_version", 2); |
2631 | 2632 |
2632 JSONFileValueSerializer serializer(manifest_path); | 2633 JSONFileValueSerializer serializer(manifest_path); |
2633 ASSERT_TRUE(serializer.Serialize(manifest)); | 2634 ASSERT_TRUE(serializer.Serialize(manifest)); |
2634 | 2635 |
2635 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2636 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); |
2636 loop_.RunUntilIdle(); | 2637 loop_.RunUntilIdle(); |
2637 | 2638 |
2638 EXPECT_EQ(0u, GetErrors().size()); | 2639 EXPECT_EQ(0u, GetErrors().size()); |
2639 ASSERT_EQ(1u, loaded_.size()); | 2640 ASSERT_EQ(1u, loaded_.size()); |
2640 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); | 2641 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location()); |
2641 EXPECT_EQ(1u, service_->extensions()->size()); | 2642 EXPECT_EQ(1u, service_->extensions()->size()); |
2642 EXPECT_EQ("2.0", loaded_[0]->VersionString()); | 2643 EXPECT_EQ("2.0", loaded_[0]->VersionString()); |
2643 | 2644 |
2644 // Now set the version number to 1.0, reload the extensions and verify that | 2645 // Now set the version number to 1.0, reload the extensions and verify that |
2645 // the downgrade was accepted. | 2646 // the downgrade was accepted. |
2646 manifest.SetString("version", "1.0"); | 2647 manifest.SetString("version", "1.0"); |
2647 ASSERT_TRUE(serializer.Serialize(manifest)); | 2648 ASSERT_TRUE(serializer.Serialize(manifest)); |
2648 | 2649 |
2649 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2650 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); |
2650 loop_.RunUntilIdle(); | 2651 loop_.RunUntilIdle(); |
2651 | 2652 |
2652 EXPECT_EQ(0u, GetErrors().size()); | 2653 EXPECT_EQ(0u, GetErrors().size()); |
2653 ASSERT_EQ(1u, loaded_.size()); | 2654 ASSERT_EQ(1u, loaded_.size()); |
2654 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); | 2655 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location()); |
2655 EXPECT_EQ(1u, service_->extensions()->size()); | 2656 EXPECT_EQ(1u, service_->extensions()->size()); |
2656 EXPECT_EQ("1.0", loaded_[0]->VersionString()); | 2657 EXPECT_EQ("1.0", loaded_[0]->VersionString()); |
2657 } | 2658 } |
2658 | 2659 |
2659 #if !defined(OS_CHROMEOS) | 2660 #if !defined(OS_CHROMEOS) |
2660 // LOAD extensions with plugins require approval. | 2661 // LOAD extensions with plugins require approval. |
2661 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { | 2662 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { |
2662 FilePath extension_with_plugin_path = data_dir_ | 2663 FilePath extension_with_plugin_path = data_dir_ |
2663 .AppendASCII("good") | 2664 .AppendASCII("good") |
2664 .AppendASCII("Extensions") | 2665 .AppendASCII("Extensions") |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2732 loop_.RunUntilIdle(); | 2733 loop_.RunUntilIdle(); |
2733 EXPECT_EQ(1u, loaded_.size()); | 2734 EXPECT_EQ(1u, loaded_.size()); |
2734 EXPECT_EQ(2u, service_->extensions()->size()); | 2735 EXPECT_EQ(2u, service_->extensions()->size()); |
2735 EXPECT_EQ(0u, service_->disabled_extensions()->size()); | 2736 EXPECT_EQ(0u, service_->disabled_extensions()->size()); |
2736 } | 2737 } |
2737 #endif | 2738 #endif |
2738 | 2739 |
2739 namespace { | 2740 namespace { |
2740 | 2741 |
2741 bool IsExtension(const Extension& extension) { | 2742 bool IsExtension(const Extension& extension) { |
2742 return extension.GetType() == Extension::TYPE_EXTENSION; | 2743 return extension.GetType() == Manifest::TYPE_EXTENSION; |
2743 } | 2744 } |
2744 | 2745 |
2745 } // namespace | 2746 } // namespace |
2746 | 2747 |
2747 // Test adding a pending extension. | 2748 // Test adding a pending extension. |
2748 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { | 2749 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { |
2749 InitializeEmptyExtensionService(); | 2750 InitializeEmptyExtensionService(); |
2750 | 2751 |
2751 const std::string kFakeId(all_zero); | 2752 const std::string kFakeId(all_zero); |
2752 const GURL kFakeUpdateURL("http:://fake.update/url"); | 2753 const GURL kFakeUpdateURL("http:://fake.update/url"); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2822 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx | 2823 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx |
2823 #else | 2824 #else |
2824 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx | 2825 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx |
2825 #endif | 2826 #endif |
2826 // Test updating a pending CRX as if the source is an external extension | 2827 // Test updating a pending CRX as if the source is an external extension |
2827 // with an update URL. In this case we don't know if the CRX is a theme | 2828 // with an update URL. In this case we don't know if the CRX is a theme |
2828 // or not. | 2829 // or not. |
2829 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) { | 2830 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) { |
2830 InitializeEmptyExtensionService(); | 2831 InitializeEmptyExtensionService(); |
2831 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 2832 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
2832 theme_crx, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD)); | 2833 theme_crx, GURL(), Manifest::EXTERNAL_PREF_DOWNLOAD)); |
2833 | 2834 |
2834 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2835 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); |
2835 | 2836 |
2836 FilePath path = data_dir_.AppendASCII("theme.crx"); | 2837 FilePath path = data_dir_.AppendASCII("theme.crx"); |
2837 UpdateExtension(theme_crx, path, ENABLED); | 2838 UpdateExtension(theme_crx, path, ENABLED); |
2838 | 2839 |
2839 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2840 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); |
2840 | 2841 |
2841 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2842 const Extension* extension = service_->GetExtensionById(theme_crx, true); |
2842 ASSERT_TRUE(extension); | 2843 ASSERT_TRUE(extension); |
(...skipping 16 matching lines...) Expand all Loading... |
2859 kGoodInstallSilently)); | 2860 kGoodInstallSilently)); |
2860 | 2861 |
2861 // Check that there is a pending crx, with is_from_sync set to true. | 2862 // Check that there is a pending crx, with is_from_sync set to true. |
2862 const extensions::PendingExtensionInfo* pending_extension_info; | 2863 const extensions::PendingExtensionInfo* pending_extension_info; |
2863 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 2864 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> |
2864 GetById(kGoodId))); | 2865 GetById(kGoodId))); |
2865 EXPECT_TRUE(pending_extension_info->is_from_sync()); | 2866 EXPECT_TRUE(pending_extension_info->is_from_sync()); |
2866 | 2867 |
2867 // Add a crx to be updated, with the same ID, from a non-sync source. | 2868 // Add a crx to be updated, with the same ID, from a non-sync source. |
2868 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 2869 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
2869 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_PREF_DOWNLOAD)); | 2870 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_PREF_DOWNLOAD)); |
2870 | 2871 |
2871 // Check that there is a pending crx, with is_from_sync set to false. | 2872 // Check that there is a pending crx, with is_from_sync set to false. |
2872 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 2873 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> |
2873 GetById(kGoodId))); | 2874 GetById(kGoodId))); |
2874 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 2875 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
2875 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, | 2876 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
2876 pending_extension_info->install_source()); | 2877 pending_extension_info->install_source()); |
2877 | 2878 |
2878 // Add a crx to be installed from the update mechanism. | 2879 // Add a crx to be installed from the update mechanism. |
2879 EXPECT_FALSE(service_->pending_extension_manager()->AddFromSync( | 2880 EXPECT_FALSE(service_->pending_extension_manager()->AddFromSync( |
2880 kGoodId, GURL(kGoodUpdateURL), &IsExtension, | 2881 kGoodId, GURL(kGoodUpdateURL), &IsExtension, |
2881 kGoodInstallSilently)); | 2882 kGoodInstallSilently)); |
2882 | 2883 |
2883 // Check that the external, non-sync update was not overridden. | 2884 // Check that the external, non-sync update was not overridden. |
2884 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 2885 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> |
2885 GetById(kGoodId))); | 2886 GetById(kGoodId))); |
2886 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 2887 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
2887 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, | 2888 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
2888 pending_extension_info->install_source()); | 2889 pending_extension_info->install_source()); |
2889 } | 2890 } |
2890 | 2891 |
2891 // Updating a theme should fail if the updater is explicitly told that | 2892 // Updating a theme should fail if the updater is explicitly told that |
2892 // the CRX is not a theme. | 2893 // the CRX is not a theme. |
2893 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { | 2894 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { |
2894 InitializeEmptyExtensionService(); | 2895 InitializeEmptyExtensionService(); |
2895 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync( | 2896 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync( |
2896 theme_crx, GURL(), &IsExtension, true)); | 2897 theme_crx, GURL(), &IsExtension, true)); |
2897 | 2898 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2948 FilePath path = data_dir_.AppendASCII("good.crx"); | 2949 FilePath path = data_dir_.AppendASCII("good.crx"); |
2949 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2950 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2950 ASSERT_EQ(1u, service_->extensions()->size()); | 2951 ASSERT_EQ(1u, service_->extensions()->size()); |
2951 | 2952 |
2952 EXPECT_FALSE(good->is_theme()); | 2953 EXPECT_FALSE(good->is_theme()); |
2953 | 2954 |
2954 // Use AddExtensionImpl() as AddFrom*() would balk. | 2955 // Use AddExtensionImpl() as AddFrom*() would balk. |
2955 service_->pending_extension_manager()->AddExtensionImpl( | 2956 service_->pending_extension_manager()->AddExtensionImpl( |
2956 good->id(), extensions::ManifestURL::GetUpdateURL(good), | 2957 good->id(), extensions::ManifestURL::GetUpdateURL(good), |
2957 Version(), &IsExtension, kGoodIsFromSync, | 2958 Version(), &IsExtension, kGoodIsFromSync, |
2958 kGoodInstallSilently, Extension::INTERNAL); | 2959 kGoodInstallSilently, Manifest::INTERNAL); |
2959 UpdateExtension(good->id(), path, ENABLED); | 2960 UpdateExtension(good->id(), path, ENABLED); |
2960 | 2961 |
2961 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 2962 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); |
2962 } | 2963 } |
2963 | 2964 |
2964 // Test pref settings for blacklist and unblacklist extensions. | 2965 // Test pref settings for blacklist and unblacklist extensions. |
2965 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { | 2966 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { |
2966 InitializeEmptyExtensionService(); | 2967 InitializeEmptyExtensionService(); |
2967 std::vector<std::string> blacklist; | 2968 std::vector<std::string> blacklist; |
2968 blacklist.push_back(good0); | 2969 blacklist.push_back(good0); |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3227 // Mark good.crx for force-installation. | 3228 // Mark good.crx for force-installation. |
3228 DictionaryPrefUpdate forcelist_update(profile_->GetPrefs(), | 3229 DictionaryPrefUpdate forcelist_update(profile_->GetPrefs(), |
3229 prefs::kExtensionInstallForceList); | 3230 prefs::kExtensionInstallForceList); |
3230 extensions::ExternalPolicyLoader::AddExtension( | 3231 extensions::ExternalPolicyLoader::AddExtension( |
3231 forcelist_update.Get(), good_crx, "http://example.com/update_url"); | 3232 forcelist_update.Get(), good_crx, "http://example.com/update_url"); |
3232 } | 3233 } |
3233 | 3234 |
3234 // Have policy force-install an extension. | 3235 // Have policy force-install an extension. |
3235 MockExtensionProvider* provider = | 3236 MockExtensionProvider* provider = |
3236 new MockExtensionProvider(service_, | 3237 new MockExtensionProvider(service_, |
3237 Extension::EXTERNAL_POLICY_DOWNLOAD); | 3238 Manifest::EXTERNAL_POLICY_DOWNLOAD); |
3238 AddMockExternalProvider(provider); | 3239 AddMockExternalProvider(provider); |
3239 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 3240 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
3240 data_dir_.AppendASCII("good.crx")); | 3241 data_dir_.AppendASCII("good.crx")); |
3241 | 3242 |
3242 // Reloading extensions should find our externally registered extension | 3243 // Reloading extensions should find our externally registered extension |
3243 // and install it. | 3244 // and install it. |
3244 service_->CheckForExternalUpdates(); | 3245 service_->CheckForExternalUpdates(); |
3245 loop_.RunUntilIdle(); | 3246 loop_.RunUntilIdle(); |
3246 | 3247 |
3247 // Extension should be installed despite blacklist. | 3248 // Extension should be installed despite blacklist. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3282 // Create a fake extension to be loaded as though it were read from prefs. | 3283 // Create a fake extension to be loaded as though it were read from prefs. |
3283 FilePath path = data_dir_.AppendASCII("management") | 3284 FilePath path = data_dir_.AppendASCII("management") |
3284 .AppendASCII("simple_extension"); | 3285 .AppendASCII("simple_extension"); |
3285 DictionaryValue manifest; | 3286 DictionaryValue manifest; |
3286 manifest.SetString(keys::kName, "simple_extension"); | 3287 manifest.SetString(keys::kName, "simple_extension"); |
3287 manifest.SetString(keys::kVersion, "1"); | 3288 manifest.SetString(keys::kVersion, "1"); |
3288 // LOAD is for extensions loaded from the command line. We use it here, even | 3289 // LOAD is for extensions loaded from the command line. We use it here, even |
3289 // though we're testing loading from prefs, so that we don't need to provide | 3290 // though we're testing loading from prefs, so that we don't need to provide |
3290 // an extension key. | 3291 // an extension key. |
3291 extensions::ExtensionInfo extension_info(&manifest, "", path, | 3292 extensions::ExtensionInfo extension_info(&manifest, "", path, |
3292 Extension::LOAD); | 3293 Manifest::LOAD); |
3293 | 3294 |
3294 // Ensure we can load it with no management policy in place. | 3295 // Ensure we can load it with no management policy in place. |
3295 management_policy_->UnregisterAllProviders(); | 3296 management_policy_->UnregisterAllProviders(); |
3296 EXPECT_EQ(0u, service_->extensions()->size()); | 3297 EXPECT_EQ(0u, service_->extensions()->size()); |
3297 extensions::InstalledLoader(service_).Load(extension_info, false); | 3298 extensions::InstalledLoader(service_).Load(extension_info, false); |
3298 EXPECT_EQ(1u, service_->extensions()->size()); | 3299 EXPECT_EQ(1u, service_->extensions()->size()); |
3299 | 3300 |
3300 const Extension* extension = *(service_->extensions()->begin()); | 3301 const Extension* extension = *(service_->extensions()->begin()); |
3301 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); | 3302 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); |
3302 EXPECT_EQ(0u, service_->extensions()->size()); | 3303 EXPECT_EQ(0u, service_->extensions()->size()); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3396 EXPECT_EQ(0u, service_->disabled_extensions()->size()); | 3397 EXPECT_EQ(0u, service_->disabled_extensions()->size()); |
3397 } | 3398 } |
3398 | 3399 |
3399 TEST_F(ExtensionServiceTest, ExternalExtensionAutoAcknowledgement) { | 3400 TEST_F(ExtensionServiceTest, ExternalExtensionAutoAcknowledgement) { |
3400 InitializeEmptyExtensionService(); | 3401 InitializeEmptyExtensionService(); |
3401 set_extensions_enabled(true); | 3402 set_extensions_enabled(true); |
3402 | 3403 |
3403 { | 3404 { |
3404 // Register and install an external extension. | 3405 // Register and install an external extension. |
3405 MockExtensionProvider* provider = | 3406 MockExtensionProvider* provider = |
3406 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 3407 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
3407 AddMockExternalProvider(provider); | 3408 AddMockExternalProvider(provider); |
3408 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 3409 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
3409 data_dir_.AppendASCII("good.crx")); | 3410 data_dir_.AppendASCII("good.crx")); |
3410 } | 3411 } |
3411 { | 3412 { |
3412 // Have policy force-install an extension. | 3413 // Have policy force-install an extension. |
3413 MockExtensionProvider* provider = | 3414 MockExtensionProvider* provider = |
3414 new MockExtensionProvider(service_, | 3415 new MockExtensionProvider(service_, |
3415 Extension::EXTERNAL_POLICY_DOWNLOAD); | 3416 Manifest::EXTERNAL_POLICY_DOWNLOAD); |
3416 AddMockExternalProvider(provider); | 3417 AddMockExternalProvider(provider); |
3417 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 3418 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
3418 data_dir_.AppendASCII("page_action.crx")); | 3419 data_dir_.AppendASCII("page_action.crx")); |
3419 } | 3420 } |
3420 | 3421 |
3421 // Providers are set up. Let them run. | 3422 // Providers are set up. Let them run. |
3422 service_->CheckForExternalUpdates(); | 3423 service_->CheckForExternalUpdates(); |
3423 loop_.RunUntilIdle(); | 3424 loop_.RunUntilIdle(); |
3424 | 3425 |
3425 ASSERT_EQ(2u, service_->extensions()->size()); | 3426 ASSERT_EQ(2u, service_->extensions()->size()); |
(...skipping 18 matching lines...) Expand all Loading... |
3444 " \"external_crx\": \"good.crx\"," | 3445 " \"external_crx\": \"good.crx\"," |
3445 " \"external_version\": \"1.0.0.0\"," | 3446 " \"external_version\": \"1.0.0.0\"," |
3446 " \"is_bookmark_app\": false" | 3447 " \"is_bookmark_app\": false" |
3447 " }" | 3448 " }" |
3448 "}"; | 3449 "}"; |
3449 default_apps::Provider* provider = | 3450 default_apps::Provider* provider = |
3450 new default_apps::Provider( | 3451 new default_apps::Provider( |
3451 profile_.get(), | 3452 profile_.get(), |
3452 service_, | 3453 service_, |
3453 new extensions::ExternalTestingLoader(json_data, data_dir_), | 3454 new extensions::ExternalTestingLoader(json_data, data_dir_), |
3454 Extension::INTERNAL, | 3455 Manifest::INTERNAL, |
3455 Extension::INVALID, | 3456 Manifest::INVALID_LOCATION, |
3456 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); | 3457 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); |
3457 | 3458 |
3458 AddMockExternalProvider(provider); | 3459 AddMockExternalProvider(provider); |
3459 } | 3460 } |
3460 | 3461 |
3461 ASSERT_EQ(0u, service_->extensions()->size()); | 3462 ASSERT_EQ(0u, service_->extensions()->size()); |
3462 service_->CheckForExternalUpdates(); | 3463 service_->CheckForExternalUpdates(); |
3463 loop_.RunUntilIdle(); | 3464 loop_.RunUntilIdle(); |
3464 | 3465 |
3465 ASSERT_EQ(1u, service_->extensions()->size()); | 3466 ASSERT_EQ(1u, service_->extensions()->size()); |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3967 | 3968 |
3968 FilePath ext1 = data_dir_ | 3969 FilePath ext1 = data_dir_ |
3969 .AppendASCII("good") | 3970 .AppendASCII("good") |
3970 .AppendASCII("Extensions") | 3971 .AppendASCII("Extensions") |
3971 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 3972 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
3972 .AppendASCII("1.0.0.0"); | 3973 .AppendASCII("1.0.0.0"); |
3973 extensions::UnpackedInstaller::Create(service_)->Load(ext1); | 3974 extensions::UnpackedInstaller::Create(service_)->Load(ext1); |
3974 loop_.RunUntilIdle(); | 3975 loop_.RunUntilIdle(); |
3975 EXPECT_EQ(0u, GetErrors().size()); | 3976 EXPECT_EQ(0u, GetErrors().size()); |
3976 ASSERT_EQ(1u, loaded_.size()); | 3977 ASSERT_EQ(1u, loaded_.size()); |
3977 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); | 3978 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location()); |
3978 EXPECT_EQ(1u, service_->extensions()->size()); | 3979 EXPECT_EQ(1u, service_->extensions()->size()); |
3979 | 3980 |
3980 ValidatePrefKeyCount(1); | 3981 ValidatePrefKeyCount(1); |
3981 | 3982 |
3982 FilePath no_manifest = data_dir_ | 3983 FilePath no_manifest = data_dir_ |
3983 .AppendASCII("bad") | 3984 .AppendASCII("bad") |
3984 // .AppendASCII("Extensions") | 3985 // .AppendASCII("Extensions") |
3985 .AppendASCII("cccccccccccccccccccccccccccccccc") | 3986 .AppendASCII("cccccccccccccccccccccccccccccccc") |
3986 .AppendASCII("1"); | 3987 .AppendASCII("1"); |
3987 extensions::UnpackedInstaller::Create(service_)->Load(no_manifest); | 3988 extensions::UnpackedInstaller::Create(service_)->Load(no_manifest); |
(...skipping 16 matching lines...) Expand all Loading... |
4004 // --load-extension. | 4005 // --load-extension. |
4005 TEST_F(ExtensionServiceTest, GenerateID) { | 4006 TEST_F(ExtensionServiceTest, GenerateID) { |
4006 InitializeEmptyExtensionService(); | 4007 InitializeEmptyExtensionService(); |
4007 | 4008 |
4008 FilePath no_id_ext = data_dir_.AppendASCII("no_id"); | 4009 FilePath no_id_ext = data_dir_.AppendASCII("no_id"); |
4009 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); | 4010 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); |
4010 loop_.RunUntilIdle(); | 4011 loop_.RunUntilIdle(); |
4011 EXPECT_EQ(0u, GetErrors().size()); | 4012 EXPECT_EQ(0u, GetErrors().size()); |
4012 ASSERT_EQ(1u, loaded_.size()); | 4013 ASSERT_EQ(1u, loaded_.size()); |
4013 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); | 4014 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); |
4014 EXPECT_EQ(loaded_[0]->location(), Extension::LOAD); | 4015 EXPECT_EQ(loaded_[0]->location(), Manifest::LOAD); |
4015 | 4016 |
4016 ValidatePrefKeyCount(1); | 4017 ValidatePrefKeyCount(1); |
4017 | 4018 |
4018 std::string previous_id = loaded_[0]->id(); | 4019 std::string previous_id = loaded_[0]->id(); |
4019 | 4020 |
4020 // If we reload the same path, we should get the same extension ID. | 4021 // If we reload the same path, we should get the same extension ID. |
4021 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); | 4022 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); |
4022 loop_.RunUntilIdle(); | 4023 loop_.RunUntilIdle(); |
4023 ASSERT_EQ(1u, loaded_.size()); | 4024 ASSERT_EQ(1u, loaded_.size()); |
4024 ASSERT_EQ(previous_id, loaded_[0]->id()); | 4025 ASSERT_EQ(previous_id, loaded_[0]->id()); |
4025 } | 4026 } |
4026 | 4027 |
4027 void ExtensionServiceTest::TestExternalProvider( | 4028 void ExtensionServiceTest::TestExternalProvider( |
4028 MockExtensionProvider* provider, Extension::Location location) { | 4029 MockExtensionProvider* provider, Manifest::Location location) { |
4029 // Verify that starting with no providers loads no extensions. | 4030 // Verify that starting with no providers loads no extensions. |
4030 service_->Init(); | 4031 service_->Init(); |
4031 ASSERT_EQ(0u, loaded_.size()); | 4032 ASSERT_EQ(0u, loaded_.size()); |
4032 | 4033 |
4033 provider->set_visit_count(0); | 4034 provider->set_visit_count(0); |
4034 | 4035 |
4035 // Register a test extension externally using the mock registry provider. | 4036 // Register a test extension externally using the mock registry provider. |
4036 FilePath source_path = data_dir_.AppendASCII("good.crx"); | 4037 FilePath source_path = data_dir_.AppendASCII("good.crx"); |
4037 | 4038 |
4038 // Add the extension. | 4039 // Add the extension. |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4158 | 4159 |
4159 // Tests the external installation feature | 4160 // Tests the external installation feature |
4160 #if defined(OS_WIN) | 4161 #if defined(OS_WIN) |
4161 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { | 4162 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { |
4162 // This should all work, even when normal extension installation is disabled. | 4163 // This should all work, even when normal extension installation is disabled. |
4163 InitializeEmptyExtensionService(); | 4164 InitializeEmptyExtensionService(); |
4164 set_extensions_enabled(false); | 4165 set_extensions_enabled(false); |
4165 | 4166 |
4166 // Now add providers. Extension system takes ownership of the objects. | 4167 // Now add providers. Extension system takes ownership of the objects. |
4167 MockExtensionProvider* reg_provider = | 4168 MockExtensionProvider* reg_provider = |
4168 new MockExtensionProvider(service_, Extension::EXTERNAL_REGISTRY); | 4169 new MockExtensionProvider(service_, Manifest::EXTERNAL_REGISTRY); |
4169 AddMockExternalProvider(reg_provider); | 4170 AddMockExternalProvider(reg_provider); |
4170 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); | 4171 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY); |
4171 } | 4172 } |
4172 #endif | 4173 #endif |
4173 | 4174 |
4174 TEST_F(ExtensionServiceTest, ExternalInstallPref) { | 4175 TEST_F(ExtensionServiceTest, ExternalInstallPref) { |
4175 InitializeEmptyExtensionService(); | 4176 InitializeEmptyExtensionService(); |
4176 | 4177 |
4177 // Now add providers. Extension system takes ownership of the objects. | 4178 // Now add providers. Extension system takes ownership of the objects. |
4178 MockExtensionProvider* pref_provider = | 4179 MockExtensionProvider* pref_provider = |
4179 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 4180 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
4180 | 4181 |
4181 AddMockExternalProvider(pref_provider); | 4182 AddMockExternalProvider(pref_provider); |
4182 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); | 4183 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF); |
4183 } | 4184 } |
4184 | 4185 |
4185 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { | 4186 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { |
4186 // This should all work, even when normal extension installation is disabled. | 4187 // This should all work, even when normal extension installation is disabled. |
4187 InitializeEmptyExtensionService(); | 4188 InitializeEmptyExtensionService(); |
4188 set_extensions_enabled(false); | 4189 set_extensions_enabled(false); |
4189 | 4190 |
4190 // TODO(skerner): The mock provider is not a good model of a provider | 4191 // TODO(skerner): The mock provider is not a good model of a provider |
4191 // that works with update URLs, because it adds file and version info. | 4192 // that works with update URLs, because it adds file and version info. |
4192 // Extend the mock to work with update URLs. This test checks the | 4193 // Extend the mock to work with update URLs. This test checks the |
4193 // behavior that is common to all external extension visitors. The | 4194 // behavior that is common to all external extension visitors. The |
4194 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 4195 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
4195 // what the visitor does results in an extension being downloaded and | 4196 // what the visitor does results in an extension being downloaded and |
4196 // installed. | 4197 // installed. |
4197 MockExtensionProvider* pref_provider = | 4198 MockExtensionProvider* pref_provider = |
4198 new MockExtensionProvider(service_, | 4199 new MockExtensionProvider(service_, |
4199 Extension::EXTERNAL_PREF_DOWNLOAD); | 4200 Manifest::EXTERNAL_PREF_DOWNLOAD); |
4200 AddMockExternalProvider(pref_provider); | 4201 AddMockExternalProvider(pref_provider); |
4201 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); | 4202 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD); |
4202 } | 4203 } |
4203 | 4204 |
4204 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { | 4205 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { |
4205 // This should all work, even when normal extension installation is disabled. | 4206 // This should all work, even when normal extension installation is disabled. |
4206 InitializeEmptyExtensionService(); | 4207 InitializeEmptyExtensionService(); |
4207 set_extensions_enabled(false); | 4208 set_extensions_enabled(false); |
4208 | 4209 |
4209 // TODO(skerner): The mock provider is not a good model of a provider | 4210 // TODO(skerner): The mock provider is not a good model of a provider |
4210 // that works with update URLs, because it adds file and version info. | 4211 // that works with update URLs, because it adds file and version info. |
4211 // Extend the mock to work with update URLs. This test checks the | 4212 // Extend the mock to work with update URLs. This test checks the |
4212 // behavior that is common to all external extension visitors. The | 4213 // behavior that is common to all external extension visitors. The |
4213 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 4214 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
4214 // what the visitor does results in an extension being downloaded and | 4215 // what the visitor does results in an extension being downloaded and |
4215 // installed. | 4216 // installed. |
4216 MockExtensionProvider* pref_provider = | 4217 MockExtensionProvider* pref_provider = |
4217 new MockExtensionProvider(service_, | 4218 new MockExtensionProvider(service_, |
4218 Extension::EXTERNAL_POLICY_DOWNLOAD); | 4219 Manifest::EXTERNAL_POLICY_DOWNLOAD); |
4219 AddMockExternalProvider(pref_provider); | 4220 AddMockExternalProvider(pref_provider); |
4220 TestExternalProvider(pref_provider, Extension::EXTERNAL_POLICY_DOWNLOAD); | 4221 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD); |
4221 } | 4222 } |
4222 | 4223 |
4223 // Tests that external extensions get uninstalled when the external extension | 4224 // Tests that external extensions get uninstalled when the external extension |
4224 // providers can't account for them. | 4225 // providers can't account for them. |
4225 TEST_F(ExtensionServiceTest, ExternalUninstall) { | 4226 TEST_F(ExtensionServiceTest, ExternalUninstall) { |
4226 // Start the extensions service with one external extension already installed. | 4227 // Start the extensions service with one external extension already installed. |
4227 FilePath source_install_dir = data_dir_ | 4228 FilePath source_install_dir = data_dir_ |
4228 .AppendASCII("good") | 4229 .AppendASCII("good") |
4229 .AppendASCII("Extensions"); | 4230 .AppendASCII("Extensions"); |
4230 FilePath pref_path = source_install_dir | 4231 FilePath pref_path = source_install_dir |
(...skipping 17 matching lines...) Expand all Loading... |
4248 ASSERT_EQ(0u, GetErrors().size()); | 4249 ASSERT_EQ(0u, GetErrors().size()); |
4249 ASSERT_EQ(0u, loaded_.size()); | 4250 ASSERT_EQ(0u, loaded_.size()); |
4250 } | 4251 } |
4251 | 4252 |
4252 // Test that running multiple update checks simultaneously does not | 4253 // Test that running multiple update checks simultaneously does not |
4253 // keep the update from succeeding. | 4254 // keep the update from succeeding. |
4254 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { | 4255 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { |
4255 InitializeEmptyExtensionService(); | 4256 InitializeEmptyExtensionService(); |
4256 | 4257 |
4257 MockExtensionProvider* provider = | 4258 MockExtensionProvider* provider = |
4258 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 4259 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
4259 AddMockExternalProvider(provider); | 4260 AddMockExternalProvider(provider); |
4260 | 4261 |
4261 // Verify that starting with no providers loads no extensions. | 4262 // Verify that starting with no providers loads no extensions. |
4262 service_->Init(); | 4263 service_->Init(); |
4263 ASSERT_EQ(0u, loaded_.size()); | 4264 ASSERT_EQ(0u, loaded_.size()); |
4264 | 4265 |
4265 // Start two checks for updates. | 4266 // Start two checks for updates. |
4266 provider->set_visit_count(0); | 4267 provider->set_visit_count(0); |
4267 service_->CheckForExternalUpdates(); | 4268 service_->CheckForExternalUpdates(); |
4268 service_->CheckForExternalUpdates(); | 4269 service_->CheckForExternalUpdates(); |
(...skipping 10 matching lines...) Expand all Loading... |
4279 | 4280 |
4280 // Two checks for external updates should find the extension, and install it | 4281 // Two checks for external updates should find the extension, and install it |
4281 // once. | 4282 // once. |
4282 provider->set_visit_count(0); | 4283 provider->set_visit_count(0); |
4283 service_->CheckForExternalUpdates(); | 4284 service_->CheckForExternalUpdates(); |
4284 service_->CheckForExternalUpdates(); | 4285 service_->CheckForExternalUpdates(); |
4285 loop_.RunUntilIdle(); | 4286 loop_.RunUntilIdle(); |
4286 EXPECT_EQ(2, provider->visit_count()); | 4287 EXPECT_EQ(2, provider->visit_count()); |
4287 ASSERT_EQ(0u, GetErrors().size()); | 4288 ASSERT_EQ(0u, GetErrors().size()); |
4288 ASSERT_EQ(1u, loaded_.size()); | 4289 ASSERT_EQ(1u, loaded_.size()); |
4289 ASSERT_EQ(Extension::EXTERNAL_PREF, loaded_[0]->location()); | 4290 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); |
4290 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 4291 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
4291 ValidatePrefKeyCount(1); | 4292 ValidatePrefKeyCount(1); |
4292 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4293 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4293 ValidateIntegerPref(good_crx, "location", Extension::EXTERNAL_PREF); | 4294 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF); |
4294 | 4295 |
4295 provider->RemoveExtension(good_crx); | 4296 provider->RemoveExtension(good_crx); |
4296 provider->set_visit_count(0); | 4297 provider->set_visit_count(0); |
4297 service_->CheckForExternalUpdates(); | 4298 service_->CheckForExternalUpdates(); |
4298 service_->CheckForExternalUpdates(); | 4299 service_->CheckForExternalUpdates(); |
4299 loop_.RunUntilIdle(); | 4300 loop_.RunUntilIdle(); |
4300 | 4301 |
4301 // Two calls should cause two checks for external extensions. | 4302 // Two calls should cause two checks for external extensions. |
4302 // Because the external source no longer includes good_crx, | 4303 // Because the external source no longer includes good_crx, |
4303 // good_crx will be uninstalled. So, expect that no extensions | 4304 // good_crx will be uninstalled. So, expect that no extensions |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4688 path.Append(Extension::kManifestFilename), &manifest)); | 4689 path.Append(Extension::kManifestFilename), &manifest)); |
4689 | 4690 |
4690 service_->component_loader()->Add(manifest, path); | 4691 service_->component_loader()->Add(manifest, path); |
4691 service_->Init(); | 4692 service_->Init(); |
4692 | 4693 |
4693 // Note that we do not pump messages -- the extension should be loaded | 4694 // Note that we do not pump messages -- the extension should be loaded |
4694 // immediately. | 4695 // immediately. |
4695 | 4696 |
4696 EXPECT_EQ(0u, GetErrors().size()); | 4697 EXPECT_EQ(0u, GetErrors().size()); |
4697 ASSERT_EQ(1u, loaded_.size()); | 4698 ASSERT_EQ(1u, loaded_.size()); |
4698 EXPECT_EQ(Extension::COMPONENT, loaded_[0]->location()); | 4699 EXPECT_EQ(Manifest::COMPONENT, loaded_[0]->location()); |
4699 EXPECT_EQ(1u, service_->extensions()->size()); | 4700 EXPECT_EQ(1u, service_->extensions()->size()); |
4700 | 4701 |
4701 // Component extensions get a prefs entry on first install. | 4702 // Component extensions get a prefs entry on first install. |
4702 ValidatePrefKeyCount(1); | 4703 ValidatePrefKeyCount(1); |
4703 | 4704 |
4704 // Reload all extensions, and make sure it comes back. | 4705 // Reload all extensions, and make sure it comes back. |
4705 std::string extension_id = (*service_->extensions()->begin())->id(); | 4706 std::string extension_id = (*service_->extensions()->begin())->id(); |
4706 loaded_.clear(); | 4707 loaded_.clear(); |
4707 service_->ReloadExtensions(); | 4708 service_->ReloadExtensions(); |
4708 ASSERT_EQ(1u, service_->extensions()->size()); | 4709 ASSERT_EQ(1u, service_->extensions()->size()); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4828 ASSERT_EQ(list.size(), 1U); | 4829 ASSERT_EQ(list.size(), 1U); |
4829 extensions::ExtensionSyncData data(list[0]); | 4830 extensions::ExtensionSyncData data(list[0]); |
4830 EXPECT_TRUE(data.enabled()); | 4831 EXPECT_TRUE(data.enabled()); |
4831 EXPECT_TRUE(data.incognito_enabled()); | 4832 EXPECT_TRUE(data.incognito_enabled()); |
4832 } | 4833 } |
4833 } | 4834 } |
4834 | 4835 |
4835 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { | 4836 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { |
4836 InitializeEmptyExtensionService(); | 4837 InitializeEmptyExtensionService(); |
4837 InstallCRXWithLocation(data_dir_.AppendASCII("good.crx"), | 4838 InstallCRXWithLocation(data_dir_.AppendASCII("good.crx"), |
4838 Extension::EXTERNAL_PREF, INSTALL_NEW); | 4839 Manifest::EXTERNAL_PREF, INSTALL_NEW); |
4839 const Extension* extension = service_->GetInstalledExtension(good_crx); | 4840 const Extension* extension = service_->GetInstalledExtension(good_crx); |
4840 ASSERT_TRUE(extension); | 4841 ASSERT_TRUE(extension); |
4841 | 4842 |
4842 TestSyncProcessorStub processor; | 4843 TestSyncProcessorStub processor; |
4843 service_->MergeDataAndStartSyncing( | 4844 service_->MergeDataAndStartSyncing( |
4844 syncer::EXTENSIONS, syncer::SyncDataList(), | 4845 syncer::EXTENSIONS, syncer::SyncDataList(), |
4845 scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub), | 4846 scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub), |
4846 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 4847 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
4847 | 4848 |
4848 UninstallExtension(good_crx, false); | 4849 UninstallExtension(good_crx, false); |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5264 EXPECT_TRUE(service_->updater()->WillCheckSoon()); | 5265 EXPECT_TRUE(service_->updater()->WillCheckSoon()); |
5265 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 5266 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
5266 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx)); | 5267 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx)); |
5267 | 5268 |
5268 const extensions::PendingExtensionInfo* info; | 5269 const extensions::PendingExtensionInfo* info; |
5269 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 5270 EXPECT_TRUE((info = service_->pending_extension_manager()-> |
5270 GetById(good_crx))); | 5271 GetById(good_crx))); |
5271 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); | 5272 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); |
5272 EXPECT_TRUE(info->is_from_sync()); | 5273 EXPECT_TRUE(info->is_from_sync()); |
5273 EXPECT_TRUE(info->install_silently()); | 5274 EXPECT_TRUE(info->install_silently()); |
5274 EXPECT_EQ(Extension::INTERNAL, info->install_source()); | 5275 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); |
5275 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. | 5276 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
5276 } | 5277 } |
5277 | 5278 |
5278 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) { | 5279 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) { |
5279 InitializeEmptyExtensionService(); | 5280 InitializeEmptyExtensionService(); |
5280 | 5281 |
5281 FilePath path = data_dir_.AppendASCII("good.crx"); | 5282 FilePath path = data_dir_.AppendASCII("good.crx"); |
5282 InstallCRX(path, INSTALL_NEW); | 5283 InstallCRX(path, INSTALL_NEW); |
5283 ValidatePrefKeyCount(1u); | 5284 ValidatePrefKeyCount(1u); |
5284 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 5285 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
5285 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 5286 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
5286 | 5287 |
5287 extensions::PendingExtensionManager* pending = | 5288 extensions::PendingExtensionManager* pending = |
5288 service_->pending_extension_manager(); | 5289 service_->pending_extension_manager(); |
5289 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5290 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5290 | 5291 |
5291 // Skip install when the location is the same. | 5292 // Skip install when the location is the same. |
5292 EXPECT_FALSE( | 5293 EXPECT_FALSE( |
5293 service_->OnExternalExtensionUpdateUrlFound( | 5294 service_->OnExternalExtensionUpdateUrlFound( |
5294 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); | 5295 kGoodId, GURL(kGoodUpdateURL), Manifest::INTERNAL)); |
5295 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5296 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5296 | 5297 |
5297 // Install when the location has higher priority. | 5298 // Install when the location has higher priority. |
5298 EXPECT_TRUE( | 5299 EXPECT_TRUE( |
5299 service_->OnExternalExtensionUpdateUrlFound( | 5300 service_->OnExternalExtensionUpdateUrlFound( |
5300 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_POLICY_DOWNLOAD)); | 5301 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_POLICY_DOWNLOAD)); |
5301 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5302 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5302 | 5303 |
5303 // Try the low priority again. Should be rejected. | 5304 // Try the low priority again. Should be rejected. |
5304 EXPECT_FALSE( | 5305 EXPECT_FALSE( |
5305 service_->OnExternalExtensionUpdateUrlFound( | 5306 service_->OnExternalExtensionUpdateUrlFound( |
5306 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_PREF_DOWNLOAD)); | 5307 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_PREF_DOWNLOAD)); |
5307 // The existing record should still be present in the pending extension | 5308 // The existing record should still be present in the pending extension |
5308 // manager. | 5309 // manager. |
5309 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5310 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5310 | 5311 |
5311 pending->Remove(kGoodId); | 5312 pending->Remove(kGoodId); |
5312 | 5313 |
5313 // Skip install when the location has the same priority as the installed | 5314 // Skip install when the location has the same priority as the installed |
5314 // location. | 5315 // location. |
5315 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( | 5316 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( |
5316 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); | 5317 kGoodId, GURL(kGoodUpdateURL), Manifest::INTERNAL)); |
5317 | 5318 |
5318 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5319 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5319 } | 5320 } |
5320 | 5321 |
5321 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { | 5322 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { |
5322 Version older_version("0.1.0.0"); | 5323 Version older_version("0.1.0.0"); |
5323 Version newer_version("2.0.0.0"); | 5324 Version newer_version("2.0.0.0"); |
5324 | 5325 |
5325 // We don't want the extension to be installed. A path that doesn't | 5326 // We don't want the extension to be installed. A path that doesn't |
5326 // point to a valid CRX ensures this. | 5327 // point to a valid CRX ensures this. |
5327 const FilePath kInvalidPathToCrx = FilePath(); | 5328 const FilePath kInvalidPathToCrx = FilePath(); |
5328 | 5329 |
5329 const int kCreationFlags = 0; | 5330 const int kCreationFlags = 0; |
5330 const bool kDontMarkAcknowledged = false; | 5331 const bool kDontMarkAcknowledged = false; |
5331 | 5332 |
5332 InitializeEmptyExtensionService(); | 5333 InitializeEmptyExtensionService(); |
5333 | 5334 |
5334 // The test below uses install source constants to test that | 5335 // The test below uses install source constants to test that |
5335 // priority is enforced. It assumes a specific ranking of install | 5336 // priority is enforced. It assumes a specific ranking of install |
5336 // sources: Registry (EXTERNAL_REGISTRY) overrides external pref | 5337 // sources: Registry (EXTERNAL_REGISTRY) overrides external pref |
5337 // (EXTERNAL_PREF), and external pref overrides user install (INTERNAL). | 5338 // (EXTERNAL_PREF), and external pref overrides user install (INTERNAL). |
5338 // The following assertions verify these assumptions: | 5339 // The following assertions verify these assumptions: |
5339 ASSERT_EQ(Extension::EXTERNAL_REGISTRY, | 5340 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY, |
5340 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_REGISTRY, | 5341 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, |
5341 Extension::EXTERNAL_PREF)); | 5342 Manifest::EXTERNAL_PREF)); |
5342 ASSERT_EQ(Extension::EXTERNAL_REGISTRY, | 5343 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY, |
5343 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_REGISTRY, | 5344 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, |
5344 Extension::INTERNAL)); | 5345 Manifest::INTERNAL)); |
5345 ASSERT_EQ(Extension::EXTERNAL_PREF, | 5346 ASSERT_EQ(Manifest::EXTERNAL_PREF, |
5346 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_PREF, | 5347 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF, |
5347 Extension::INTERNAL)); | 5348 Manifest::INTERNAL)); |
5348 | 5349 |
5349 extensions::PendingExtensionManager* pending = | 5350 extensions::PendingExtensionManager* pending = |
5350 service_->pending_extension_manager(); | 5351 service_->pending_extension_manager(); |
5351 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5352 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5352 | 5353 |
5353 // Simulate an external source adding the extension as INTERNAL. | 5354 // Simulate an external source adding the extension as INTERNAL. |
5354 EXPECT_TRUE( | 5355 EXPECT_TRUE( |
5355 service_->OnExternalExtensionFileFound( | 5356 service_->OnExternalExtensionFileFound( |
5356 kGoodId, &older_version, kInvalidPathToCrx, | 5357 kGoodId, &older_version, kInvalidPathToCrx, |
5357 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5358 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5358 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5359 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5359 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 5360 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
5360 | 5361 |
5361 // Simulate an external source adding the extension as EXTERNAL_PREF. | 5362 // Simulate an external source adding the extension as EXTERNAL_PREF. |
5362 EXPECT_TRUE( | 5363 EXPECT_TRUE( |
5363 service_->OnExternalExtensionFileFound( | 5364 service_->OnExternalExtensionFileFound( |
5364 kGoodId, &older_version, kInvalidPathToCrx, | 5365 kGoodId, &older_version, kInvalidPathToCrx, |
5365 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5366 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5366 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5367 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5367 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 5368 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
5368 | 5369 |
5369 // Simulate an external source adding as EXTERNAL_PREF again. | 5370 // Simulate an external source adding as EXTERNAL_PREF again. |
5370 // This is rejected because the version and the location are the same as | 5371 // This is rejected because the version and the location are the same as |
5371 // the previous installation, which is still pending. | 5372 // the previous installation, which is still pending. |
5372 EXPECT_FALSE( | 5373 EXPECT_FALSE( |
5373 service_->OnExternalExtensionFileFound( | 5374 service_->OnExternalExtensionFileFound( |
5374 kGoodId, &older_version, kInvalidPathToCrx, | 5375 kGoodId, &older_version, kInvalidPathToCrx, |
5375 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5376 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5376 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5377 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5377 | 5378 |
5378 // Try INTERNAL again. Should fail. | 5379 // Try INTERNAL again. Should fail. |
5379 EXPECT_FALSE( | 5380 EXPECT_FALSE( |
5380 service_->OnExternalExtensionFileFound( | 5381 service_->OnExternalExtensionFileFound( |
5381 kGoodId, &older_version, kInvalidPathToCrx, | 5382 kGoodId, &older_version, kInvalidPathToCrx, |
5382 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5383 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5383 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5384 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5384 | 5385 |
5385 // Now the registry adds the extension. | 5386 // Now the registry adds the extension. |
5386 EXPECT_TRUE( | 5387 EXPECT_TRUE( |
5387 service_->OnExternalExtensionFileFound( | 5388 service_->OnExternalExtensionFileFound( |
5388 kGoodId, &older_version, kInvalidPathToCrx, | 5389 kGoodId, &older_version, kInvalidPathToCrx, |
5389 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 5390 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); |
5390 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5391 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5391 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 5392 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
5392 | 5393 |
5393 // Registry outranks both external pref and internal, so both fail. | 5394 // Registry outranks both external pref and internal, so both fail. |
5394 EXPECT_FALSE( | 5395 EXPECT_FALSE( |
5395 service_->OnExternalExtensionFileFound( | 5396 service_->OnExternalExtensionFileFound( |
5396 kGoodId, &older_version, kInvalidPathToCrx, | 5397 kGoodId, &older_version, kInvalidPathToCrx, |
5397 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5398 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5398 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5399 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5399 | 5400 |
5400 EXPECT_FALSE( | 5401 EXPECT_FALSE( |
5401 service_->OnExternalExtensionFileFound( | 5402 service_->OnExternalExtensionFileFound( |
5402 kGoodId, &older_version, kInvalidPathToCrx, | 5403 kGoodId, &older_version, kInvalidPathToCrx, |
5403 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5404 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5404 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5405 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5405 | 5406 |
5406 pending->Remove(kGoodId); | 5407 pending->Remove(kGoodId); |
5407 | 5408 |
5408 // Install the extension. | 5409 // Install the extension. |
5409 FilePath path = data_dir_.AppendASCII("good.crx"); | 5410 FilePath path = data_dir_.AppendASCII("good.crx"); |
5410 const Extension* ext = InstallCRX(path, INSTALL_NEW); | 5411 const Extension* ext = InstallCRX(path, INSTALL_NEW); |
5411 ValidatePrefKeyCount(1u); | 5412 ValidatePrefKeyCount(1u); |
5412 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 5413 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
5413 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 5414 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
5414 | 5415 |
5415 // Now test the logic of OnExternalExtensionFileFound() when the extension | 5416 // Now test the logic of OnExternalExtensionFileFound() when the extension |
5416 // being added is already installed. | 5417 // being added is already installed. |
5417 | 5418 |
5418 // Tests assume |older_version| is less than the installed version, and | 5419 // Tests assume |older_version| is less than the installed version, and |
5419 // |newer_version| is greater. Verify this: | 5420 // |newer_version| is greater. Verify this: |
5420 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); | 5421 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); |
5421 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); | 5422 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); |
5422 | 5423 |
5423 // An external install for the same location should fail if the version is | 5424 // An external install for the same location should fail if the version is |
5424 // older, or the same, and succeed if the version is newer. | 5425 // older, or the same, and succeed if the version is newer. |
5425 | 5426 |
5426 // Older than the installed version... | 5427 // Older than the installed version... |
5427 EXPECT_FALSE( | 5428 EXPECT_FALSE( |
5428 service_->OnExternalExtensionFileFound( | 5429 service_->OnExternalExtensionFileFound( |
5429 kGoodId, &older_version, kInvalidPathToCrx, | 5430 kGoodId, &older_version, kInvalidPathToCrx, |
5430 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5431 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5431 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5432 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5432 | 5433 |
5433 // Same version as the installed version... | 5434 // Same version as the installed version... |
5434 EXPECT_FALSE( | 5435 EXPECT_FALSE( |
5435 service_->OnExternalExtensionFileFound( | 5436 service_->OnExternalExtensionFileFound( |
5436 kGoodId, ext->version(), kInvalidPathToCrx, | 5437 kGoodId, ext->version(), kInvalidPathToCrx, |
5437 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5438 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5438 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5439 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5439 | 5440 |
5440 // Newer than the installed version... | 5441 // Newer than the installed version... |
5441 EXPECT_TRUE( | 5442 EXPECT_TRUE( |
5442 service_->OnExternalExtensionFileFound( | 5443 service_->OnExternalExtensionFileFound( |
5443 kGoodId, &newer_version, kInvalidPathToCrx, | 5444 kGoodId, &newer_version, kInvalidPathToCrx, |
5444 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 5445 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
5445 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5446 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5446 | 5447 |
5447 // An external install for a higher priority install source should succeed | 5448 // An external install for a higher priority install source should succeed |
5448 // if the version is greater. |older_version| is not... | 5449 // if the version is greater. |older_version| is not... |
5449 EXPECT_FALSE( | 5450 EXPECT_FALSE( |
5450 service_->OnExternalExtensionFileFound( | 5451 service_->OnExternalExtensionFileFound( |
5451 kGoodId, &older_version, kInvalidPathToCrx, | 5452 kGoodId, &older_version, kInvalidPathToCrx, |
5452 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5453 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5453 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5454 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5454 | 5455 |
5455 // |newer_version| is newer. | 5456 // |newer_version| is newer. |
5456 EXPECT_TRUE( | 5457 EXPECT_TRUE( |
5457 service_->OnExternalExtensionFileFound( | 5458 service_->OnExternalExtensionFileFound( |
5458 kGoodId, &newer_version, kInvalidPathToCrx, | 5459 kGoodId, &newer_version, kInvalidPathToCrx, |
5459 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5460 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5460 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5461 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5461 | 5462 |
5462 // An external install for an even higher priority install source should | 5463 // An external install for an even higher priority install source should |
5463 // succeed if the version is greater. | 5464 // succeed if the version is greater. |
5464 EXPECT_TRUE( | 5465 EXPECT_TRUE( |
5465 service_->OnExternalExtensionFileFound( | 5466 service_->OnExternalExtensionFileFound( |
5466 kGoodId, &newer_version, kInvalidPathToCrx, | 5467 kGoodId, &newer_version, kInvalidPathToCrx, |
5467 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 5468 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); |
5468 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5469 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5469 | 5470 |
5470 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, | 5471 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, |
5471 // adding from external pref will now fail. | 5472 // adding from external pref will now fail. |
5472 EXPECT_FALSE( | 5473 EXPECT_FALSE( |
5473 service_->OnExternalExtensionFileFound( | 5474 service_->OnExternalExtensionFileFound( |
5474 kGoodId, &newer_version, kInvalidPathToCrx, | 5475 kGoodId, &newer_version, kInvalidPathToCrx, |
5475 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5476 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5476 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 5477 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
5477 } | 5478 } |
5478 | 5479 |
5479 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { | 5480 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { |
5480 Version kVersion123("1.2.3"); | 5481 Version kVersion123("1.2.3"); |
5481 Version kVersion124("1.2.4"); | 5482 Version kVersion124("1.2.4"); |
5482 Version kVersion125("1.2.5"); | 5483 Version kVersion125("1.2.5"); |
5483 const FilePath kInvalidPathToCrx = FilePath(); | 5484 const FilePath kInvalidPathToCrx = FilePath(); |
5484 const int kCreationFlags = 0; | 5485 const int kCreationFlags = 0; |
5485 const bool kDontMarkAcknowledged = false; | 5486 const bool kDontMarkAcknowledged = false; |
5486 | 5487 |
5487 InitializeEmptyExtensionService(); | 5488 InitializeEmptyExtensionService(); |
5488 | 5489 |
5489 extensions::PendingExtensionManager* pending = | 5490 extensions::PendingExtensionManager* pending = |
5490 service_->pending_extension_manager(); | 5491 service_->pending_extension_manager(); |
5491 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 5492 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
5492 | 5493 |
5493 // An external provider starts installing from a local crx. | 5494 // An external provider starts installing from a local crx. |
5494 EXPECT_TRUE( | 5495 EXPECT_TRUE( |
5495 service_->OnExternalExtensionFileFound( | 5496 service_->OnExternalExtensionFileFound( |
5496 kGoodId, &kVersion123, kInvalidPathToCrx, | 5497 kGoodId, &kVersion123, kInvalidPathToCrx, |
5497 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5498 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5498 const extensions::PendingExtensionInfo* info; | 5499 const extensions::PendingExtensionInfo* info; |
5499 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 5500 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
5500 EXPECT_TRUE(info->version().IsValid()); | 5501 EXPECT_TRUE(info->version().IsValid()); |
5501 EXPECT_TRUE(info->version().Equals(kVersion123)); | 5502 EXPECT_TRUE(info->version().Equals(kVersion123)); |
5502 | 5503 |
5503 // Adding a newer version overrides the currently pending version. | 5504 // Adding a newer version overrides the currently pending version. |
5504 EXPECT_TRUE( | 5505 EXPECT_TRUE( |
5505 service_->OnExternalExtensionFileFound( | 5506 service_->OnExternalExtensionFileFound( |
5506 kGoodId, &kVersion124, kInvalidPathToCrx, | 5507 kGoodId, &kVersion124, kInvalidPathToCrx, |
5507 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5508 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5508 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 5509 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
5509 EXPECT_TRUE(info->version().IsValid()); | 5510 EXPECT_TRUE(info->version().IsValid()); |
5510 EXPECT_TRUE(info->version().Equals(kVersion124)); | 5511 EXPECT_TRUE(info->version().Equals(kVersion124)); |
5511 | 5512 |
5512 // Adding an older version fails. | 5513 // Adding an older version fails. |
5513 EXPECT_FALSE( | 5514 EXPECT_FALSE( |
5514 service_->OnExternalExtensionFileFound( | 5515 service_->OnExternalExtensionFileFound( |
5515 kGoodId, &kVersion123, kInvalidPathToCrx, | 5516 kGoodId, &kVersion123, kInvalidPathToCrx, |
5516 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 5517 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
5517 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 5518 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
5518 EXPECT_TRUE(info->version().IsValid()); | 5519 EXPECT_TRUE(info->version().IsValid()); |
5519 EXPECT_TRUE(info->version().Equals(kVersion124)); | 5520 EXPECT_TRUE(info->version().Equals(kVersion124)); |
5520 | 5521 |
5521 // Adding an older version fails even when coming from a higher-priority | 5522 // Adding an older version fails even when coming from a higher-priority |
5522 // location. | 5523 // location. |
5523 EXPECT_FALSE( | 5524 EXPECT_FALSE( |
5524 service_->OnExternalExtensionFileFound( | 5525 service_->OnExternalExtensionFileFound( |
5525 kGoodId, &kVersion123, kInvalidPathToCrx, | 5526 kGoodId, &kVersion123, kInvalidPathToCrx, |
5526 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 5527 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); |
5527 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 5528 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
5528 EXPECT_TRUE(info->version().IsValid()); | 5529 EXPECT_TRUE(info->version().IsValid()); |
5529 EXPECT_TRUE(info->version().Equals(kVersion124)); | 5530 EXPECT_TRUE(info->version().Equals(kVersion124)); |
5530 | 5531 |
5531 // Adding the latest version from the webstore overrides a specific version. | 5532 // Adding the latest version from the webstore overrides a specific version. |
5532 GURL kUpdateUrl("http://example.com/update"); | 5533 GURL kUpdateUrl("http://example.com/update"); |
5533 EXPECT_TRUE( | 5534 EXPECT_TRUE( |
5534 service_->OnExternalExtensionUpdateUrlFound( | 5535 service_->OnExternalExtensionUpdateUrlFound( |
5535 kGoodId, kUpdateUrl, Extension::EXTERNAL_POLICY_DOWNLOAD)); | 5536 kGoodId, kUpdateUrl, Manifest::EXTERNAL_POLICY_DOWNLOAD)); |
5536 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 5537 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
5537 EXPECT_FALSE(info->version().IsValid()); | 5538 EXPECT_FALSE(info->version().IsValid()); |
5538 } | 5539 } |
5539 | 5540 |
5540 // This makes sure we can package and install CRX files that use whitelisted | 5541 // This makes sure we can package and install CRX files that use whitelisted |
5541 // permissions. | 5542 // permissions. |
5542 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { | 5543 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { |
5543 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; | 5544 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; |
5544 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 5545 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
5545 switches::kWhitelistedExtensionID, test_id); | 5546 switches::kWhitelistedExtensionID, test_id); |
(...skipping 23 matching lines...) Expand all Loading... |
5569 | 5570 |
5570 // All tests use a single extension. Put the id and path in member vars | 5571 // All tests use a single extension. Put the id and path in member vars |
5571 // that all methods can read. | 5572 // that all methods can read. |
5572 crx_id_ = kGoodId; | 5573 crx_id_ = kGoodId; |
5573 crx_path_ = data_dir_.AppendASCII("good.crx"); | 5574 crx_path_ = data_dir_.AppendASCII("good.crx"); |
5574 } | 5575 } |
5575 | 5576 |
5576 // Fake an external source adding a URL to fetch an extension from. | 5577 // Fake an external source adding a URL to fetch an extension from. |
5577 bool AddPendingExternalPrefUrl() { | 5578 bool AddPendingExternalPrefUrl() { |
5578 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 5579 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
5579 crx_id_, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); | 5580 crx_id_, GURL(), Manifest::EXTERNAL_PREF_DOWNLOAD); |
5580 } | 5581 } |
5581 | 5582 |
5582 // Fake an external file from external_extensions.json. | 5583 // Fake an external file from external_extensions.json. |
5583 bool AddPendingExternalPrefFileInstall() { | 5584 bool AddPendingExternalPrefFileInstall() { |
5584 Version version("1.0.0.0"); | 5585 Version version("1.0.0.0"); |
5585 | 5586 |
5586 return service_->OnExternalExtensionFileFound( | 5587 return service_->OnExternalExtensionFileFound( |
5587 crx_id_, &version, crx_path_, Extension::EXTERNAL_PREF, | 5588 crx_id_, &version, crx_path_, Manifest::EXTERNAL_PREF, |
5588 Extension::NO_FLAGS, false); | 5589 Extension::NO_FLAGS, false); |
5589 } | 5590 } |
5590 | 5591 |
5591 // Fake a request from sync to install an extension. | 5592 // Fake a request from sync to install an extension. |
5592 bool AddPendingSyncInstall() { | 5593 bool AddPendingSyncInstall() { |
5593 return service_->pending_extension_manager()->AddFromSync( | 5594 return service_->pending_extension_manager()->AddFromSync( |
5594 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently); | 5595 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently); |
5595 } | 5596 } |
5596 | 5597 |
5597 // Fake a policy install. | 5598 // Fake a policy install. |
5598 bool AddPendingPolicyInstall() { | 5599 bool AddPendingPolicyInstall() { |
5599 // Get path to the CRX with id |kGoodId|. | 5600 // Get path to the CRX with id |kGoodId|. |
5600 return service_->OnExternalExtensionUpdateUrlFound( | 5601 return service_->OnExternalExtensionUpdateUrlFound( |
5601 crx_id_, GURL(), Extension::EXTERNAL_POLICY_DOWNLOAD); | 5602 crx_id_, GURL(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
5602 } | 5603 } |
5603 | 5604 |
5604 // Get the install source of a pending extension. | 5605 // Get the install source of a pending extension. |
5605 Extension::Location GetPendingLocation() { | 5606 Manifest::Location GetPendingLocation() { |
5606 const extensions::PendingExtensionInfo* info; | 5607 const extensions::PendingExtensionInfo* info; |
5607 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 5608 EXPECT_TRUE((info = service_->pending_extension_manager()-> |
5608 GetById(crx_id_))); | 5609 GetById(crx_id_))); |
5609 return info->install_source(); | 5610 return info->install_source(); |
5610 } | 5611 } |
5611 | 5612 |
5612 // Is an extension pending from a sync request? | 5613 // Is an extension pending from a sync request? |
5613 bool GetPendingIsFromSync() { | 5614 bool GetPendingIsFromSync() { |
5614 const extensions::PendingExtensionInfo* info; | 5615 const extensions::PendingExtensionInfo* info; |
5615 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 5616 EXPECT_TRUE((info = service_->pending_extension_manager()-> |
(...skipping 21 matching lines...) Expand all Loading... |
5637 // Test that a pending request for installation of an external CRX from | 5638 // Test that a pending request for installation of an external CRX from |
5638 // an update URL overrides a pending request to install the same extension | 5639 // an update URL overrides a pending request to install the same extension |
5639 // from sync. | 5640 // from sync. |
5640 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) { | 5641 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) { |
5641 InitializeEmptyExtensionService(); | 5642 InitializeEmptyExtensionService(); |
5642 | 5643 |
5643 ASSERT_FALSE(IsCrxInstalled()); | 5644 ASSERT_FALSE(IsCrxInstalled()); |
5644 | 5645 |
5645 // Install pending extension from sync. | 5646 // Install pending extension from sync. |
5646 EXPECT_TRUE(AddPendingSyncInstall()); | 5647 EXPECT_TRUE(AddPendingSyncInstall()); |
5647 ASSERT_EQ(Extension::INTERNAL, GetPendingLocation()); | 5648 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation()); |
5648 EXPECT_TRUE(GetPendingIsFromSync()); | 5649 EXPECT_TRUE(GetPendingIsFromSync()); |
5649 ASSERT_FALSE(IsCrxInstalled()); | 5650 ASSERT_FALSE(IsCrxInstalled()); |
5650 | 5651 |
5651 // Install pending as external prefs json would. | 5652 // Install pending as external prefs json would. |
5652 AddPendingExternalPrefFileInstall(); | 5653 AddPendingExternalPrefFileInstall(); |
5653 ASSERT_EQ(Extension::EXTERNAL_PREF, GetPendingLocation()); | 5654 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); |
5654 ASSERT_FALSE(IsCrxInstalled()); | 5655 ASSERT_FALSE(IsCrxInstalled()); |
5655 | 5656 |
5656 // Another request from sync should be ignorred. | 5657 // Another request from sync should be ignorred. |
5657 EXPECT_FALSE(AddPendingSyncInstall()); | 5658 EXPECT_FALSE(AddPendingSyncInstall()); |
5658 ASSERT_EQ(Extension::EXTERNAL_PREF, GetPendingLocation()); | 5659 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); |
5659 ASSERT_FALSE(IsCrxInstalled()); | 5660 ASSERT_FALSE(IsCrxInstalled()); |
5660 | 5661 |
5661 WaitForCrxInstall(crx_path_, INSTALL_NEW); | 5662 WaitForCrxInstall(crx_path_, INSTALL_NEW); |
5662 ASSERT_TRUE(IsCrxInstalled()); | 5663 ASSERT_TRUE(IsCrxInstalled()); |
5663 } | 5664 } |
5664 | 5665 |
5665 // Test that an install of an external CRX from an update overrides | 5666 // Test that an install of an external CRX from an update overrides |
5666 // an install of the same extension from sync. | 5667 // an install of the same extension from sync. |
5667 TEST_F(ExtensionSourcePriorityTest, PendingExternalUrlOverSync) { | 5668 TEST_F(ExtensionSourcePriorityTest, PendingExternalUrlOverSync) { |
5668 InitializeEmptyExtensionService(); | 5669 InitializeEmptyExtensionService(); |
5669 ASSERT_FALSE(IsCrxInstalled()); | 5670 ASSERT_FALSE(IsCrxInstalled()); |
5670 | 5671 |
5671 EXPECT_TRUE(AddPendingSyncInstall()); | 5672 EXPECT_TRUE(AddPendingSyncInstall()); |
5672 ASSERT_EQ(Extension::INTERNAL, GetPendingLocation()); | 5673 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation()); |
5673 EXPECT_TRUE(GetPendingIsFromSync()); | 5674 EXPECT_TRUE(GetPendingIsFromSync()); |
5674 ASSERT_FALSE(IsCrxInstalled()); | 5675 ASSERT_FALSE(IsCrxInstalled()); |
5675 | 5676 |
5676 ASSERT_TRUE(AddPendingExternalPrefUrl()); | 5677 ASSERT_TRUE(AddPendingExternalPrefUrl()); |
5677 ASSERT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); | 5678 ASSERT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); |
5678 EXPECT_FALSE(GetPendingIsFromSync()); | 5679 EXPECT_FALSE(GetPendingIsFromSync()); |
5679 ASSERT_FALSE(IsCrxInstalled()); | 5680 ASSERT_FALSE(IsCrxInstalled()); |
5680 | 5681 |
5681 EXPECT_FALSE(AddPendingSyncInstall()); | 5682 EXPECT_FALSE(AddPendingSyncInstall()); |
5682 ASSERT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); | 5683 ASSERT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); |
5683 EXPECT_FALSE(GetPendingIsFromSync()); | 5684 EXPECT_FALSE(GetPendingIsFromSync()); |
5684 ASSERT_FALSE(IsCrxInstalled()); | 5685 ASSERT_FALSE(IsCrxInstalled()); |
5685 } | 5686 } |
5686 | 5687 |
5687 // Test that an external install request stops sync from installing | 5688 // Test that an external install request stops sync from installing |
5688 // the same extension. | 5689 // the same extension. |
5689 TEST_F(ExtensionSourcePriorityTest, InstallExternalBlocksSyncRequest) { | 5690 TEST_F(ExtensionSourcePriorityTest, InstallExternalBlocksSyncRequest) { |
5690 InitializeEmptyExtensionService(); | 5691 InitializeEmptyExtensionService(); |
5691 ASSERT_FALSE(IsCrxInstalled()); | 5692 ASSERT_FALSE(IsCrxInstalled()); |
5692 | 5693 |
(...skipping 16 matching lines...) Expand all Loading... |
5709 ASSERT_FALSE(AddPendingSyncInstall()); | 5710 ASSERT_FALSE(AddPendingSyncInstall()); |
5710 } | 5711 } |
5711 | 5712 |
5712 // Test that installing an external extension displays a GlobalError. | 5713 // Test that installing an external extension displays a GlobalError. |
5713 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { | 5714 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { |
5714 FeatureSwitch::ScopedOverride prompt( | 5715 FeatureSwitch::ScopedOverride prompt( |
5715 FeatureSwitch::prompt_for_external_extensions(), true); | 5716 FeatureSwitch::prompt_for_external_extensions(), true); |
5716 | 5717 |
5717 InitializeEmptyExtensionService(); | 5718 InitializeEmptyExtensionService(); |
5718 MockExtensionProvider* provider = | 5719 MockExtensionProvider* provider = |
5719 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 5720 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
5720 AddMockExternalProvider(provider); | 5721 AddMockExternalProvider(provider); |
5721 | 5722 |
5722 service_->UpdateExternalExtensionAlert(); | 5723 service_->UpdateExternalExtensionAlert(); |
5723 // Should return false, meaning there aren't any extensions that the user | 5724 // Should return false, meaning there aren't any extensions that the user |
5724 // needs to know about. | 5725 // needs to know about. |
5725 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 5726 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
5726 | 5727 |
5727 // This is a normal extension, installed normally. | 5728 // This is a normal extension, installed normally. |
5728 // This should NOT trigger an alert. | 5729 // This should NOT trigger an alert. |
5729 set_extensions_enabled(true); | 5730 set_extensions_enabled(true); |
(...skipping 24 matching lines...) Expand all Loading... |
5754 } | 5755 } |
5755 | 5756 |
5756 // Test that external extensions are initially disabled, and that enabling | 5757 // Test that external extensions are initially disabled, and that enabling |
5757 // them clears the prompt. | 5758 // them clears the prompt. |
5758 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 5759 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
5759 FeatureSwitch::ScopedOverride prompt( | 5760 FeatureSwitch::ScopedOverride prompt( |
5760 FeatureSwitch::prompt_for_external_extensions(), true); | 5761 FeatureSwitch::prompt_for_external_extensions(), true); |
5761 | 5762 |
5762 InitializeEmptyExtensionService(); | 5763 InitializeEmptyExtensionService(); |
5763 MockExtensionProvider* provider = | 5764 MockExtensionProvider* provider = |
5764 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 5765 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
5765 AddMockExternalProvider(provider); | 5766 AddMockExternalProvider(provider); |
5766 | 5767 |
5767 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 5768 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
5768 data_dir_.AppendASCII("page_action.crx")); | 5769 data_dir_.AppendASCII("page_action.crx")); |
5769 | 5770 |
5770 service_->CheckForExternalUpdates(); | 5771 service_->CheckForExternalUpdates(); |
5771 loop_.RunUntilIdle(); | 5772 loop_.RunUntilIdle(); |
5772 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 5773 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
5773 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 5774 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
5774 | 5775 |
5775 const Extension* extension = | 5776 const Extension* extension = |
5776 service_->disabled_extensions()->GetByID(page_action); | 5777 service_->disabled_extensions()->GetByID(page_action); |
5777 EXPECT_TRUE(extension); | 5778 EXPECT_TRUE(extension); |
5778 EXPECT_EQ(page_action, extension->id()); | 5779 EXPECT_EQ(page_action, extension->id()); |
5779 | 5780 |
5780 service_->EnableExtension(page_action); | 5781 service_->EnableExtension(page_action); |
5781 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 5782 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
5782 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); | 5783 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); |
5783 } | 5784 } |
5784 | 5785 |
5785 // Test that installing multiple external extensions works. | 5786 // Test that installing multiple external extensions works. |
5786 TEST_F(ExtensionServiceTest, ExternalInstallMultiple) { | 5787 TEST_F(ExtensionServiceTest, ExternalInstallMultiple) { |
5787 FeatureSwitch::ScopedOverride prompt( | 5788 FeatureSwitch::ScopedOverride prompt( |
5788 FeatureSwitch::prompt_for_external_extensions(), true); | 5789 FeatureSwitch::prompt_for_external_extensions(), true); |
5789 | 5790 |
5790 InitializeEmptyExtensionService(); | 5791 InitializeEmptyExtensionService(); |
5791 MockExtensionProvider* provider = | 5792 MockExtensionProvider* provider = |
5792 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 5793 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
5793 AddMockExternalProvider(provider); | 5794 AddMockExternalProvider(provider); |
5794 | 5795 |
5795 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 5796 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
5796 data_dir_.AppendASCII("page_action.crx")); | 5797 data_dir_.AppendASCII("page_action.crx")); |
5797 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 5798 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
5798 data_dir_.AppendASCII("good.crx")); | 5799 data_dir_.AppendASCII("good.crx")); |
5799 provider->UpdateOrAddExtension(theme_crx, "2.0", | 5800 provider->UpdateOrAddExtension(theme_crx, "2.0", |
5800 data_dir_.AppendASCII("theme.crx")); | 5801 data_dir_.AppendASCII("theme.crx")); |
5801 | 5802 |
5802 service_->CheckForExternalUpdates(); | 5803 service_->CheckForExternalUpdates(); |
(...skipping 11 matching lines...) Expand all Loading... |
5814 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 5815 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
5815 } | 5816 } |
5816 | 5817 |
5817 // Test that a sideloaded extension gets wiped out. | 5818 // Test that a sideloaded extension gets wiped out. |
5818 TEST_F(ExtensionServiceTest, WipeOutExtension) { | 5819 TEST_F(ExtensionServiceTest, WipeOutExtension) { |
5819 FeatureSwitch::ScopedOverride prompt( | 5820 FeatureSwitch::ScopedOverride prompt( |
5820 FeatureSwitch::sideload_wipeout(), true); | 5821 FeatureSwitch::sideload_wipeout(), true); |
5821 | 5822 |
5822 InitializeEmptyExtensionService(); | 5823 InitializeEmptyExtensionService(); |
5823 MockExtensionProvider* provider_registry = | 5824 MockExtensionProvider* provider_registry = |
5824 new MockExtensionProvider(service_, Extension::EXTERNAL_REGISTRY); | 5825 new MockExtensionProvider(service_, Manifest::EXTERNAL_REGISTRY); |
5825 AddMockExternalProvider(provider_registry); | 5826 AddMockExternalProvider(provider_registry); |
5826 MockExtensionProvider* provider_pref = | 5827 MockExtensionProvider* provider_pref = |
5827 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); | 5828 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
5828 AddMockExternalProvider(provider_pref); | 5829 AddMockExternalProvider(provider_pref); |
5829 | 5830 |
5830 provider_registry->UpdateOrAddExtension(good_crx, "1.0.0.0", | 5831 provider_registry->UpdateOrAddExtension(good_crx, "1.0.0.0", |
5831 data_dir_.AppendASCII("good.crx")); | 5832 data_dir_.AppendASCII("good.crx")); |
5832 provider_pref->UpdateOrAddExtension(good_crx, "1.0.0.0", | 5833 provider_pref->UpdateOrAddExtension(good_crx, "1.0.0.0", |
5833 data_dir_.AppendASCII("good.crx")); | 5834 data_dir_.AppendASCII("good.crx")); |
5834 | 5835 |
5835 service_->CheckForExternalUpdates(); | 5836 service_->CheckForExternalUpdates(); |
5836 loop_.RunUntilIdle(); | 5837 loop_.RunUntilIdle(); |
5837 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 5838 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
5838 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 5839 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
5839 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); | 5840 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); |
5840 | 5841 |
5841 ExtensionPrefs* prefs = service_->extension_prefs(); | 5842 ExtensionPrefs* prefs = service_->extension_prefs(); |
5842 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) & | 5843 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) & |
5843 Extension::DISABLE_SIDELOAD_WIPEOUT); | 5844 Extension::DISABLE_SIDELOAD_WIPEOUT); |
5844 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) & | 5845 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) & |
5845 Extension::DISABLE_SIDELOAD_WIPEOUT); | 5846 Extension::DISABLE_SIDELOAD_WIPEOUT); |
5846 } | 5847 } |
OLD | NEW |