diff options
author | kerz@chromium.org <kerz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-14 00:11:53 +0000 |
---|---|---|
committer | kerz@chromium.org <kerz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-14 00:11:53 +0000 |
commit | 0bc918e8e90defae11d41b3af329caaf450a8942 (patch) | |
tree | b21796c68477801b95754cfe9b2fd42e68a7dfe6 | |
parent | 278ec45f450385d05dfb0b055106946aa94433e2 (diff) | |
download | chromium_src-0bc918e8e90defae11d41b3af329caaf450a8942.zip chromium_src-0bc918e8e90defae11d41b3af329caaf450a8942.tar.gz chromium_src-0bc918e8e90defae11d41b3af329caaf450a8942.tar.bz2 |
Merge 217394 "Don't merge two versions of the manifest together ..."
> Don't merge two versions of the manifest together when updating an extension, instead make sure the new version overwrites the old one.
>
> BUG=272524
> NOTRY=true
>
> Review URL: https://chromiumcodereview.appspot.com/22823004
TBR=mek@chromium.org
Review URL: https://codereview.chromium.org/22936003
git-svn-id: svn://svn.chromium.org/chrome/branches/1547/src@217398 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/extension_prefs.cc | 5 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_prefs_unittest.cc | 63 |
2 files changed, 67 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 9fe9d3d..ecf7236 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -1392,7 +1392,10 @@ bool ExtensionPrefs::FinishDelayedInstallInfo( base::Int64ToString(install_time.ToInternalValue()))); // Commit the delayed install data. - extension_dict->MergeDictionary(pending_install_dict); + for (DictionaryValue::Iterator it(*pending_install_dict); !it.IsAtEnd(); + it.Advance()) { + extension_dict->Set(it.key(), it.value().DeepCopy()); + } FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal, suggested_page_ordinal, extension_dict); return true; diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc index 08d07d6..f624fd4 100644 --- a/chrome/browser/extensions/extension_prefs_unittest.cc +++ b/chrome/browser/extensions/extension_prefs_unittest.cc @@ -546,6 +546,69 @@ class ExtensionPrefsDelayedInstallInfo : public ExtensionPrefsTest { }; TEST_F(ExtensionPrefsDelayedInstallInfo, DelayedInstallInfo) {} +// Tests the FinishDelayedInstallInfo function. +class ExtensionPrefsFinishDelayedInstallInfo : public ExtensionPrefsTest { + public: + virtual void Initialize() OVERRIDE { + DictionaryValue dictionary; + dictionary.SetString(extension_manifest_keys::kName, "test"); + dictionary.SetString(extension_manifest_keys::kVersion, "0.1"); + dictionary.SetString(extension_manifest_keys::kBackgroundPage, + "background.html"); + scoped_refptr<Extension> extension = + prefs_.AddExtensionWithManifest(dictionary, Manifest::INTERNAL); + id_ = extension->id(); + + + // Set idle info + DictionaryValue manifest; + manifest.SetString(extension_manifest_keys::kName, "test"); + manifest.SetString(extension_manifest_keys::kVersion, "0.2"); + scoped_ptr<ListValue> scripts(new ListValue); + scripts->AppendString("test.js"); + manifest.Set(extension_manifest_keys::kBackgroundScripts, + scripts.release()); + base::FilePath path = + prefs_.extensions_dir().AppendASCII("test_0.2"); + std::string errors; + scoped_refptr<Extension> new_extension = Extension::Create( + path, Manifest::INTERNAL, manifest, Extension::NO_FLAGS, id_, &errors); + ASSERT_TRUE(new_extension.get()) << errors; + ASSERT_EQ(id_, new_extension->id()); + prefs()->SetDelayedInstallInfo(new_extension.get(), + Extension::ENABLED, + Blacklist::NOT_BLACKLISTED, + ExtensionPrefs::DELAY_REASON_WAIT_FOR_IDLE, + syncer::StringOrdinal()); + + // Finish idle installation + ASSERT_TRUE(prefs()->FinishDelayedInstallInfo(id_)); + } + + virtual void Verify() OVERRIDE { + EXPECT_FALSE(prefs()->GetDelayedInstallInfo(id_)); + + const DictionaryValue* manifest; + ASSERT_TRUE(prefs()->ReadPrefAsDictionary(id_, "manifest", &manifest)); + ASSERT_TRUE(manifest); + std::string value; + EXPECT_TRUE(manifest->GetString(extension_manifest_keys::kName, &value)); + EXPECT_EQ("test", value); + EXPECT_TRUE(manifest->GetString(extension_manifest_keys::kVersion, &value)); + EXPECT_EQ("0.2", value); + EXPECT_FALSE(manifest->GetString(extension_manifest_keys::kBackgroundPage, + &value)); + const ListValue* scripts; + ASSERT_TRUE(manifest->GetList(extension_manifest_keys::kBackgroundScripts, + &scripts)); + EXPECT_EQ(1u, scripts->GetSize()); + } + + protected: + std::string id_; +}; +TEST_F(ExtensionPrefsFinishDelayedInstallInfo, FinishDelayedInstallInfo) {} + class ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest { public: virtual void Initialize() OVERRIDE { |