| 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 1411d78d9c23d4db43063d47c42ad4515df7c6e5..ab380fd26a6004603b0b11795984a355b8b96490 100644
|
| --- a/chrome/browser/extensions/extensions_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extensions_service_unittest.cc
|
| @@ -33,13 +33,13 @@ namespace {
|
| // Extension ids used during testing.
|
| const char* const all_zero = "0000000000000000000000000000000000000000";
|
| const char* const zero_n_one = "0000000000000000000000000000000000000001";
|
| -const char* const good0 = "00123456789abcdef0123456789abcdef0123456";
|
| -const char* const good1 = "10123456789abcdef0123456789abcdef0123456";
|
| -const char* const good2 = "20123456789abcdef0123456789abcdef0123456";
|
| -const char* const good_crx = "00123456789abcdef0123456789abcdef0123456";
|
| -const char* const page_action = "8a5e4cb023c61b431e9b603a97c293429ce057c8";
|
| -const char* const theme_crx = "f0123456789abcdef0123456789abcdef0126456";
|
| -const char* const theme2_crx = "f0123456789adddef0123456789abcdef0126456";
|
| +const char* const good0 = "fc6f6ba6693faf6773c13701019f2e7a12f0febe";
|
| +const char* const good1 = "e5ead92b2c6795c1d2b92df9c5cb37de5582471a";
|
| +const char* const good2 = "a37fed892f622823f4daaec4426a32fc7f6147dc";
|
| +const char* const good_crx = "b3dd733cd71a98fa83f387455e12f5c5501c519e";
|
| +const char* const page_action = "a4ca7d01469a010acb200568a0b8f4d9b3ac1f91";
|
| +const char* const theme_crx = "80c45f5ae9e0f839d105c6a6d2461a036bc40a04";
|
| +const char* const theme2_crx = "f9f6c52c01efdd5edd7c396b5f995a15fc7ad6d1";
|
|
|
| struct ExtensionsOrder {
|
| bool operator()(const Extension* a, const Extension* b) {
|
| @@ -303,7 +303,7 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) {
|
| }
|
| ASSERT_EQ(3u, loaded_.size());
|
|
|
| - EXPECT_EQ(std::string(good_crx), loaded_[0]->id());
|
| + EXPECT_EQ(std::string(good0), loaded_[0]->id());
|
| EXPECT_EQ(std::string("My extension 1"),
|
| loaded_[0]->name());
|
| EXPECT_EQ(std::string("The first extension that I made."),
|
| @@ -313,8 +313,8 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) {
|
| EXPECT_EQ(3u, service_->extensions()->size());
|
|
|
| ValidatePrefKeyCount(3);
|
| - ValidatePref(good_crx, L"state", Extension::ENABLED);
|
| - ValidatePref(good_crx, L"location", Extension::INTERNAL);
|
| + ValidatePref(good0, L"state", Extension::ENABLED);
|
| + ValidatePref(good0, L"location", Extension::INTERNAL);
|
| ValidatePref(good1, L"state", Extension::ENABLED);
|
| ValidatePref(good1, L"location", Extension::INTERNAL);
|
| ValidatePref(good2, L"state", Extension::ENABLED);
|
| @@ -466,6 +466,10 @@ TEST_F(ExtensionsServiceTest, InstallExtension) {
|
| ValidatePref(page_action, L"state", Extension::ENABLED);
|
| ValidatePref(page_action, L"location", Extension::INTERNAL);
|
|
|
| + // Bad signature.
|
| + path = extensions_path.AppendASCII("bad_signature.crx");
|
| + InstallExtension(path, false);
|
| +
|
| // 0-length extension file.
|
| path = extensions_path.AppendASCII("not_an_extension.crx");
|
| InstallExtension(path, false);
|
| @@ -476,16 +480,6 @@ TEST_F(ExtensionsServiceTest, InstallExtension) {
|
| InstallExtension(path, false);
|
| ValidatePrefKeyCount(pref_count);
|
|
|
| - // Poorly formed JSON.
|
| - path = extensions_path.AppendASCII("bad_json.crx");
|
| - InstallExtension(path, false);
|
| - ValidatePrefKeyCount(pref_count);
|
| -
|
| - // Incorrect zip hash.
|
| - path = extensions_path.AppendASCII("bad_hash.crx");
|
| - InstallExtension(path, false);
|
| - ValidatePrefKeyCount(pref_count);
|
| -
|
| // TODO(erikkay): add more tests for many of the failure cases.
|
| // TODO(erikkay): add tests for upgrade cases.
|
| }
|
| @@ -627,6 +621,56 @@ TEST_F(ExtensionsServiceTest, Reinstall) {
|
| ValidatePref(good_crx, L"location", Extension::INTERNAL);
|
| }
|
|
|
| +// Test upgrading a signed extension.
|
| +TEST_F(ExtensionsServiceTest, UpgradeSignedGood) {
|
| + 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");
|
| + service_->InstallExtension(path);
|
| + loop_.RunAllPending();
|
| +
|
| + ASSERT_TRUE(installed_);
|
| + ASSERT_EQ(1u, loaded_.size());
|
| + ASSERT_EQ(0u, GetErrors().size());
|
| +
|
| + // Upgrade to version 2.0
|
| + path = extensions_path.AppendASCII("good2.crx");
|
| + service_->InstallExtension(path);
|
| + loop_.RunAllPending();
|
| +
|
| + ASSERT_TRUE(installed_);
|
| + ASSERT_EQ(2u, loaded_.size());
|
| + ASSERT_EQ(0u, GetErrors().size());
|
| +}
|
| +
|
| +// Test upgrading a signed extension with a bad signature.
|
| +TEST_F(ExtensionsServiceTest, UpgradeSignedBad) {
|
| + 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");
|
| + service_->InstallExtension(path);
|
| + loop_.RunAllPending();
|
| +
|
| + ASSERT_TRUE(installed_);
|
| + ASSERT_EQ(1u, loaded_.size());
|
| + ASSERT_EQ(0u, GetErrors().size());
|
| + installed_ = NULL;
|
| +
|
| + // Try upgrading with a bad signature. This should fail during the unpack,
|
| + // because the key will not match the signature.
|
| + path = extensions_path.AppendASCII("good2_bad_signature.crx");
|
| + service_->InstallExtension(path);
|
| + loop_.RunAllPending();
|
| +
|
| + ASSERT_FALSE(installed_);
|
| + ASSERT_EQ(1u, loaded_.size());
|
| + ASSERT_EQ(1u, GetErrors().size());
|
| +}
|
| +
|
| // Tests uninstalling normal extensions
|
| TEST_F(ExtensionsServiceTest, UninstallExtension) {
|
| FilePath extensions_path;
|
| @@ -724,6 +768,8 @@ TEST_F(ExtensionsServiceTest, LoadExtension) {
|
| // Tests that we generate IDs when they are not specified in the manifest for
|
| // --load-extension.
|
| TEST_F(ExtensionsServiceTest, GenerateID) {
|
| + Extension::ResetGeneratedIdCounter();
|
| +
|
| FilePath extensions_path;
|
| ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path));
|
| extensions_path = extensions_path.AppendASCII("extensions");
|
|
|