| Index: chrome/browser/extensions/extension_service_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
|
| index b2da4aa2f3df7279317699e9fdf39888b49d9010..b9083a21ae2a6068b0e42c53df7d27687253fda9 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -2599,6 +2599,93 @@ TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) {
|
| EXPECT_EQ(0u, service_->extensions()->size());
|
| }
|
|
|
| +// Tests that component extensions are not blacklisted by policy.
|
| +TEST_F(ExtensionServiceTest, ComponentExtensionWhitelisted) {
|
| + InitializeEmptyExtensionService();
|
| +
|
| + // Blacklist everything.
|
| + {
|
| + ListPrefUpdate update(profile_->GetPrefs(),
|
| + prefs::kExtensionInstallDenyList);
|
| + ListValue* blacklist = update.Get();
|
| + blacklist->Append(Value::CreateStringValue("*"));
|
| + }
|
| +
|
| + // Install a component extension.
|
| + FilePath path = data_dir_
|
| + .AppendASCII("good")
|
| + .AppendASCII("Extensions")
|
| + .AppendASCII(good0)
|
| + .AppendASCII("1.0.0.0");
|
| + std::string manifest;
|
| + ASSERT_TRUE(file_util::ReadFileToString(
|
| + path.Append(Extension::kManifestFilename), &manifest));
|
| + service_->register_component_extension(
|
| + ExtensionService::ComponentExtensionInfo(manifest, path));
|
| + service_->Init();
|
| +
|
| + // Extension should be installed despite blacklist.
|
| + ASSERT_EQ(1u, service_->extensions()->size());
|
| + EXPECT_EQ(good0, service_->extensions()->at(0)->id());
|
| +
|
| + // Poke external providers and make sure the extension is still present.
|
| + service_->CheckForExternalUpdates();
|
| + ASSERT_EQ(1u, service_->extensions()->size());
|
| + EXPECT_EQ(good0, service_->extensions()->at(0)->id());
|
| +
|
| + // Extension should not be uninstalled on blacklist changes.
|
| + {
|
| + ListPrefUpdate update(profile_->GetPrefs(),
|
| + prefs::kExtensionInstallDenyList);
|
| + ListValue* blacklist = update.Get();
|
| + blacklist->Append(Value::CreateStringValue(good0));
|
| + }
|
| + loop_.RunAllPending();
|
| + ASSERT_EQ(1u, service_->extensions()->size());
|
| + EXPECT_EQ(good0, service_->extensions()->at(0)->id());
|
| +}
|
| +
|
| +// Tests that policy-installed extensions are not blacklisted by policy.
|
| +TEST_F(ExtensionServiceTest, PolicyInstalledExtensionsWhitelisted) {
|
| + InitializeEmptyExtensionService();
|
| +
|
| + // Blacklist everything.
|
| + {
|
| + ListPrefUpdate update(profile_->GetPrefs(),
|
| + prefs::kExtensionInstallDenyList);
|
| + ListValue* blacklist = update.Get();
|
| + blacklist->Append(Value::CreateStringValue("*"));
|
| + }
|
| +
|
| + // Have policy force-install an extension.
|
| + MockExtensionProvider* provider =
|
| + new MockExtensionProvider(service_,
|
| + Extension::EXTERNAL_POLICY_DOWNLOAD);
|
| + AddMockExternalProvider(provider);
|
| + provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
|
| + data_dir_.AppendASCII("good.crx"));
|
| +
|
| + // Reloading extensions should find our externally registered extension
|
| + // and install it.
|
| + service_->CheckForExternalUpdates();
|
| + loop_.RunAllPending();
|
| +
|
| + // Extension should be installed despite blacklist.
|
| + ASSERT_EQ(1u, service_->extensions()->size());
|
| + EXPECT_EQ(good_crx, service_->extensions()->at(0)->id());
|
| +
|
| + // Blacklist update should not uninstall the extension.
|
| + {
|
| + ListPrefUpdate update(profile_->GetPrefs(),
|
| + prefs::kExtensionInstallDenyList);
|
| + ListValue* blacklist = update.Get();
|
| + blacklist->Append(Value::CreateStringValue(good0));
|
| + }
|
| + loop_.RunAllPending();
|
| + ASSERT_EQ(1u, service_->extensions()->size());
|
| + EXPECT_EQ(good_crx, service_->extensions()->at(0)->id());
|
| +}
|
| +
|
| // Tests disabling extensions
|
| TEST_F(ExtensionServiceTest, DisableExtension) {
|
| InitializeEmptyExtensionService();
|
| @@ -3145,8 +3232,7 @@ void ExtensionServiceTest::TestExternalProvider(
|
|
|
| // Now test the case where user uninstalls and then the extension is removed
|
| // from the external provider.
|
| -
|
| - provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
|
| + provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
|
| service_->CheckForExternalUpdates();
|
| loop_.RunAllPending();
|
|
|
|
|