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

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

Issue 1232003: Added support for pending extensions to ExtensionsService and (Closed)
Patch Set: synced to head Created 10 years, 9 months 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
« no previous file with comments | « chrome/browser/extensions/extensions_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ff9a2b6d89f297fa7f05bc32157dd3e673fc1459..c475884f2f76d7522960ab9e42f6477fdc2bb895 100644
--- a/chrome/browser/extensions/extensions_service_unittest.cc
+++ b/chrome/browser/extensions/extensions_service_unittest.cc
@@ -13,9 +13,11 @@
#include "base/json/json_reader.h"
#include "base/message_loop.h"
#include "base/path_service.h"
+#include "base/scoped_ptr.h"
#include "base/string16.h"
#include "base/string_util.h"
#include "base/task.h"
+#include "base/version.h"
#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_creator.h"
#include "chrome/browser/extensions/extensions_service.h"
@@ -398,7 +400,8 @@ class ExtensionsServiceTest
}
void UpdateExtension(const std::string& id, const FilePath& in_path,
- bool should_succeed, bool expect_report_on_failure) {
+ bool should_succeed, bool should_install,
+ bool expect_report_on_failure) {
ASSERT_TRUE(file_util::PathExists(in_path));
// We need to copy this to a temporary location because Update() will delete
@@ -413,7 +416,7 @@ class ExtensionsServiceTest
if (should_succeed) {
EXPECT_EQ(0u, errors.size()) << path.value();
- EXPECT_EQ(1u, service_->extensions()->size());
+ EXPECT_EQ(should_install ? 1u : 0u, service_->extensions()->size());
} else {
if (expect_report_on_failure) {
EXPECT_EQ(1u, errors.size()) << path.value();
@@ -1048,7 +1051,7 @@ TEST_F(ExtensionsServiceTest, UpdateExtension) {
ASSERT_EQ(good_crx, good->id());
path = extensions_path.AppendASCII("good2.crx");
- UpdateExtension(good_crx, path, true, true);
+ UpdateExtension(good_crx, path, true, true, true);
ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString());
}
@@ -1060,7 +1063,7 @@ TEST_F(ExtensionsServiceTest, UpdateNotInstalledExtension) {
extensions_path = extensions_path.AppendASCII("extensions");
FilePath path = extensions_path.AppendASCII("good.crx");
- service_->UpdateExtension(good_crx, path, GURL());
+ UpdateExtension(good_crx, path, true, false, true);
loop_.RunAllPending();
ASSERT_EQ(0u, service_->extensions()->size());
@@ -1084,7 +1087,7 @@ TEST_F(ExtensionsServiceTest, UpdateWillNotDowngrade) {
// Change path from good2.crx -> good.crx
path = extensions_path.AppendASCII("good.crx");
- UpdateExtension(good_crx, path, false, true);
+ UpdateExtension(good_crx, path, false, false, true);
ASSERT_EQ("1.0.0.1", service_->extensions()->at(0)->VersionString());
}
@@ -1100,7 +1103,141 @@ 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);
+ UpdateExtension(good_crx, path, false, false, false);
+}
+
+// Test adding a pending extension.
+TEST_F(ExtensionsServiceTest, AddPendingExtension) {
+ InitializeEmptyExtensionsService();
+
+ 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);
+
+ service_->AddPendingExtension(kFakeId, kFakeUpdateURL,
+ *fake_version, kFakeIsTheme,
+ kFakeInstallSilently);
+ 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));
+}
+
+// Test adding a pending extension for one that is already installed.
+TEST_F(ExtensionsServiceTest, AddPendingExtensionAlreadyInstalled) {
+ 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");
+ InstallExtension(path, true);
+ Extension* good = service_->extensions()->at(0);
+ const bool kInstallSilently(true);
+
+ service_->AddPendingExtension(good->id(), good->update_url(),
+ *good->version(), good->IsTheme(),
+ kInstallSilently);
+ EXPECT_FALSE(ContainsKey(service_->pending_extensions(), good->id()));
+}
+
+namespace {
+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";
+} // 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);
+ 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);
+
+ EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId));
+}
+
+// TODO(akalin): Test updating a pending extension non-silently once
+// we can mock out ExtensionInstallUI and inject our version into
+// UpdateExtension().
+
+// 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);
+ 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);
+
+ // TODO(akalin): Figure out how to check that the extensions
+ // directory is cleaned up properly in OnExtensionInstalled().
+
+ EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId));
+}
+
+// Test updating a pending extension for one that is not pending.
+TEST_F(ExtensionsServiceTest, UpdatePendingExtensionNotPending) {
+ 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");
+ UpdateExtension(kGoodId, path, true, false, false);
+
+ EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId));
+}
+
+// Test updating a pending extension for one that is already
+// installed.
+TEST_F(ExtensionsServiceTest, UpdatePendingExtensionAlreadyInstalled) {
+ 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");
+ InstallExtension(path, true);
+ ASSERT_EQ(1u, service_->extensions()->size());
+ Extension* good = service_->extensions()->at(0);
+
+ // Use AddPendingExtensionInternal() as AddPendingExtension() would
+ // balk.
+ service_->AddPendingExtensionInternal(
+ good->id(), good->update_url(), *good->version(),
+ good->IsTheme(), kGoodInstallSilently);
+
+ UpdateExtension(good->id(), path, true, true, false);
+
+ EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId));
}
// Test pref settings for blacklist and unblacklist extensions.
@@ -1144,7 +1281,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);
+ UpdateExtension(good_crx, path, false, false, false);
std::vector<std::string> blacklist;
blacklist.push_back(good_crx);
« no previous file with comments | « chrome/browser/extensions/extensions_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698