Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2803)

Unified Diff: chrome/browser/extensions/extension_pref_store_unittest.cc

Issue 4438001: First part to fix Bug 50726 "Save extension list and "winning" prefs from extensions" (Closed) Base URL: http://git.chromium.org/git/chromium.git/@trunk
Patch Set: whitespaces Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/extension_pref_store.cc ('k') | chrome/browser/extensions/extension_prefs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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]);
+}
+
« no previous file with comments | « chrome/browser/extensions/extension_pref_store.cc ('k') | chrome/browser/extensions/extension_prefs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698