Prevent extension side-enabling.
NOTRY=True
Review URL: https://codereview.chromium.org/26714003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228190 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 4864187..5948168c 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -6546,3 +6546,66 @@
EXPECT_TRUE(
service_->extension_prefs()->IsBlacklistedExtensionAcknowledged(id));
}
+
+TEST_F(ExtensionServiceTest, ReconcileKnownDisabledNoneDisabled) {
+ // A profile with 3 extensions installed: good0, good1, and good2.
+ InitializeGoodInstalledExtensionService();
+
+ // Initializing shouldn't disable any extensions if none are known to be
+ // disabled.
+ service_->Init();
+
+ extensions::ExtensionIdSet expected_extensions;
+ expected_extensions.insert(good0);
+ expected_extensions.insert(good1);
+ expected_extensions.insert(good2);
+
+ extensions::ExtensionIdSet expected_disabled_extensions;
+
+ EXPECT_EQ(expected_extensions, service_->extensions()->GetIDs());
+ EXPECT_EQ(expected_disabled_extensions,
+ service_->disabled_extensions()->GetIDs());
+}
+
+TEST_F(ExtensionServiceTest, ReconcileKnownDisabledWithSideEnable) {
+ // A profile with 3 extensions installed: good0, good1, and good2.
+ InitializeGoodInstalledExtensionService();
+
+ ExtensionPrefs* extension_prefs = service_->extension_prefs();
+
+ // Disable good1.
+ extension_prefs->SetExtensionState(good1, Extension::DISABLED);
+
+ // Mark both good1 and good2 as "known_disabled" (effectively making good2
+ // look as if it had been side-enabled).
+ extensions::ExtensionIdSet known_disabled;
+ known_disabled.insert(good1);
+ known_disabled.insert(good2);
+ extension_prefs->SetKnownDisabled(known_disabled);
+
+ // Initialize the service (which should disable good2 since it's known to be
+ // disabled).
+ service_->Init();
+
+ extensions::ExtensionIdSet expected_extensions;
+ expected_extensions.insert(good0);
+
+ extensions::ExtensionIdSet expected_disabled_extensions;
+ expected_disabled_extensions.insert(good1);
+ expected_disabled_extensions.insert(good2);
+
+ EXPECT_EQ(expected_extensions, service_->extensions()->GetIDs());
+ EXPECT_EQ(expected_disabled_extensions,
+ service_->disabled_extensions()->GetIDs());
+
+ // Make sure that re-enabling an extension sticks across calls to
+ // ReconcileKnownDisabled().
+ service_->EnableExtension(good2);
+ service_->ReconcileKnownDisabled();
+ expected_extensions.insert(good2);
+ expected_disabled_extensions.erase(good2);
+
+ EXPECT_EQ(expected_extensions, service_->extensions()->GetIDs());
+ EXPECT_EQ(expected_disabled_extensions,
+ service_->disabled_extensions()->GetIDs());
+}