| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prefs/profile_pref_store_manager.h" | 5 #include "chrome/browser/prefs/profile_pref_store_manager.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/files/file_enumerator.h" | 10 #include "base/files/file_enumerator.h" |
| 11 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
| 12 #include "base/files/scoped_temp_dir.h" | 12 #include "base/files/scoped_temp_dir.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/message_loop/message_loop.h" | |
| 16 #include "base/prefs/json_pref_store.h" | 15 #include "base/prefs/json_pref_store.h" |
| 17 #include "base/prefs/persistent_pref_store.h" | 16 #include "base/prefs/persistent_pref_store.h" |
| 18 #include "base/prefs/pref_service.h" | 17 #include "base/prefs/pref_service.h" |
| 19 #include "base/prefs/pref_service_factory.h" | 18 #include "base/prefs/pref_service_factory.h" |
| 20 #include "base/prefs/pref_store.h" | 19 #include "base/prefs/pref_store.h" |
| 21 #include "base/prefs/testing_pref_service.h" | 20 #include "base/prefs/testing_pref_service.h" |
| 22 #include "base/run_loop.h" | 21 #include "base/run_loop.h" |
| 23 #include "base/strings/string_util.h" | 22 #include "base/strings/string_util.h" |
| 24 #include "base/values.h" | 23 #include "base/values.h" |
| 25 #include "chrome/browser/prefs/tracked/mock_validation_delegate.h" | 24 #include "chrome/browser/prefs/tracked/mock_validation_delegate.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 pref_service_factory.Create(profile_pref_registry_.get())); | 161 pref_service_factory.Create(profile_pref_registry_.get())); |
| 163 | 162 |
| 164 ProfilePrefStoreManager::ClearResetTime(pref_service.get()); | 163 ProfilePrefStoreManager::ClearResetTime(pref_service.get()); |
| 165 } | 164 } |
| 166 | 165 |
| 167 void InitializePrefs() { | 166 void InitializePrefs() { |
| 168 // According to the implementation of ProfilePrefStoreManager, this is | 167 // According to the implementation of ProfilePrefStoreManager, this is |
| 169 // actually a SegregatedPrefStore backed by two underlying pref stores. | 168 // actually a SegregatedPrefStore backed by two underlying pref stores. |
| 170 scoped_refptr<PersistentPrefStore> pref_store = | 169 scoped_refptr<PersistentPrefStore> pref_store = |
| 171 manager_->CreateProfilePrefStore( | 170 manager_->CreateProfilePrefStore( |
| 172 main_message_loop_.message_loop_proxy(), | 171 main_message_loop_.task_runner(), |
| 173 base::Bind(&ProfilePrefStoreManagerTest::RecordReset, | 172 base::Bind(&ProfilePrefStoreManagerTest::RecordReset, |
| 174 base::Unretained(this)), | 173 base::Unretained(this)), |
| 175 &mock_validation_delegate_); | 174 &mock_validation_delegate_); |
| 176 InitializePrefStore(pref_store.get()); | 175 InitializePrefStore(pref_store.get()); |
| 177 pref_store = NULL; | 176 pref_store = NULL; |
| 178 base::RunLoop().RunUntilIdle(); | 177 base::RunLoop().RunUntilIdle(); |
| 179 } | 178 } |
| 180 | 179 |
| 181 void DestroyPrefStore() { | 180 void DestroyPrefStore() { |
| 182 if (pref_store_.get()) { | 181 if (pref_store_.get()) { |
| 183 ClearResetRecorded(); | 182 ClearResetRecorded(); |
| 184 // Force everything to be written to disk, triggering the PrefHashFilter | 183 // Force everything to be written to disk, triggering the PrefHashFilter |
| 185 // while our RegistryVerifier is watching. | 184 // while our RegistryVerifier is watching. |
| 186 pref_store_->CommitPendingWrite(); | 185 pref_store_->CommitPendingWrite(); |
| 187 base::RunLoop().RunUntilIdle(); | 186 base::RunLoop().RunUntilIdle(); |
| 188 | 187 |
| 189 pref_store_->RemoveObserver(®istry_verifier_); | 188 pref_store_->RemoveObserver(®istry_verifier_); |
| 190 pref_store_ = NULL; | 189 pref_store_ = NULL; |
| 191 // Nothing should have to happen on the background threads, but just in | 190 // Nothing should have to happen on the background threads, but just in |
| 192 // case... | 191 // case... |
| 193 base::RunLoop().RunUntilIdle(); | 192 base::RunLoop().RunUntilIdle(); |
| 194 } | 193 } |
| 195 } | 194 } |
| 196 | 195 |
| 197 void InitializeDeprecatedCombinedProfilePrefStore() { | 196 void InitializeDeprecatedCombinedProfilePrefStore() { |
| 198 scoped_refptr<PersistentPrefStore> pref_store = | 197 scoped_refptr<PersistentPrefStore> pref_store = |
| 199 manager_->CreateDeprecatedCombinedProfilePrefStore( | 198 manager_->CreateDeprecatedCombinedProfilePrefStore( |
| 200 main_message_loop_.message_loop_proxy()); | 199 main_message_loop_.task_runner()); |
| 201 InitializePrefStore(pref_store.get()); | 200 InitializePrefStore(pref_store.get()); |
| 202 pref_store = NULL; | 201 pref_store = NULL; |
| 203 base::RunLoop().RunUntilIdle(); | 202 base::RunLoop().RunUntilIdle(); |
| 204 } | 203 } |
| 205 | 204 |
| 206 void InitializePrefStore(PersistentPrefStore* pref_store) { | 205 void InitializePrefStore(PersistentPrefStore* pref_store) { |
| 207 pref_store->AddObserver(®istry_verifier_); | 206 pref_store->AddObserver(®istry_verifier_); |
| 208 PersistentPrefStore::PrefReadError error = pref_store->ReadPrefs(); | 207 PersistentPrefStore::PrefReadError error = pref_store->ReadPrefs(); |
| 209 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, error); | 208 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, error); |
| 210 pref_store->SetValue(kTrackedAtomic, new base::StringValue(kFoobar), | 209 pref_store->SetValue(kTrackedAtomic, new base::StringValue(kFoobar), |
| 211 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); | 210 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); |
| 212 pref_store->SetValue(kProtectedAtomic, new base::StringValue(kHelloWorld), | 211 pref_store->SetValue(kProtectedAtomic, new base::StringValue(kHelloWorld), |
| 213 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); | 212 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); |
| 214 pref_store->SetValue(kUnprotectedPref, new base::StringValue(kFoobar), | 213 pref_store->SetValue(kUnprotectedPref, new base::StringValue(kFoobar), |
| 215 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); | 214 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); |
| 216 pref_store->RemoveObserver(®istry_verifier_); | 215 pref_store->RemoveObserver(®istry_verifier_); |
| 217 pref_store->CommitPendingWrite(); | 216 pref_store->CommitPendingWrite(); |
| 218 base::RunLoop().RunUntilIdle(); | 217 base::RunLoop().RunUntilIdle(); |
| 219 } | 218 } |
| 220 | 219 |
| 221 void LoadExistingPrefs() { | 220 void LoadExistingPrefs() { |
| 222 DestroyPrefStore(); | 221 DestroyPrefStore(); |
| 223 pref_store_ = manager_->CreateProfilePrefStore( | 222 pref_store_ = manager_->CreateProfilePrefStore( |
| 224 main_message_loop_.message_loop_proxy(), | 223 main_message_loop_.task_runner(), |
| 225 base::Bind(&ProfilePrefStoreManagerTest::RecordReset, | 224 base::Bind(&ProfilePrefStoreManagerTest::RecordReset, |
| 226 base::Unretained(this)), | 225 base::Unretained(this)), |
| 227 NULL); | 226 NULL); |
| 228 pref_store_->AddObserver(®istry_verifier_); | 227 pref_store_->AddObserver(®istry_verifier_); |
| 229 pref_store_->ReadPrefs(); | 228 pref_store_->ReadPrefs(); |
| 230 } | 229 } |
| 231 | 230 |
| 232 void ReplaceStringInPrefs(const std::string& find, | 231 void ReplaceStringInPrefs(const std::string& find, |
| 233 const std::string& replace) { | 232 const std::string& replace) { |
| 234 base::FileEnumerator file_enum( | 233 base::FileEnumerator file_enum( |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 ExpectStringValueEquals(kProtectedAtomic, kHelloWorld); | 574 ExpectStringValueEquals(kProtectedAtomic, kHelloWorld); |
| 576 | 575 |
| 577 // Trigger the logic that migrates it back to the unprotected preferences | 576 // Trigger the logic that migrates it back to the unprotected preferences |
| 578 // file. | 577 // file. |
| 579 pref_store_->SetValue(kProtectedAtomic, new base::StringValue(kGoodbyeWorld), | 578 pref_store_->SetValue(kProtectedAtomic, new base::StringValue(kGoodbyeWorld), |
| 580 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); | 579 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); |
| 581 LoadExistingPrefs(); | 580 LoadExistingPrefs(); |
| 582 ExpectStringValueEquals(kProtectedAtomic, kGoodbyeWorld); | 581 ExpectStringValueEquals(kProtectedAtomic, kGoodbyeWorld); |
| 583 VerifyResetRecorded(false); | 582 VerifyResetRecorded(false); |
| 584 } | 583 } |
| OLD | NEW |