Index: services/preferences/public/cpp/tests/pref_observer_store_unittest.cc |
diff --git a/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc b/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc |
index b1fcb0453fa207ccaa39e270c8df4fddc8b50454..c9c7f78495506e5d7bad7dd38bf18b7fe9e57640 100644 |
--- a/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc |
+++ b/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc |
@@ -33,9 +33,9 @@ class TestPreferenceManager : public prefs::mojom::PreferencesManager { |
bool set_preferences_called() { return set_preferences_called_; } |
// prefs::mojom::TestPreferenceManager: |
- void AddObserver(const std::vector<std::string>& preferences, |
- prefs::mojom::PreferencesObserverPtr client) override; |
+ void AddObserver(prefs::mojom::PreferencesObserverPtr client) override; |
void SetPreferences(const base::DictionaryValue& preferences) override; |
+ void Subscribe(const std::vector<std::string>& preferences) override; |
private: |
bool add_observer_called_; |
@@ -47,11 +47,8 @@ class TestPreferenceManager : public prefs::mojom::PreferencesManager { |
}; |
void TestPreferenceManager::AddObserver( |
- const std::vector<std::string>& preferences, |
prefs::mojom::PreferencesObserverPtr client) { |
add_observer_called_ = true; |
- last_preference_set_.clear(); |
- last_preference_set_.insert(preferences.begin(), preferences.end()); |
} |
void TestPreferenceManager::SetPreferences( |
@@ -59,6 +56,13 @@ void TestPreferenceManager::SetPreferences( |
set_preferences_called_ = true; |
} |
+void TestPreferenceManager::Subscribe( |
+ const std::vector<std::string>& preferences) { |
+ LOG(ERROR) << "JR Subscribe!!!\n"; |
+ last_preference_set_.clear(); |
+ last_preference_set_.insert(preferences.begin(), preferences.end()); |
+} |
+ |
} // namespace |
class PrefObserverStoreTest : public testing::Test { |
@@ -106,7 +110,7 @@ TEST_F(PrefObserverStoreTest, Initialization) { |
std::set<std::string> keys; |
const std::string key("hey"); |
keys.insert(key); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
EXPECT_FALSE(Initialized()); |
EXPECT_FALSE(observer()->initialized); |
@@ -139,7 +143,7 @@ TEST_F(PrefObserverStoreTest, SetValueSilently) { |
std::set<std::string> keys; |
const std::string key("hey"); |
keys.insert(key); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
const int kValue = 42; |
base::FundamentalValue pref(kValue); |
@@ -155,7 +159,7 @@ TEST_F(PrefObserverStoreTest, ReportValueChanged) { |
std::set<std::string> keys; |
const std::string key("hey"); |
keys.insert(key); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
const int kValue = 42; |
base::FundamentalValue pref(kValue); |
@@ -178,7 +182,7 @@ TEST_F(PrefObserverStoreTest, MultipleKeyInitialization) { |
const std::string key2("listen"); |
keys.insert(key1); |
keys.insert(key2); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
EXPECT_FALSE(Initialized()); |
EXPECT_FALSE(observer()->initialized); |
@@ -211,7 +215,7 @@ TEST_F(PrefObserverStoreTest, InvalidInitialization) { |
std::set<std::string> keys; |
const std::string key("hey"); |
keys.insert(key); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
const std::string kInvalidKey("look"); |
const int kValue = 42; |
@@ -231,7 +235,7 @@ TEST_F(PrefObserverStoreTest, WriteToNestedPrefs) { |
const std::string key2("listen"); |
keys.insert(key1); |
keys.insert(key2); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
EXPECT_FALSE(Initialized()); |
EXPECT_FALSE(observer()->initialized); |
@@ -292,7 +296,7 @@ TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) { |
const std::string key2("listen"); |
keys.insert(key1); |
keys.insert(key2); |
- store()->Init(keys); |
+ store()->Subscribe(keys); |
EXPECT_FALSE(Initialized()); |
EXPECT_FALSE(observer()->initialized); |
@@ -333,3 +337,50 @@ TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) { |
EXPECT_EQ(1u, observer()->changed_keys.size()); |
EXPECT_TRUE(manager()->set_preferences_called()); |
} |
+ |
+// Tests that a PrefObserverStore can subscribe multiple times to different |
+// keys. |
+TEST_F(PrefObserverStoreTest, MultipleSubscriptions) { |
+ std::set<std::string> keys1; |
+ const std::string key1("hey"); |
+ keys1.insert(key1); |
+ store()->Subscribe(keys1); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_NE(manager()->last_preference_set().end(), |
+ manager()->last_preference_set().find(key1)); |
+ |
+ std::set<std::string> keys2; |
+ const std::string key2("listen"); |
+ keys2.insert(key2); |
+ store()->Subscribe(keys2); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_NE(manager()->last_preference_set().end(), |
+ manager()->last_preference_set().find(key2)); |
+} |
+ |
+// Tests that multiple PrefStore::Observers can be added to a PrefObserverStore |
+// and that they are each notified of changes. |
+TEST_F(PrefObserverStoreTest, MultipleObservers) { |
+ PrefStoreObserverMock observer2; |
+ store()->AddObserver(&observer2); |
+ |
+ std::set<std::string> keys; |
+ const std::string key("hey"); |
+ keys.insert(key); |
+ store()->Subscribe(keys); |
+ |
+ const int kValue = 42; |
+ base::FundamentalValue pref(kValue); |
+ base::DictionaryValue prefs; |
+ prefs.Set(key, pref.CreateDeepCopy()); |
+ |
+ // PreferenceManager notifies of PreferencesChanged, completing |
+ // initialization. |
+ OnPreferencesChanged(prefs); |
+ EXPECT_TRUE(observer()->initialized); |
+ EXPECT_TRUE(observer2.initialized); |
+ EXPECT_TRUE(observer()->initialization_success); |
+ EXPECT_TRUE(observer2.initialization_success); |
+ observer()->VerifyAndResetChangedKey(key); |
+ observer2.VerifyAndResetChangedKey(key); |
+} |