| 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 f3660cf676c01946ba9216cde92516b5443e0fe8..a6bbb3c9c1bdccb2b9d3d6b865b2eddb0eec09a6 100644
|
| --- a/chrome/browser/extensions/extensions_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extensions_service_unittest.cc
|
| @@ -429,9 +429,16 @@ class ExtensionsServiceTest
|
| ExtensionErrorReporter::GetInstance()->ClearErrors();
|
| }
|
|
|
| + enum UpdateState {
|
| + FAILED_SILENTLY,
|
| + FAILED,
|
| + UPDATED,
|
| + INSTALLED,
|
| + ENABLED
|
| + };
|
| +
|
| void UpdateExtension(const std::string& id, const FilePath& in_path,
|
| - bool should_succeed, bool should_install,
|
| - bool expect_report_on_failure) {
|
| + UpdateState expected_state) {
|
| ASSERT_TRUE(file_util::PathExists(in_path));
|
|
|
| // We need to copy this to a temporary location because Update() will delete
|
| @@ -440,17 +447,39 @@ class ExtensionsServiceTest
|
| path = path.Append(in_path.BaseName());
|
| ASSERT_TRUE(file_util::CopyFile(in_path, path));
|
|
|
| + int previous_enabled_extension_count =
|
| + service_->extensions()->size();
|
| + int previous_installed_extension_count =
|
| + previous_enabled_extension_count +
|
| + service_->disabled_extensions()->size();
|
| +
|
| service_->UpdateExtension(id, path, GURL());
|
| loop_.RunAllPending();
|
| - std::vector<std::string> errors = GetErrors();
|
|
|
| - if (should_succeed) {
|
| - EXPECT_EQ(0u, errors.size()) << path.value();
|
| - EXPECT_EQ(should_install ? 1u : 0u, service_->extensions()->size());
|
| + std::vector<std::string> errors = GetErrors();
|
| + int error_count = errors.size();
|
| + int enabled_extension_count =
|
| + service_->extensions()->size();
|
| + int installed_extension_count =
|
| + enabled_extension_count + service_->disabled_extensions()->size();
|
| +
|
| + int expected_error_count = (expected_state == FAILED) ? 1 : 0;
|
| + EXPECT_EQ(expected_error_count, error_count) << path.value();
|
| +
|
| + if (expected_state <= FAILED) {
|
| + EXPECT_EQ(previous_enabled_extension_count,
|
| + enabled_extension_count);
|
| + EXPECT_EQ(previous_installed_extension_count,
|
| + installed_extension_count);
|
| } else {
|
| - if (expect_report_on_failure) {
|
| - EXPECT_EQ(1u, errors.size()) << path.value();
|
| - }
|
| + int expected_installed_extension_count =
|
| + (expected_state >= INSTALLED) ? 1 : 0;
|
| + int expected_enabled_extension_count =
|
| + (expected_state >= ENABLED) ? 1 : 0;
|
| + EXPECT_EQ(expected_installed_extension_count,
|
| + installed_extension_count);
|
| + EXPECT_EQ(expected_enabled_extension_count,
|
| + enabled_extension_count);
|
| }
|
|
|
| // Update() should delete the temporary input file.
|
| @@ -1139,7 +1168,7 @@ TEST_F(ExtensionsServiceTest, UpdateExtension) {
|
| ASSERT_EQ(good_crx, good->id());
|
|
|
| path = extensions_path.AppendASCII("good2.crx");
|
| - UpdateExtension(good_crx, path, true, true, true);
|
| + UpdateExtension(good_crx, path, ENABLED);
|
| ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString());
|
| }
|
|
|
| @@ -1151,7 +1180,7 @@ TEST_F(ExtensionsServiceTest, UpdateNotInstalledExtension) {
|
| extensions_path = extensions_path.AppendASCII("extensions");
|
|
|
| FilePath path = extensions_path.AppendASCII("good.crx");
|
| - UpdateExtension(good_crx, path, true, false, true);
|
| + UpdateExtension(good_crx, path, UPDATED);
|
| loop_.RunAllPending();
|
|
|
| ASSERT_EQ(0u, service_->extensions()->size());
|
| @@ -1175,7 +1204,7 @@ TEST_F(ExtensionsServiceTest, UpdateWillNotDowngrade) {
|
|
|
| // Change path from good2.crx -> good.crx
|
| path = extensions_path.AppendASCII("good.crx");
|
| - UpdateExtension(good_crx, path, false, false, true);
|
| + UpdateExtension(good_crx, path, FAILED);
|
| ASSERT_EQ("1.0.0.1", service_->extensions()->at(0)->VersionString());
|
| }
|
|
|
| @@ -1191,7 +1220,7 @@ TEST_F(ExtensionsServiceTest, UpdateToSameVersionIsNoop) {
|
| InstallExtension(path, true);
|
| Extension* good = service_->extensions()->at(0);
|
| ASSERT_EQ(good_crx, good->id());
|
| - UpdateExtension(good_crx, path, false, false, false);
|
| + UpdateExtension(good_crx, path, FAILED_SILENTLY);
|
| }
|
|
|
| // Test adding a pending extension.
|
| @@ -1200,21 +1229,20 @@ TEST_F(ExtensionsServiceTest, AddPendingExtension) {
|
|
|
| const std::string kFakeId("fake-id");
|
| const GURL kFakeUpdateURL("http:://fake.update/url");
|
| - scoped_ptr<Version> fake_version(Version::GetVersionFromString("4.3.2.1"));
|
| - ASSERT_TRUE(fake_version.get());
|
| const bool kFakeIsTheme(false);
|
| const bool kFakeInstallSilently(true);
|
| + const Extension::State kFakeInitialState(Extension::ENABLED);
|
| + const bool kFakeInitialIncognitoEnabled(false);
|
|
|
| - service_->AddPendingExtension(kFakeId, kFakeUpdateURL,
|
| - *fake_version, kFakeIsTheme,
|
| - kFakeInstallSilently);
|
| + service_->AddPendingExtension(
|
| + kFakeId, kFakeUpdateURL, kFakeIsTheme, kFakeInstallSilently,
|
| + kFakeInitialState, kFakeInitialIncognitoEnabled);
|
| PendingExtensionMap::const_iterator it =
|
| service_->pending_extensions().find(kFakeId);
|
| ASSERT_TRUE(it != service_->pending_extensions().end());
|
| EXPECT_EQ(kFakeUpdateURL, it->second.update_url);
|
| EXPECT_EQ(kFakeIsTheme, it->second.is_theme);
|
| EXPECT_EQ(kFakeInstallSilently, it->second.install_silently);
|
| - EXPECT_TRUE(it->second.version.Equals(*fake_version));
|
| }
|
|
|
| namespace {
|
| @@ -1222,27 +1250,36 @@ const char kGoodId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
|
| const char kGoodUpdateURL[] = "http://good.update/url";
|
| const bool kGoodIsTheme = false;
|
| const bool kGoodInstallSilently = true;
|
| -const char kGoodVersion[] = "1.2.3.4";
|
| +const Extension::State kGoodInitialState = Extension::DISABLED;
|
| +const bool kGoodInitialIncognitoEnabled = true;
|
| } // namespace
|
|
|
| // Test updating a pending extension.
|
| TEST_F(ExtensionsServiceTest, UpdatePendingExtension) {
|
| InitializeEmptyExtensionsService();
|
| - scoped_ptr<Version> good_version(
|
| - Version::GetVersionFromString(kGoodVersion));
|
| - ASSERT_TRUE(good_version.get());
|
| - service_->AddPendingExtension(kGoodId, GURL(kGoodUpdateURL),
|
| - *good_version, kGoodIsTheme,
|
| - kGoodInstallSilently);
|
| + service_->AddPendingExtension(
|
| + kGoodId, GURL(kGoodUpdateURL), kGoodIsTheme,
|
| + kGoodInstallSilently, kGoodInitialState,
|
| + kGoodInitialIncognitoEnabled);
|
| EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId));
|
|
|
| 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");
|
| - UpdateExtension(kGoodId, path, true, true, false);
|
| + UpdateExtension(kGoodId, path, INSTALLED);
|
|
|
| EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId));
|
| +
|
| + Extension* extension = service_->GetExtensionById(kGoodId, true);
|
| + ASSERT_TRUE(extension);
|
| +
|
| + bool enabled = service_->GetExtensionById(kGoodId, false);
|
| + EXPECT_EQ(kGoodInitialState == Extension::ENABLED, enabled);
|
| + EXPECT_EQ(kGoodInitialState,
|
| + service_->extension_prefs()->GetExtensionState(extension->id()));
|
| + EXPECT_EQ(kGoodInitialIncognitoEnabled,
|
| + service_->IsIncognitoEnabled(extension));
|
| }
|
|
|
| // TODO(akalin): Test updating a pending extension non-silently once
|
| @@ -1252,20 +1289,18 @@ TEST_F(ExtensionsServiceTest, UpdatePendingExtension) {
|
| // Test updating a pending extension with wrong is_theme.
|
| TEST_F(ExtensionsServiceTest, UpdatePendingExtensionWrongIsTheme) {
|
| InitializeEmptyExtensionsService();
|
| - scoped_ptr<Version> good_version(
|
| - Version::GetVersionFromString(kGoodVersion));
|
| - ASSERT_TRUE(good_version.get());
|
| // Add pending extension with a flipped is_theme.
|
| - service_->AddPendingExtension(kGoodId, GURL(kGoodUpdateURL),
|
| - *good_version, !kGoodIsTheme,
|
| - kGoodInstallSilently);
|
| + service_->AddPendingExtension(
|
| + kGoodId, GURL(kGoodUpdateURL), !kGoodIsTheme,
|
| + kGoodInstallSilently, kGoodInitialState,
|
| + kGoodInitialIncognitoEnabled);
|
| EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId));
|
|
|
| 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");
|
| - UpdateExtension(kGoodId, path, true, false, false);
|
| + UpdateExtension(kGoodId, path, UPDATED);
|
|
|
| // TODO(akalin): Figure out how to check that the extensions
|
| // directory is cleaned up properly in OnExtensionInstalled().
|
| @@ -1281,7 +1316,7 @@ TEST_F(ExtensionsServiceTest, UpdatePendingExtensionNotPending) {
|
| ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path));
|
| extensions_path = extensions_path.AppendASCII("extensions");
|
| FilePath path = extensions_path.AppendASCII("good.crx");
|
| - UpdateExtension(kGoodId, path, true, false, false);
|
| + UpdateExtension(kGoodId, path, UPDATED);
|
|
|
| EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId));
|
| }
|
| @@ -1302,10 +1337,11 @@ TEST_F(ExtensionsServiceTest, UpdatePendingExtensionAlreadyInstalled) {
|
| // Use AddPendingExtensionInternal() as AddPendingExtension() would
|
| // balk.
|
| service_->AddPendingExtensionInternal(
|
| - good->id(), good->update_url(), *good->version(),
|
| - good->is_theme(), kGoodInstallSilently);
|
| + good->id(), good->update_url(), good->is_theme(),
|
| + kGoodInstallSilently, kGoodInitialState,
|
| + kGoodInitialIncognitoEnabled);
|
|
|
| - UpdateExtension(good->id(), path, true, true, false);
|
| + UpdateExtension(good->id(), path, INSTALLED);
|
|
|
| EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId));
|
| }
|
| @@ -1351,7 +1387,7 @@ TEST_F(ExtensionsServiceTest, UnloadBlacklistedExtension) {
|
| InstallExtension(path, true);
|
| Extension* good = service_->extensions()->at(0);
|
| EXPECT_EQ(good_crx, good->id());
|
| - UpdateExtension(good_crx, path, false, false, false);
|
| + UpdateExtension(good_crx, path, FAILED_SILENTLY);
|
|
|
| std::vector<std::string> blacklist;
|
| blacklist.push_back(good_crx);
|
|
|