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());
+}