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

Unified Diff: chrome/browser/prefs/pref_value_store_unittest.cc

Issue 5441002: Clean up pref change notification handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix extension prefs breakage Created 10 years 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/prefs/pref_value_store.cc ('k') | chrome/browser/prefs/scoped_pref_update.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/pref_value_store_unittest.cc
diff --git a/chrome/browser/prefs/pref_value_store_unittest.cc b/chrome/browser/prefs/pref_value_store_unittest.cc
index b67fc0506fe410ff99def9a0f4f55a69f85ef3e1..851a6bb3068cf0ad2ddd90b14fa46614c3f100e5 100644
--- a/chrome/browser/prefs/pref_value_store_unittest.cc
+++ b/chrome/browser/prefs/pref_value_store_unittest.cc
@@ -2,26 +2,49 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <set>
+#include <string>
+
#include "base/scoped_ptr.h"
#include "base/values.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/policy/configuration_policy_pref_store.h"
-#include "chrome/browser/prefs/dummy_pref_store.h"
+#include "chrome/browser/prefs/pref_notifier.h"
#include "chrome/browser/prefs/pref_value_store.h"
+#include "chrome/browser/prefs/testing_pref_store.h"
#include "chrome/common/pref_names.h"
-#include "chrome/test/testing_pref_value_store.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::_;
+using testing::AnyNumber;
using testing::Mock;
+using testing::Invoke;
namespace {
-class MockPolicyRefreshCallback {
+// Records preference changes.
+class PrefChangeRecorder {
+ public:
+ void Record(const std::string& pref_name) {
+ changed_prefs_.insert(pref_name);
+ }
+
+ void Clear() {
+ changed_prefs_.clear();
+ }
+
+ const std::set<std::string>& changed_prefs() { return changed_prefs_; }
+
+ private:
+ std::set<std::string> changed_prefs_;
+};
+
+// Allows to capture pref notifications through gmock.
+class MockPrefNotifier : public PrefNotifier {
public:
- MockPolicyRefreshCallback() {}
- MOCK_METHOD1(DoCallback, void(const std::vector<std::string>));
+ MOCK_METHOD1(OnPreferenceChanged, void(const std::string&));
+ MOCK_METHOD0(OnInitializationCompleted, void());
};
} // namespace
@@ -83,44 +106,26 @@ const std::string kSearchProviderNameValue = "AreYouFeelingExtraLucky";
class PrefValueStoreTest : public testing::Test {
protected:
virtual void SetUp() {
- // Create dummy user preferences.
- managed_platform_prefs_= CreateManagedPlatformPrefs();
- device_management_prefs_ = CreateDeviceManagementPrefs();
- extension_prefs_ = CreateExtensionPrefs();
- command_line_prefs_ = CreateCommandLinePrefs();
- user_prefs_ = CreateUserPrefs();
- recommended_prefs_ = CreateRecommendedPrefs();
- default_prefs_ = CreateDefaultPrefs();
-
- std::sort(expected_differing_paths_.begin(),
- expected_differing_paths_.end());
-
- // Create |DummyPrefStore|s.
- managed_platform_pref_store_ = new DummyPrefStore();
- managed_platform_pref_store_->set_prefs(managed_platform_prefs_);
- device_management_pref_store_ = new DummyPrefStore();
- device_management_pref_store_->set_prefs(device_management_prefs_);
- extension_pref_store_ = new DummyPrefStore();
- extension_pref_store_->set_prefs(extension_prefs_);
- command_line_pref_store_ = new DummyPrefStore();
- command_line_pref_store_->set_prefs(command_line_prefs_);
- user_pref_store_ = new DummyPrefStore();
- user_pref_store_->set_read_only(false);
- user_pref_store_->set_prefs(user_prefs_);
- recommended_pref_store_ = new DummyPrefStore();
- recommended_pref_store_->set_prefs(recommended_prefs_);
- default_pref_store_ = new DummyPrefStore();
- default_pref_store_->set_prefs(default_prefs_);
+ // Create TestingPrefStores.
+ CreateManagedPlatformPrefs();
+ CreateDeviceManagementPrefs();
+ CreateExtensionPrefs();
+ CreateCommandLinePrefs();
+ CreateUserPrefs();
+ CreateRecommendedPrefs();
+ CreateDefaultPrefs();
// Create a new pref-value-store.
- pref_value_store_ = new TestingPrefValueStore(
+ pref_value_store_ = new PrefValueStore(
managed_platform_pref_store_,
device_management_pref_store_,
extension_pref_store_,
command_line_pref_store_,
user_pref_store_,
recommended_pref_store_,
- default_pref_store_);
+ default_pref_store_,
+ &pref_notifier_,
+ NULL);
// Register prefs with the PrefValueStore.
pref_value_store_->RegisterPreferenceType(prefs::kApplicationLocale,
@@ -153,90 +158,84 @@ class PrefValueStoreTest : public testing::Test {
// Creates a new dictionary and stores some sample user preferences
// in it.
- DictionaryValue* CreateUserPrefs() {
- DictionaryValue* user_prefs = new DictionaryValue();
- user_prefs->SetBoolean(prefs::kDeleteCache, user_pref::kDeleteCacheValue);
- user_prefs->SetInteger(prefs::kStabilityLaunchCount,
- user_pref::kStabilityLaunchCountValue);
- user_prefs->SetString(prefs::kCurrentThemeID,
+ void CreateUserPrefs() {
+ user_pref_store_ = new TestingPrefStore;
+ user_pref_store_->prefs()->SetBoolean(prefs::kDeleteCache,
+ user_pref::kDeleteCacheValue);
+ user_pref_store_->prefs()->SetInteger(prefs::kStabilityLaunchCount,
+ user_pref::kStabilityLaunchCountValue);
+ user_pref_store_->prefs()->SetString(prefs::kCurrentThemeID,
user_pref::kCurrentThemeIDValue);
- user_prefs->SetString(prefs::kApplicationLocale,
+ user_pref_store_->prefs()->SetString(prefs::kApplicationLocale,
user_pref::kApplicationLocaleValue);
- user_prefs->SetString(prefs::kDefaultSearchProviderName,
+ user_pref_store_->prefs()->SetString(prefs::kDefaultSearchProviderName,
user_pref::kSearchProviderNameValue);
- user_prefs->SetString(prefs::kHomePage, user_pref::kHomepageValue);
- return user_prefs;
+ user_pref_store_->prefs()->SetString(prefs::kHomePage,
+ user_pref::kHomepageValue);
}
- DictionaryValue* CreateManagedPlatformPrefs() {
- DictionaryValue* managed_platform_prefs = new DictionaryValue();
- managed_platform_prefs->SetString(
+ void CreateManagedPlatformPrefs() {
+ managed_platform_pref_store_ = new TestingPrefStore;
+ managed_platform_pref_store_->prefs()->SetString(
prefs::kHomePage,
managed_platform_pref::kHomepageValue);
- expected_differing_paths_.push_back(prefs::kHomePage);
- return managed_platform_prefs;
+ expected_differing_paths_.insert(prefs::kHomePage);
}
- DictionaryValue* CreateDeviceManagementPrefs() {
- DictionaryValue* device_management_prefs = new DictionaryValue();
- device_management_prefs->SetString(
+ void CreateDeviceManagementPrefs() {
+ device_management_pref_store_ = new TestingPrefStore;
+ device_management_pref_store_->prefs()->SetString(
prefs::kDefaultSearchProviderName,
device_management_pref::kSearchProviderNameValue);
- expected_differing_paths_.push_back("default_search_provider");
- expected_differing_paths_.push_back(prefs::kDefaultSearchProviderName);
- device_management_prefs->SetString(prefs::kHomePage,
- device_management_pref::kHomepageValue);
- return device_management_prefs;
+ expected_differing_paths_.insert("default_search_provider");
+ expected_differing_paths_.insert(prefs::kDefaultSearchProviderName);
+ device_management_pref_store_->prefs()->SetString(prefs::kHomePage,
+ device_management_pref::kHomepageValue);
}
- DictionaryValue* CreateExtensionPrefs() {
- DictionaryValue* extension_prefs = new DictionaryValue();
- extension_prefs->SetString(prefs::kCurrentThemeID,
+ void CreateExtensionPrefs() {
+ extension_pref_store_ = new TestingPrefStore;
+ extension_pref_store_->prefs()->SetString(prefs::kCurrentThemeID,
extension_pref::kCurrentThemeIDValue);
- extension_prefs->SetString(prefs::kHomePage,
+ extension_pref_store_->prefs()->SetString(prefs::kHomePage,
extension_pref::kHomepageValue);
- extension_prefs->SetString(prefs::kDefaultSearchProviderName,
- extension_pref::kSearchProviderNameValue);
- return extension_prefs;
+ extension_pref_store_->prefs()->SetString(prefs::kDefaultSearchProviderName,
+ extension_pref::kSearchProviderNameValue);
}
- DictionaryValue* CreateCommandLinePrefs() {
- DictionaryValue* command_line_prefs = new DictionaryValue();
- command_line_prefs->SetString(prefs::kCurrentThemeID,
+ void CreateCommandLinePrefs() {
+ command_line_pref_store_ = new TestingPrefStore;
+ command_line_pref_store_->prefs()->SetString(prefs::kCurrentThemeID,
command_line_pref::kCurrentThemeIDValue);
- command_line_prefs->SetString(prefs::kApplicationLocale,
+ command_line_pref_store_->prefs()->SetString(prefs::kApplicationLocale,
command_line_pref::kApplicationLocaleValue);
- command_line_prefs->SetString(prefs::kHomePage,
+ command_line_pref_store_->prefs()->SetString(prefs::kHomePage,
command_line_pref::kHomepageValue);
- command_line_prefs->SetString(
+ command_line_pref_store_->prefs()->SetString(
prefs::kDefaultSearchProviderName,
command_line_pref::kSearchProviderNameValue);
- return command_line_prefs;
}
- DictionaryValue* CreateRecommendedPrefs() {
- DictionaryValue* recommended_prefs = new DictionaryValue();
- recommended_prefs->SetInteger(prefs::kStabilityLaunchCount,
+ void CreateRecommendedPrefs() {
+ recommended_pref_store_ = new TestingPrefStore;
+ recommended_pref_store_->prefs()->SetInteger(prefs::kStabilityLaunchCount,
recommended_pref::kStabilityLaunchCountValue);
- recommended_prefs->SetBoolean(
+ recommended_pref_store_->prefs()->SetBoolean(
prefs::kRecommendedPref,
recommended_pref::kRecommendedPrefValue);
- // Expected differing paths must be added in lexicographic order
- // to work properly
- expected_differing_paths_.push_back("this");
- expected_differing_paths_.push_back("this.pref");
- expected_differing_paths_.push_back(prefs::kRecommendedPref);
- expected_differing_paths_.push_back("user_experience_metrics");
- expected_differing_paths_.push_back("user_experience_metrics.stability");
- expected_differing_paths_.push_back(prefs::kStabilityLaunchCount);
- return recommended_prefs;
+ expected_differing_paths_.insert("this");
+ expected_differing_paths_.insert("this.pref");
+ expected_differing_paths_.insert(prefs::kRecommendedPref);
+ expected_differing_paths_.insert("user_experience_metrics");
+ expected_differing_paths_.insert("user_experience_metrics.stability");
+ expected_differing_paths_.insert(prefs::kStabilityLaunchCount);
}
- DictionaryValue* CreateDefaultPrefs() {
- DictionaryValue* default_prefs = new DictionaryValue();
- default_prefs->SetInteger(prefs::kDefaultPref, default_pref::kDefaultValue);
- return default_prefs;
+ void CreateDefaultPrefs() {
+ default_pref_store_ = new TestingPrefStore;
+ default_pref_store_->prefs()->SetInteger(prefs::kDefaultPref,
+ default_pref::kDefaultValue);
}
DictionaryValue* CreateSampleDictValue() {
@@ -261,32 +260,23 @@ class PrefValueStoreTest : public testing::Test {
}
MessageLoop loop_;
-
- scoped_refptr<TestingPrefValueStore> pref_value_store_;
+ MockPrefNotifier pref_notifier_;
+ scoped_refptr<PrefValueStore> pref_value_store_;
// |PrefStore|s are owned by the |PrefValueStore|.
- DummyPrefStore* managed_platform_pref_store_;
- DummyPrefStore* device_management_pref_store_;
- DummyPrefStore* extension_pref_store_;
- DummyPrefStore* command_line_pref_store_;
- DummyPrefStore* user_pref_store_;
- DummyPrefStore* recommended_pref_store_;
- DummyPrefStore* default_pref_store_;
+ TestingPrefStore* managed_platform_pref_store_;
+ TestingPrefStore* device_management_pref_store_;
+ TestingPrefStore* extension_pref_store_;
+ TestingPrefStore* command_line_pref_store_;
+ TestingPrefStore* user_pref_store_;
+ TestingPrefStore* recommended_pref_store_;
+ TestingPrefStore* default_pref_store_;
// A vector of the preferences paths in the managed and recommended
// PrefStores that are set at the beginning of a test. Can be modified
// by the test to track changes that it makes to the preferences
// stored in the managed and recommended PrefStores.
- std::vector<std::string> expected_differing_paths_;
-
- // Preferences are owned by the individual |DummyPrefStores|.
- DictionaryValue* managed_platform_prefs_;
- DictionaryValue* device_management_prefs_;
- DictionaryValue* extension_prefs_;
- DictionaryValue* command_line_prefs_;
- DictionaryValue* user_prefs_;
- DictionaryValue* recommended_prefs_;
- DictionaryValue* default_prefs_;
+ std::set<std::string> expected_differing_paths_;
private:
scoped_ptr<BrowserThread> ui_thread_;
@@ -427,7 +417,7 @@ TEST_F(PrefValueStoreTest, HasPrefPath) {
EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kMissingPref));
}
-TEST_F(PrefValueStoreTest, PrefHasChanged) {
+TEST_F(PrefValueStoreTest, PrefChanges) {
// Setup.
const char managed_platform_pref_path[] = "managed_platform_pref";
pref_value_store_->RegisterPreferenceType(managed_platform_pref_path,
@@ -443,32 +433,60 @@ TEST_F(PrefValueStoreTest, PrefHasChanged) {
default_pref_store_->prefs()->SetString(default_pref_path, "default value");
// Check pref controlled by highest-priority store.
- EXPECT_TRUE(pref_value_store_->PrefHasChanged(managed_platform_pref_path,
- static_cast<PrefNotifier::PrefStoreType>(0)));
- EXPECT_FALSE(pref_value_store_->PrefHasChanged(managed_platform_pref_path,
- PrefNotifier::USER_STORE));
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(managed_platform_pref_path));
+ managed_platform_pref_store_->NotifyPrefValueChanged(
+ managed_platform_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0);
+ user_pref_store_->NotifyPrefValueChanged(managed_platform_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
// Check pref controlled by user store.
- EXPECT_TRUE(pref_value_store_->PrefHasChanged(user_pref_path,
- static_cast<PrefNotifier::PrefStoreType>(0)));
- EXPECT_TRUE(pref_value_store_->PrefHasChanged(user_pref_path,
- PrefNotifier::USER_STORE));
- EXPECT_FALSE(pref_value_store_->PrefHasChanged(user_pref_path,
- PrefNotifier::PREF_STORE_TYPE_MAX));
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(user_pref_path));
+ managed_platform_pref_store_->NotifyPrefValueChanged(user_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(user_pref_path));
+ user_pref_store_->NotifyPrefValueChanged(user_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0);
+ default_pref_store_->NotifyPrefValueChanged(user_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
// Check pref controlled by default-pref store.
- EXPECT_TRUE(pref_value_store_->PrefHasChanged(default_pref_path,
- PrefNotifier::USER_STORE));
- EXPECT_TRUE(pref_value_store_->PrefHasChanged(default_pref_path,
- PrefNotifier::DEFAULT_STORE));
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(default_pref_path));
+ user_pref_store_->NotifyPrefValueChanged(default_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(default_pref_path));
+ default_pref_store_->NotifyPrefValueChanged(default_pref_path);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+}
+
+TEST_F(PrefValueStoreTest, OnInitializationCompleted) {
+ EXPECT_CALL(pref_notifier_, OnInitializationCompleted()).Times(0);
+ managed_platform_pref_store_->SetInitializationCompleted();
+ device_management_pref_store_->SetInitializationCompleted();
+ extension_pref_store_->SetInitializationCompleted();
+ command_line_pref_store_->SetInitializationCompleted();
+ recommended_pref_store_->SetInitializationCompleted();
+ default_pref_store_->SetInitializationCompleted();
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
+
+ // The notification should only be triggered after the last store is done.
+ EXPECT_CALL(pref_notifier_, OnInitializationCompleted()).Times(1);
+ user_pref_store_->SetInitializationCompleted();
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
}
TEST_F(PrefValueStoreTest, ReadPrefs) {
pref_value_store_->ReadPrefs();
- // The ReadPrefs method of the |DummyPrefStore| deletes the |pref_store|s
+ // The ReadPrefs method of the |TestingPrefStore| deletes the |pref_store|s
// internal dictionary and creates a new empty dictionary. Hence this
// dictionary does not contain any of the preloaded preferences.
- // This shows that the ReadPrefs method of the |DummyPrefStore| was called.
+ // This shows that the ReadPrefs method of the |TestingPrefStore| was called.
EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kDeleteCache));
}
@@ -483,18 +501,20 @@ TEST_F(PrefValueStoreTest, SetUserPrefValue) {
Value* actual_value = NULL;
// Test that managed platform values can not be set.
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0);
ASSERT_TRUE(pref_value_store_->PrefValueInManagedPlatformStore(
prefs::kHomePage));
- // The Ownership is tranfered to |PrefValueStore|.
+ // The ownership is transfered to PrefValueStore.
new_value = Value::CreateStringValue("http://www.youtube.com");
pref_value_store_->SetUserPrefValue(prefs::kHomePage, new_value);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
ASSERT_TRUE(pref_value_store_->GetValue(prefs::kHomePage, &actual_value));
std::string value_str;
actual_value->GetAsString(&value_str);
ASSERT_EQ(managed_platform_pref::kHomepageValue, value_str);
- // User preferences values can be set
+ // User preferences values can be set.
ASSERT_FALSE(pref_value_store_->PrefValueInManagedPlatformStore(
prefs::kStabilityLaunchCount));
actual_value = NULL;
@@ -503,15 +523,19 @@ TEST_F(PrefValueStoreTest, SetUserPrefValue) {
EXPECT_TRUE(actual_value->GetAsInteger(&int_value));
EXPECT_EQ(user_pref::kStabilityLaunchCountValue, int_value);
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1);
new_value = Value::CreateIntegerValue(1);
pref_value_store_->SetUserPrefValue(prefs::kStabilityLaunchCount, new_value);
actual_value = NULL;
pref_value_store_->GetValue(prefs::kStabilityLaunchCount, &actual_value);
EXPECT_TRUE(new_value->Equals(actual_value));
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
- // Set and Get |DictionaryValue|
+ // Set and Get DictionaryValue.
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1);
DictionaryValue* expected_dict_value = CreateSampleDictValue();
pref_value_store_->SetUserPrefValue(prefs::kSampleDict, expected_dict_value);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
actual_value = NULL;
std::string key(prefs::kSampleDict);
@@ -520,9 +544,11 @@ TEST_F(PrefValueStoreTest, SetUserPrefValue) {
ASSERT_EQ(expected_dict_value, actual_value);
ASSERT_TRUE(expected_dict_value->Equals(actual_value));
- // Set and Get a |ListValue|
+ // Set and Get a ListValue.
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1);
ListValue* expected_list_value = CreateSampleListValue();
pref_value_store_->SetUserPrefValue(prefs::kSampleList, expected_list_value);
+ Mock::VerifyAndClearExpectations(&pref_notifier_);
actual_value = NULL;
key = prefs::kSampleList;
@@ -640,8 +666,9 @@ TEST_F(PrefValueStoreTest, DetectProxyConfigurationConflict) {
// Create conflicting proxy settings in the managed and command-line
// preference stores.
- command_line_prefs_->SetBoolean(prefs::kProxyAutoDetect, false);
- managed_platform_prefs_->SetBoolean(prefs::kProxyAutoDetect, true);
+ command_line_pref_store_->prefs()->SetBoolean(prefs::kProxyAutoDetect, false);
+ managed_platform_pref_store_->prefs()->SetBoolean(prefs::kProxyAutoDetect,
+ true);
ASSERT_TRUE(pref_value_store_->HasPolicyConflictingUserProxySettings());
}
@@ -746,140 +773,121 @@ TEST_F(PrefValueStoreTest, TestPolicyRefresh) {
// replacing them with dummy stores, all of the paths of the prefs originally
// in the managed platform, device management and recommended stores should
// change.
- MockPolicyRefreshCallback callback;
- EXPECT_CALL(callback, DoCallback(_)).Times(0);
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- NewRunnableMethod(
- pref_value_store_.get(),
- &PrefValueStore::RefreshPolicyPrefs,
- NewCallback(&callback,
- &MockPolicyRefreshCallback::DoCallback)));
- Mock::VerifyAndClearExpectations(&callback);
- EXPECT_CALL(callback, DoCallback(expected_differing_paths_)).Times(1);
+ pref_value_store_->RefreshPolicyPrefs();
+
+ PrefChangeRecorder recorder;
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
+ .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
loop_.RunAllPending();
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
}
TEST_F(PrefValueStoreTest, TestRefreshPolicyPrefsCompletion) {
+ PrefChangeRecorder recorder;
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
+ .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
+
// Test changed preferences in the managed platform store and removed
// preferences in the recommended store. In addition to "homepage", the other
// prefs that are set by default in the test class are removed by the
// DummyStore.
- scoped_ptr<DummyPrefStore> new_managed_platform_store(new DummyPrefStore());
+ scoped_ptr<TestingPrefStore> new_managed_platform_store(
+ new TestingPrefStore());
DictionaryValue* dict = new DictionaryValue();
dict->SetString("homepage", "some other changed homepage");
new_managed_platform_store->set_prefs(dict);
- MockPolicyRefreshCallback callback;
- EXPECT_CALL(callback, DoCallback(expected_differing_paths_)).Times(1);
+
+ recorder.Clear();
pref_value_store_->RefreshPolicyPrefsCompletion(
new_managed_platform_store.release(),
- new DummyPrefStore(),
- new DummyPrefStore(),
- NewCallback(&callback,
- &MockPolicyRefreshCallback::DoCallback));
+ new TestingPrefStore(),
+ new TestingPrefStore());
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
// Test properties that have been removed from the managed platform store.
// Homepage is still set in managed prefs.
expected_differing_paths_.clear();
- expected_differing_paths_.push_back(std::string("homepage"));
- MockPolicyRefreshCallback callback2;
- EXPECT_CALL(callback2, DoCallback(expected_differing_paths_)).Times(1);
+ expected_differing_paths_.insert(prefs::kHomePage);
+
+ recorder.Clear();
pref_value_store_->RefreshPolicyPrefsCompletion(
- new DummyPrefStore(),
- new DummyPrefStore(),
- new DummyPrefStore(),
- NewCallback(&callback2,
- &MockPolicyRefreshCallback::DoCallback));
+ new TestingPrefStore(),
+ new TestingPrefStore(),
+ new TestingPrefStore());
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
// Test properties that are added to the device management store.
expected_differing_paths_.clear();
- expected_differing_paths_.push_back(std::string("homepage"));
- scoped_ptr<DummyPrefStore> new_device_management_store(
- new DummyPrefStore());
+ expected_differing_paths_.insert(prefs::kHomePage);
+ scoped_ptr<TestingPrefStore> new_device_management_store(
+ new TestingPrefStore());
dict = new DictionaryValue();
dict->SetString("homepage", "some other changed homepage");
new_device_management_store->set_prefs(dict);
- MockPolicyRefreshCallback callback3;
- EXPECT_CALL(callback3, DoCallback(expected_differing_paths_)).Times(1);
+
+ recorder.Clear();
pref_value_store_->RefreshPolicyPrefsCompletion(
- new DummyPrefStore(),
+ new TestingPrefStore(),
new_device_management_store.release(),
- new DummyPrefStore(),
- NewCallback(&callback3,
- &MockPolicyRefreshCallback::DoCallback));
+ new TestingPrefStore());
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
// Test properties that are added to the recommended store.
- scoped_ptr<DummyPrefStore> new_recommended_store(new DummyPrefStore());
+ scoped_ptr<TestingPrefStore> new_recommended_store(new TestingPrefStore());
dict = new DictionaryValue();
dict->SetString("homepage", "some other changed homepage 2");
new_recommended_store->set_prefs(dict);
expected_differing_paths_.clear();
- expected_differing_paths_.push_back(std::string("homepage"));
- MockPolicyRefreshCallback callback4;
- EXPECT_CALL(callback4, DoCallback(expected_differing_paths_)).Times(1);
+ expected_differing_paths_.insert(prefs::kHomePage);
+
+ recorder.Clear();
pref_value_store_->RefreshPolicyPrefsCompletion(
- new DummyPrefStore(),
- new DummyPrefStore(),
- new_recommended_store.release(),
- NewCallback(&callback4,
- &MockPolicyRefreshCallback::DoCallback));
+ new TestingPrefStore(),
+ new TestingPrefStore(),
+ new_recommended_store.release());
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
// Test adding a multi-key path.
- new_managed_platform_store.reset(new DummyPrefStore());
+ new_managed_platform_store.reset(new TestingPrefStore());
dict = new DictionaryValue();
dict->SetString("segment1.segment2", "value");
new_managed_platform_store->set_prefs(dict);
expected_differing_paths_.clear();
- expected_differing_paths_.push_back(std::string("homepage"));
- expected_differing_paths_.push_back(std::string("segment1"));
- expected_differing_paths_.push_back(std::string("segment1.segment2"));
- MockPolicyRefreshCallback callback5;
- EXPECT_CALL(callback5, DoCallback(expected_differing_paths_)).Times(1);
+ expected_differing_paths_.insert(prefs::kHomePage);
+ expected_differing_paths_.insert("segment1");
+ expected_differing_paths_.insert("segment1.segment2");
+
+ recorder.Clear();
pref_value_store_->RefreshPolicyPrefsCompletion(
new_managed_platform_store.release(),
- new DummyPrefStore(),
- new DummyPrefStore(),
- NewCallback(&callback5,
- &MockPolicyRefreshCallback::DoCallback));
+ new TestingPrefStore(),
+ new TestingPrefStore());
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
}
TEST_F(PrefValueStoreTest, TestConcurrentPolicyRefresh) {
- MockPolicyRefreshCallback callback1;
+ PrefChangeRecorder recorder;
+ EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
+ .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
+
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(
pref_value_store_.get(),
- &PrefValueStore::RefreshPolicyPrefs,
- NewCallback(&callback1,
- &MockPolicyRefreshCallback::DoCallback)));
- EXPECT_CALL(callback1, DoCallback(_)).Times(0);
+ &PrefValueStore::RefreshPolicyPrefs));
- MockPolicyRefreshCallback callback2;
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(
pref_value_store_.get(),
- &PrefValueStore::RefreshPolicyPrefs,
- NewCallback(&callback2,
- &MockPolicyRefreshCallback::DoCallback)));
- EXPECT_CALL(callback2, DoCallback(_)).Times(0);
+ &PrefValueStore::RefreshPolicyPrefs));
- MockPolicyRefreshCallback callback3;
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(
pref_value_store_.get(),
- &PrefValueStore::RefreshPolicyPrefs,
- NewCallback(&callback3,
- &MockPolicyRefreshCallback::DoCallback)));
- EXPECT_CALL(callback3, DoCallback(_)).Times(0);
- Mock::VerifyAndClearExpectations(&callback1);
- Mock::VerifyAndClearExpectations(&callback2);
- Mock::VerifyAndClearExpectations(&callback3);
-
- EXPECT_CALL(callback1, DoCallback(expected_differing_paths_)).Times(1);
- std::vector<std::string> no_differing_paths;
- EXPECT_CALL(callback2, DoCallback(no_differing_paths)).Times(1);
- EXPECT_CALL(callback3, DoCallback(no_differing_paths)).Times(1);
+ &PrefValueStore::RefreshPolicyPrefs));
+
loop_.RunAllPending();
+ EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
}
« no previous file with comments | « chrome/browser/prefs/pref_value_store.cc ('k') | chrome/browser/prefs/scoped_pref_update.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698