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]); |
+} |
+ |