Index: chrome/browser/prefs/profile_pref_store_manager_unittest.cc |
diff --git a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc |
index 45230ca0d11391be210cecf9bfff67f96303712e..5b742651e1ce2608b4db1ced1444b0a8c830a879 100644 |
--- a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc |
+++ b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc |
@@ -9,6 +9,7 @@ |
#include <memory> |
#include <vector> |
+#include "base/callback_helpers.h" |
#include "base/compiler_specific.h" |
#include "base/files/file_enumerator.h" |
#include "base/files/file_util.h" |
@@ -67,6 +68,37 @@ class RegistryVerifier : public PrefStore::Observer { |
scoped_refptr<PrefRegistry> pref_registry_; |
}; |
+class PrefStoreReadObserver : public PrefStore::Observer { |
+ public: |
+ explicit PrefStoreReadObserver(scoped_refptr<PersistentPrefStore> pref_store) |
+ : pref_store_(std::move(pref_store)) { |
+ pref_store_->AddObserver(this); |
+ } |
+ |
+ ~PrefStoreReadObserver() override { pref_store_->RemoveObserver(this); } |
+ |
+ PersistentPrefStore::PrefReadError Read() { |
+ base::RunLoop run_loop; |
+ stop_waiting_ = run_loop.QuitClosure(); |
+ pref_store_->ReadPrefsAsync(nullptr); |
+ run_loop.Run(); |
+ return pref_store_->GetReadError(); |
+ } |
+ |
+ // PrefStore::Observer implementation |
+ void OnPrefValueChanged(const std::string& key) override {} |
+ |
+ void OnInitializationCompleted(bool succeeded) override { |
+ if (!stop_waiting_.is_null()) { |
+ base::ResetAndReturn(&stop_waiting_).Run(); |
+ } |
+ } |
+ |
+ private: |
+ scoped_refptr<PersistentPrefStore> pref_store_; |
+ base::Closure stop_waiting_; |
+}; |
+ |
const char kUnprotectedPref[] = "unprotected_pref"; |
const char kTrackedAtomic[] = "tracked_atomic"; |
const char kProtectedAtomic[] = "protected_atomic"; |
@@ -94,6 +126,7 @@ class ProfilePrefStoreManagerTest : public testing::Test { |
kConfiguration + arraysize(kConfiguration)), |
profile_pref_registry_(new user_prefs::PrefRegistrySyncable), |
registry_verifier_(profile_pref_registry_.get()), |
+ mock_validation_delegate_weak_factory_(&mock_validation_delegate_), |
seed_("seed"), |
reset_recorded_(false) {} |
@@ -168,10 +201,10 @@ class ProfilePrefStoreManagerTest : public testing::Test { |
// actually a SegregatedPrefStore backed by two underlying pref stores. |
scoped_refptr<PersistentPrefStore> pref_store = |
manager_->CreateProfilePrefStore( |
- main_message_loop_.task_runner(), |
+ main_message_loop_.task_runner(), main_message_loop_.task_runner(), |
base::Bind(&ProfilePrefStoreManagerTest::RecordReset, |
base::Unretained(this)), |
- &mock_validation_delegate_); |
+ mock_validation_delegate_weak_factory_.GetWeakPtr()); |
InitializePrefStore(pref_store.get()); |
pref_store = NULL; |
base::RunLoop().RunUntilIdle(); |
@@ -195,7 +228,8 @@ class ProfilePrefStoreManagerTest : public testing::Test { |
void InitializePrefStore(PersistentPrefStore* pref_store) { |
pref_store->AddObserver(®istry_verifier_); |
- PersistentPrefStore::PrefReadError error = pref_store->ReadPrefs(); |
+ PrefStoreReadObserver read_observer(pref_store); |
+ PersistentPrefStore::PrefReadError error = read_observer.Read(); |
EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, error); |
pref_store->SetValue(kTrackedAtomic, |
base::MakeUnique<base::StringValue>(kFoobar), |
@@ -214,12 +248,13 @@ class ProfilePrefStoreManagerTest : public testing::Test { |
void LoadExistingPrefs() { |
DestroyPrefStore(); |
pref_store_ = manager_->CreateProfilePrefStore( |
- main_message_loop_.task_runner(), |
+ main_message_loop_.task_runner(), main_message_loop_.task_runner(), |
base::Bind(&ProfilePrefStoreManagerTest::RecordReset, |
base::Unretained(this)), |
NULL); |
pref_store_->AddObserver(®istry_verifier_); |
- pref_store_->ReadPrefs(); |
+ PrefStoreReadObserver read_observer(pref_store_); |
+ read_observer.Read(); |
} |
void ReplaceStringInPrefs(const std::string& find, |
@@ -266,6 +301,8 @@ class ProfilePrefStoreManagerTest : public testing::Test { |
scoped_refptr<user_prefs::PrefRegistrySyncable> profile_pref_registry_; |
RegistryVerifier registry_verifier_; |
MockValidationDelegate mock_validation_delegate_; |
+ base::WeakPtrFactory<TrackedPreferenceValidationDelegate> |
+ mock_validation_delegate_weak_factory_; |
std::unique_ptr<ProfilePrefStoreManager> manager_; |
scoped_refptr<PersistentPrefStore> pref_store_; |