| Index: chrome/browser/extensions/extension_pref_store_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_pref_store_unittest.cc b/chrome/browser/extensions/extension_pref_store_unittest.cc
|
| index 90bed623ba78d4942840500f5c7aa4c271ec0674..b1dafbe04888c2bda7cb7b7a772713b2b041c92c 100644
|
| --- a/chrome/browser/extensions/extension_pref_store_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_pref_store_unittest.cc
|
| @@ -69,6 +69,16 @@ class TestExtensionPrefStore : public ExtensionPrefStore {
|
| return pref_service_;
|
| }
|
|
|
| + virtual void PersistExtensionPrecedences(
|
| + const std::vector<std::string>& precedence) {
|
| + precedence_ = precedence;
|
| + }
|
| +
|
| + virtual void GetExtensionPrecedences(
|
| + std::vector<std::string>* precedence) const {
|
| + *precedence = precedence_;
|
| + }
|
| +
|
| // Weak references, for convenience.
|
| Extension* ext1;
|
| Extension* ext2;
|
| @@ -83,6 +93,8 @@ class TestExtensionPrefStore : public ExtensionPrefStore {
|
|
|
| // Weak reference.
|
| PrefService* pref_service_;
|
| +
|
| + std::vector<std::string> precedence_;
|
| };
|
|
|
| // Mock PrefNotifier that allows the notifications to be tracked.
|
| @@ -123,7 +135,7 @@ TEST(ExtensionPrefStoreTest, InstallOneExtension) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(1u, ids.size());
|
| + ASSERT_EQ(1u, ids.size());
|
| EXPECT_EQ(eps.ext1->id(), ids[0]);
|
|
|
| DictionaryValue* prefs = eps.prefs();
|
| @@ -143,11 +155,18 @@ TEST(ExtensionPrefStoreTest, InstallMultipleExtensions) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(3u, ids.size());
|
| + ASSERT_EQ(3u, ids.size());
|
| EXPECT_EQ(eps.ext3->id(), ids[0]);
|
| EXPECT_EQ(eps.ext2->id(), ids[1]);
|
| EXPECT_EQ(eps.ext1->id(), ids[2]);
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(3u, precedences.size());
|
| + EXPECT_EQ(eps.ext1->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext2->id(), precedences[1]);
|
| + EXPECT_EQ(eps.ext3->id(), precedences[2]);
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| ASSERT_EQ(1u, prefs->size());
|
| std::string actual;
|
| @@ -172,11 +191,18 @@ TEST(ExtensionPrefStoreTest, InstallOverwrittenExtensions) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(3u, ids.size());
|
| + ASSERT_EQ(3u, ids.size());
|
| EXPECT_EQ(eps.ext3->id(), ids[0]);
|
| EXPECT_EQ(eps.ext2->id(), ids[1]);
|
| EXPECT_EQ(eps.ext1->id(), ids[2]);
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(3u, precedences.size());
|
| + EXPECT_EQ(eps.ext1->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext2->id(), precedences[1]);
|
| + EXPECT_EQ(eps.ext3->id(), precedences[2]);
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| ASSERT_EQ(3u, prefs->size());
|
| std::string actual;
|
| @@ -205,11 +231,18 @@ TEST(ExtensionPrefStoreTest, InstallInterleavedExtensions) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(3u, ids.size());
|
| + ASSERT_EQ(3u, ids.size());
|
| EXPECT_EQ(eps.ext3->id(), ids[0]);
|
| EXPECT_EQ(eps.ext2->id(), ids[1]);
|
| EXPECT_EQ(eps.ext1->id(), ids[2]);
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(3u, precedences.size());
|
| + EXPECT_EQ(eps.ext1->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext2->id(), precedences[1]);
|
| + EXPECT_EQ(eps.ext3->id(), precedences[2]);
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| ASSERT_EQ(3u, prefs->size());
|
| std::string actual;
|
| @@ -234,6 +267,10 @@ TEST(ExtensionPrefStoreTest, UninstallOnlyExtension) {
|
| eps.GetExtensionIDList(&ids);
|
| EXPECT_EQ(0u, ids.size());
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + EXPECT_EQ(0u, precedences.size());
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| std::string actual;
|
| // "path1.name" has been removed, but an empty "path1" dictionary is still
|
| @@ -257,9 +294,14 @@ TEST(ExtensionPrefStoreTest, UninstallIrrelevantExtension) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(1u, ids.size());
|
| + ASSERT_EQ(1u, ids.size());
|
| EXPECT_EQ(eps.ext2->id(), ids[0]);
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(1u, precedences.size());
|
| + EXPECT_EQ(eps.ext2->id(), precedences[0]);
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| ASSERT_EQ(2u, prefs->size());
|
| std::string actual;
|
| @@ -284,10 +326,16 @@ TEST(ExtensionPrefStoreTest, UninstallExtensionFromTop) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(2u, ids.size());
|
| + ASSERT_EQ(2u, ids.size());
|
| EXPECT_EQ(eps.ext2->id(), ids[0]);
|
| EXPECT_EQ(eps.ext1->id(), ids[1]);
|
|
|
| + std::vector<std::string> precedences;
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(2u, precedences.size());
|
| + EXPECT_EQ(eps.ext1->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext2->id(), precedences[1]);
|
| +
|
| DictionaryValue* prefs = eps.prefs();
|
| ASSERT_EQ(2u, prefs->size());
|
| std::string actual;
|
| @@ -316,7 +364,7 @@ TEST(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) {
|
|
|
| TestExtensionPrefStore::ExtensionIDs ids;
|
| eps.GetExtensionIDList(&ids);
|
| - EXPECT_EQ(2u, ids.size());
|
| + ASSERT_EQ(2u, ids.size());
|
| EXPECT_EQ(eps.ext3->id(), ids[0]);
|
| EXPECT_EQ(eps.ext1->id(), ids[1]);
|
|
|
| @@ -367,3 +415,100 @@ TEST(ExtensionPrefStoreTest, NotifyWhenNeeded) {
|
| Value::CreateStringValue("chrome://newtab"));
|
| eps->UninstallExtension(eps->ext1);
|
| }
|
| +
|
| +// Make sure the precedence is respected when extensions are loaded
|
| +// and the precedence of extensions has been defined in the pref stores already.
|
| +TEST(ExtensionPrefStoreTest, InstallRegisteredExtensions) {
|
| + TestExtensionPrefStore eps;
|
| + ASSERT_TRUE(eps.ext1 != NULL);
|
| +
|
| + std::vector<std::string> precedences;
|
| + precedences.push_back(eps.ext3->id());
|
| + precedences.push_back(eps.ext1->id());
|
| + precedences.push_back(eps.ext2->id());
|
| + eps.PersistExtensionPrecedences(precedences);
|
| +
|
| + eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
|
| + {
|
| + DictionaryValue* prefs = eps.prefs();
|
| + ASSERT_EQ(1u, prefs->size());
|
| + std::string actual;
|
| + EXPECT_TRUE(prefs->GetString(kPref1, &actual));
|
| + EXPECT_EQ("val1", actual);
|
| + }
|
| +
|
| + // ext2 has higher higher precedence --> override
|
| + eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
|
| + {
|
| + DictionaryValue* prefs = eps.prefs();
|
| + ASSERT_EQ(1u, prefs->size());
|
| + std::string actual;
|
| + EXPECT_TRUE(prefs->GetString(kPref1, &actual));
|
| + EXPECT_EQ("val2", actual);
|
| + }
|
| +
|
| + // ext3 has lower precedence --> does not override
|
| + eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
|
| + {
|
| + DictionaryValue* prefs = eps.prefs();
|
| + ASSERT_EQ(1u, prefs->size());
|
| + std::string actual;
|
| + EXPECT_TRUE(prefs->GetString(kPref1, &actual));
|
| + EXPECT_EQ("val2", actual);
|
| + }
|
| +
|
| + TestExtensionPrefStore::ExtensionIDs ids;
|
| + eps.GetExtensionIDList(&ids);
|
| + ASSERT_EQ(3u, ids.size());
|
| + EXPECT_EQ(eps.ext2->id(), ids[0]);
|
| + EXPECT_EQ(eps.ext1->id(), ids[1]);
|
| + EXPECT_EQ(eps.ext3->id(), ids[2]);
|
| +
|
| + precedences.clear();
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(3u, precedences.size());
|
| + EXPECT_EQ(eps.ext3->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext1->id(), precedences[1]);
|
| + EXPECT_EQ(eps.ext2->id(), precedences[2]);
|
| +}
|
| +
|
| +// Make sure the precedence is respected when extensions are loaded and
|
| +// uninstalled later.
|
| +TEST(ExtensionPrefStoreTest, UninstallRegisteredExtensions) {
|
| + TestExtensionPrefStore eps;
|
| + ASSERT_TRUE(eps.ext1 != NULL);
|
| +
|
| + std::vector<std::string> precedences;
|
| + precedences.push_back(eps.ext3->id());
|
| + precedences.push_back(eps.ext1->id());
|
| + precedences.push_back(eps.ext2->id());
|
| + eps.PersistExtensionPrecedences(precedences);
|
| +
|
| + eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
|
| + eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
|
| + eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
|
| +
|
| + // Correct state of this setup is ensured by InstallRegisteredExtensions test
|
| +
|
| + eps.UninstallExtension(eps.ext2);
|
| + {
|
| + DictionaryValue* prefs = eps.prefs();
|
| + ASSERT_EQ(1u, prefs->size());
|
| + std::string actual;
|
| + EXPECT_TRUE(prefs->GetString(kPref1, &actual));
|
| + EXPECT_EQ("val1", actual);
|
| + }
|
| +
|
| + TestExtensionPrefStore::ExtensionIDs ids;
|
| + eps.GetExtensionIDList(&ids);
|
| + ASSERT_EQ(2u, ids.size());
|
| + EXPECT_EQ(eps.ext1->id(), ids[0]);
|
| + EXPECT_EQ(eps.ext3->id(), ids[1]);
|
| +
|
| + precedences.clear();
|
| + eps.GetExtensionPrecedences(&precedences);
|
| + ASSERT_EQ(2u, precedences.size());
|
| + EXPECT_EQ(eps.ext3->id(), precedences[0]);
|
| + EXPECT_EQ(eps.ext1->id(), precedences[1]);
|
| +}
|
| +
|
|
|