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

Unified Diff: chrome/browser/extensions/extensions_service_unittest.cc

Issue 5535002: Decouple killbit testing from external extension providers (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: update Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extensions_service_unittest.cc
diff --git a/chrome/browser/extensions/extensions_service_unittest.cc b/chrome/browser/extensions/extensions_service_unittest.cc
index 2c4d3df834574b39ff1f169e4f82766b84b7677c..673c3c45f5ba53be880c6e51f78079904b55815b 100644
--- a/chrome/browser/extensions/extensions_service_unittest.cc
+++ b/chrome/browser/extensions/extensions_service_unittest.cc
@@ -140,13 +140,10 @@ class MockExtensionProvider : public ExternalExtensionProvider {
}
// ExternalExtensionProvider implementation:
- virtual void VisitRegisteredExtension(
- Visitor* visitor, const std::set<std::string>& ids_to_ignore) const {
+ virtual void VisitRegisteredExtension(Visitor* visitor) const {
visit_count_++;
for (DataMap::const_iterator i = extension_map_.begin();
i != extension_map_.end(); ++i) {
- if (ids_to_ignore.find(i->first) != ids_to_ignore.end())
- continue;
scoped_ptr<Version> version;
version.reset(Version::GetVersionFromString(i->second.first));
@@ -198,8 +195,7 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
MockProviderVisitor() : ids_found_(0) {
}
- int Visit(const std::string& json_data,
- const std::set<std::string>& ignore_list) {
+ int Visit(const std::string& json_data) {
// Give the test json file to the provider for parsing.
provider_.reset(new ExternalPrefExtensionProvider());
provider_->SetPreferencesForTesting(json_data);
@@ -220,9 +216,8 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
// Reset our counter.
ids_found_ = 0;
- // Ask the provider to look up all extensions (and return the ones
- // found (that are not on the ignore list).
- provider_->VisitRegisteredExtension(this, ignore_list);
+ // Ask the provider to look up all extensions and return them.
+ provider_->VisitRegisteredExtension(this);
return ids_found_;
}
@@ -1062,6 +1057,52 @@ TEST_F(ExtensionsServiceTest, InstallExtension) {
// TODO(erikkay): add tests for upgrade cases.
}
+// Test the handling of killed extensions.
+TEST_F(ExtensionsServiceTest, KilledExtensions) {
+ InitializeEmptyExtensionsService();
+
+ FilePath extensions_path;
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path));
+ extensions_path = extensions_path.AppendASCII("extensions");
+ FilePath path = extensions_path.AppendASCII("good.crx");
+ set_extensions_enabled(true);
+
+ // Install an external extension.
+ service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0",
+ path, Extension::EXTERNAL_PREF);
+ loop_.RunAllPending();
+ ASSERT_TRUE(NULL != service_->GetExtensionById(good_crx, false));
+
+ // Uninstall it and check that its killbit gets set.
+ service_->UninstallExtension(good_crx, false);
+ loop_.RunAllPending();
+ ValidateIntegerPref(good_crx, "location", Extension::KILLBIT);
+
+ // Try to re-install it externally. This should fail because of the killbit.
+ service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0",
+ path, Extension::EXTERNAL_PREF);
+ loop_.RunAllPending();
+ ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
+ ValidateIntegerPref(good_crx, "location", Extension::KILLBIT);
+
+ // Repeat the same thing with a newer version of the extension.
+ path = extensions_path.AppendASCII("good2.crx");
+ service_->OnExternalExtensionFileFound(good_crx, "1.0.0.1",
+ path, Extension::EXTERNAL_PREF);
+ loop_.RunAllPending();
+ ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
+ ValidateIntegerPref(good_crx, "location", Extension::KILLBIT);
+
+ // Try adding the same extension from an external update URL.
+ service_->AddPendingExtensionFromExternalUpdateUrl(
+ good_crx,
+ GURL("http:://fake.update/url"),
+ Extension::EXTERNAL_PREF_DOWNLOAD);
+ const PendingExtensionMap& pending_extensions =
+ service_->pending_extensions();
+ ASSERT_TRUE(pending_extensions.find(good_crx) == pending_extensions.end());
+}
+
// Install a user script (they get converted automatically to an extension)
TEST_F(ExtensionsServiceTest, InstallUserScript) {
// The details of script conversion are tested elsewhere, this just tests
@@ -2871,14 +2912,6 @@ TEST_F(ExtensionsServiceTest, ExternalPrefProvider) {
"}";
MockProviderVisitor visitor;
- std::set<std::string> ignore_list;
- EXPECT_EQ(3, visitor.Visit(json_data, ignore_list));
- ignore_list.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
- EXPECT_EQ(2, visitor.Visit(json_data, ignore_list));
- ignore_list.insert("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
- EXPECT_EQ(1, visitor.Visit(json_data, ignore_list));
- ignore_list.insert("cccccccccccccccccccccccccccccccc");
- EXPECT_EQ(0, visitor.Visit(json_data, ignore_list));
// Simulate an external_extensions.json file that contains seven invalid
// extensions:
@@ -2922,8 +2955,7 @@ TEST_F(ExtensionsServiceTest, ExternalPrefProvider) {
" \"external_version\": \"1.0\""
" }"
"}";
- ignore_list.clear();
- EXPECT_EQ(1, visitor.Visit(json_data, ignore_list));
+ EXPECT_EQ(1, visitor.Visit(json_data));
}
// Test loading good extensions from the profile directory.
« no previous file with comments | « chrome/browser/extensions/extensions_service.cc ('k') | chrome/browser/extensions/external_extension_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698