summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkerz@chromium.org <kerz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-14 00:11:53 +0000
committerkerz@chromium.org <kerz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-14 00:11:53 +0000
commit0bc918e8e90defae11d41b3af329caaf450a8942 (patch)
treeb21796c68477801b95754cfe9b2fd42e68a7dfe6
parent278ec45f450385d05dfb0b055106946aa94433e2 (diff)
downloadchromium_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.cc5
-rw-r--r--chrome/browser/extensions/extension_prefs_unittest.cc63
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 {