Index: chrome/browser/extensions/extension_pref_store_unittest.cc |
=================================================================== |
--- chrome/browser/extensions/extension_pref_store_unittest.cc (revision 0) |
+++ chrome/browser/extensions/extension_pref_store_unittest.cc (revision 0) |
@@ -0,0 +1,279 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <gtest/gtest.h> |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/values.h" |
+#include "chrome/browser/extensions/extension_pref_store.h" |
+#include "chrome/browser/pref_service.h" |
+#include "chrome/browser/pref_value_store.h" |
+ |
+namespace { |
+ |
+class TestExtensionPrefStore : public ExtensionPrefStore { |
+ public: |
+ TestExtensionPrefStore() : ExtensionPrefStore(NULL) {} |
+ |
+ typedef std::vector<std::string> ExtensionIDs; |
+ void GetExtensionIDList(ExtensionIDs* result) { |
+ GetExtensionIDs(result); |
+ } |
+}; |
+ |
+class MockPrefService : public PrefService { |
+ public: |
+ explicit MockPrefService(PrefValueStore* value_store) |
+ : PrefService(value_store) {} |
+ |
+ // Tracks whether the observers would have been notified. |
+ virtual void FireObserversIfChanged(const wchar_t* pref_name, |
+ const Value* old_value) { |
+ fired_observers_ = PrefIsChanged(pref_name, old_value); |
+ } |
+ |
+ bool fired_observers_; |
+}; |
+ |
+// Use static constants to avoid confusing std::map with hard-coded strings. |
+static const wchar_t* kPref1 = L"path1.subpath"; |
+static const wchar_t* kPref2 = L"path2"; |
+static const wchar_t* kPref3 = L"path3"; |
+static const wchar_t* kPref4 = L"path4"; |
+ |
+} // namespace |
+ |
+TEST(ExtensionPrefStoreTest, InstallOneExtension) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(1u, ids.size()); |
+ EXPECT_EQ("id1", ids[0]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(1u, prefs->size()); |
+ std::string actual; |
+ ASSERT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val1", actual); |
+} |
+ |
+// Make sure the last-installed extension wins. |
+TEST(ExtensionPrefStoreTest, InstallMultipleExtensions) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2")); |
+ eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3")); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(3u, ids.size()); |
+ EXPECT_EQ("id3", ids[0]); |
+ EXPECT_EQ("id2", ids[1]); |
+ EXPECT_EQ("id1", ids[2]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(1u, prefs->size()); |
+ std::string actual; |
+ ASSERT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val3", actual); |
+} |
+ |
+// Make sure the last-installed extension wins for each preference. |
+TEST(ExtensionPrefStoreTest, InstallOverwrittenExtensions) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2")); |
+ eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3")); |
+ |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4")); |
+ eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val5")); |
+ |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val6")); |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val7")); |
+ eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val8")); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(3u, ids.size()); |
+ EXPECT_EQ("id3", ids[0]); |
+ EXPECT_EQ("id2", ids[1]); |
+ EXPECT_EQ("id1", ids[2]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(3u, prefs->size()); |
+ std::string actual; |
+ EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val3", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
+ EXPECT_EQ("val5", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
+ EXPECT_EQ("val8", actual); |
+} |
+ |
+// Make sure the last-installed extension wins even if other extensions set |
+// the same or different preferences later. |
+TEST(ExtensionPrefStoreTest, InstallInterleavedExtensions) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val2")); |
+ eps.InstallExtensionPref("id3", kPref3, Value::CreateStringValue("val3")); |
+ |
+ eps.InstallExtensionPref("id3", kPref3, Value::CreateStringValue("val4")); |
+ eps.InstallExtensionPref("id2", kPref3, Value::CreateStringValue("val5")); |
+ eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val6")); |
+ |
+ eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val7")); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(3u, ids.size()); |
+ EXPECT_EQ("id3", ids[0]); |
+ EXPECT_EQ("id2", ids[1]); |
+ EXPECT_EQ("id1", ids[2]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(3u, prefs->size()); |
+ std::string actual; |
+ EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val7", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
+ EXPECT_EQ("val2", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
+ EXPECT_EQ("val4", actual); |
+} |
+ |
+TEST(ExtensionPrefStoreTest, UninstallOnlyExtension) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val2")); |
+ |
+ // No need to check the state here; the InstallOneExtension already has. |
+ eps.UninstallExtension("id1"); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(0u, ids.size()); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ std::string actual; |
+ // "path1.name" has been removed, but an empty "path1" dictionary is still |
+ // present. |
+ ASSERT_EQ(1u, prefs->size()); |
+ EXPECT_FALSE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_FALSE(prefs->GetString(kPref2, &actual)); |
+} |
+ |
+// Tests uninstalling an extension that wasn't winning for any preferences. |
+TEST(ExtensionPrefStoreTest, UninstallIrrelevantExtension) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2")); |
+ |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val3")); |
+ eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val4")); |
+ |
+ eps.UninstallExtension("id1"); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(1u, ids.size()); |
+ EXPECT_EQ("id2", ids[0]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(2u, prefs->size()); |
+ std::string actual; |
+ EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val2", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
+ EXPECT_EQ("val4", actual); |
+} |
+ |
+// Tests uninstalling an extension that was winning for all preferences. |
+TEST(ExtensionPrefStoreTest, UninstallExtensionFromTop) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2")); |
+ eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3")); |
+ |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4")); |
+ eps.InstallExtensionPref("id3", kPref2, Value::CreateStringValue("val5")); |
+ |
+ eps.UninstallExtension("id3"); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(2u, ids.size()); |
+ EXPECT_EQ("id2", ids[0]); |
+ EXPECT_EQ("id1", ids[1]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(2u, prefs->size()); |
+ std::string actual; |
+ EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val2", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
+ EXPECT_EQ("val4", actual); |
+} |
+ |
+// Tests uninstalling an extension that was winning for only some preferences. |
+TEST(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) { |
+ TestExtensionPrefStore eps; |
+ eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1")); |
+ eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2")); |
+ eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3")); |
+ |
+ eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4")); |
+ eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val5")); |
+ |
+ eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val6")); |
+ |
+ eps.InstallExtensionPref("id2", kPref4, Value::CreateStringValue("val7")); |
+ |
+ eps.UninstallExtension("id2"); |
+ |
+ TestExtensionPrefStore::ExtensionIDs ids; |
+ eps.GetExtensionIDList(&ids); |
+ EXPECT_EQ(2u, ids.size()); |
+ EXPECT_EQ("id3", ids[0]); |
+ EXPECT_EQ("id1", ids[1]); |
+ |
+ DictionaryValue* prefs = eps.prefs(); |
+ ASSERT_EQ(3u, prefs->size()); |
+ std::string actual; |
+ EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
+ EXPECT_EQ("val3", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
+ EXPECT_EQ("val4", actual); |
+ EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
+ EXPECT_EQ("val6", actual); |
+ EXPECT_FALSE(prefs->GetString(kPref4, &actual)); |
+} |
+ |
+TEST(ExtensionPrefStoreTest, NotifyWhenNeeded) { |
+ TestExtensionPrefStore eps; |
+ |
+ // The PrefValueStore takes ownership of the PrefStores; in this case, that's |
+ // only an ExtensionPrefStore. |
+ PrefValueStore* value_store = new PrefValueStore(NULL, &eps, NULL, NULL); |
+ MockPrefService* pref_service = new MockPrefService(value_store); |
+ eps.SetPrefService(pref_service); |
+ pref_service->RegisterStringPref(kPref1, std::string()); |
+ |
+ eps.InstallExtensionPref("abc", kPref1, |
+ Value::CreateStringValue("https://www.chromium.org")); |
+ EXPECT_TRUE(pref_service->fired_observers_); |
+ eps.InstallExtensionPref("abc", kPref1, |
+ Value::CreateStringValue("https://www.chromium.org")); |
+ EXPECT_FALSE(pref_service->fired_observers_); |
+ eps.InstallExtensionPref("abc", kPref1, |
+ Value::CreateStringValue("chrome://newtab")); |
+ EXPECT_TRUE(pref_service->fired_observers_); |
+ |
+ eps.UninstallExtension("abc"); |
+ EXPECT_TRUE(pref_service->fired_observers_); |
+} |
Property changes on: chrome\browser\extensions\extension_pref_store_unittest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |