Index: chrome/browser/prefs/tracked/tracked_preferences_migration_unittest.cc |
diff --git a/chrome/browser/prefs/tracked/tracked_preferences_migration_unittest.cc b/chrome/browser/prefs/tracked/tracked_preferences_migration_unittest.cc |
deleted file mode 100644 |
index 871e91441a902e631879cee2cfba20e8f9e4cda8..0000000000000000000000000000000000000000 |
--- a/chrome/browser/prefs/tracked/tracked_preferences_migration_unittest.cc |
+++ /dev/null |
@@ -1,906 +0,0 @@ |
-// Copyright 2014 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 "chrome/browser/prefs/tracked/tracked_preferences_migration.h" |
- |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/prefs/testing_pref_service.h" |
-#include "base/strings/string_split.h" |
-#include "base/values.h" |
-#include "chrome/browser/prefs/profile_pref_store_manager.h" |
-#include "chrome/browser/prefs/tracked/dictionary_hash_store_contents.h" |
-#include "chrome/browser/prefs/tracked/hash_store_contents.h" |
-#include "chrome/browser/prefs/tracked/interceptable_pref_filter.h" |
-#include "chrome/browser/prefs/tracked/pref_hash_store.h" |
-#include "chrome/browser/prefs/tracked/pref_hash_store_impl.h" |
-#include "chrome/browser/prefs/tracked/pref_hash_store_transaction.h" |
-#include "chrome/browser/prefs/tracked/pref_service_hash_store_contents.h" |
-#include "chrome/browser/prefs/tracked/tracked_preferences_migration.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace { |
- |
-// An unprotected pref. |
-const char kUnprotectedPref[] = "unprotected"; |
-// A protected pref. |
-const char kProtectedPref[] = "protected"; |
-// A protected pref which is initially stored in the unprotected store. |
-const char kPreviouslyUnprotectedPref[] = "previously.unprotected"; |
-// An unprotected pref which is initially stored in the protected store. |
-const char kPreviouslyProtectedPref[] = "previously.protected"; |
- |
-const char kUnprotectedPrefValue[] = "unprotected_value"; |
-const char kProtectedPrefValue[] = "protected_value"; |
-const char kPreviouslyUnprotectedPrefValue[] = "previously_unprotected_value"; |
-const char kPreviouslyProtectedPrefValue[] = "previously_protected_value"; |
- |
-// A simple InterceptablePrefFilter which doesn't do anything but hand the prefs |
-// back downstream in FinalizeFilterOnLoad. |
-class SimpleInterceptablePrefFilter : public InterceptablePrefFilter { |
- public: |
- // PrefFilter remaining implementation. |
- void FilterUpdate(const std::string& path) override { ADD_FAILURE(); } |
- void FilterSerializeData( |
- base::DictionaryValue* pref_store_contents) override { |
- ADD_FAILURE(); |
- } |
- |
- private: |
- // InterceptablePrefFilter implementation. |
- void FinalizeFilterOnLoad( |
- const PostFilterOnLoadCallback& post_filter_on_load_callback, |
- scoped_ptr<base::DictionaryValue> pref_store_contents, |
- bool prefs_altered) override { |
- post_filter_on_load_callback.Run(pref_store_contents.Pass(), prefs_altered); |
- } |
-}; |
- |
-// A test fixture designed to be used like this: |
-// 1) Set up initial store prefs with PresetStoreValue(). |
-// 2) Hand both sets of prefs to the migrator via HandPrefsToMigrator(). |
-// 3) Migration completes synchronously when the second store hands its prefs |
-// over. |
-// 4) Verifications can be made via various methods of this fixture. |
-// Call Reset() to perform a second migration. |
-class TrackedPreferencesMigrationTest : public testing::Test { |
- public: |
- enum MockPrefStoreID { |
- MOCK_UNPROTECTED_PREF_STORE, |
- MOCK_PROTECTED_PREF_STORE, |
- }; |
- |
- TrackedPreferencesMigrationTest() |
- : unprotected_prefs_(new base::DictionaryValue), |
- protected_prefs_(new base::DictionaryValue), |
- migration_modified_unprotected_store_(false), |
- migration_modified_protected_store_(false), |
- unprotected_store_migration_complete_(false), |
- protected_store_migration_complete_(false) {} |
- |
- void SetUp() override { |
- ProfilePrefStoreManager::RegisterPrefs(local_state_.registry()); |
- Reset(); |
- } |
- |
- void Reset() { |
- std::set<std::string> unprotected_pref_names; |
- std::set<std::string> protected_pref_names; |
- unprotected_pref_names.insert(kUnprotectedPref); |
- unprotected_pref_names.insert(kPreviouslyProtectedPref); |
- protected_pref_names.insert(kProtectedPref); |
- protected_pref_names.insert(kPreviouslyUnprotectedPref); |
- |
- migration_modified_unprotected_store_ = false; |
- migration_modified_protected_store_ = false; |
- unprotected_store_migration_complete_ = false; |
- protected_store_migration_complete_ = false; |
- |
- unprotected_store_successful_write_callback_.Reset(); |
- protected_store_successful_write_callback_.Reset(); |
- |
- SetupTrackedPreferencesMigration( |
- unprotected_pref_names, |
- protected_pref_names, |
- base::Bind(&TrackedPreferencesMigrationTest::RemovePathFromStore, |
- base::Unretained(this), |
- MOCK_UNPROTECTED_PREF_STORE), |
- base::Bind(&TrackedPreferencesMigrationTest::RemovePathFromStore, |
- base::Unretained(this), |
- MOCK_PROTECTED_PREF_STORE), |
- base::Bind( |
- &TrackedPreferencesMigrationTest::RegisterSuccessfulWriteClosure, |
- base::Unretained(this), |
- MOCK_UNPROTECTED_PREF_STORE), |
- base::Bind( |
- &TrackedPreferencesMigrationTest::RegisterSuccessfulWriteClosure, |
- base::Unretained(this), |
- MOCK_PROTECTED_PREF_STORE), |
- scoped_ptr<PrefHashStore>( |
- new PrefHashStoreImpl(kSeed, kDeviceId, false)), |
- scoped_ptr<PrefHashStore>( |
- new PrefHashStoreImpl(kSeed, kDeviceId, true)), |
- scoped_ptr<HashStoreContents>( |
- new PrefServiceHashStoreContents(kHashStoreId, &local_state_)), |
- |
- &mock_unprotected_pref_filter_, |
- &mock_protected_pref_filter_); |
- |
- // Verify initial expectations are met. |
- EXPECT_TRUE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- } |
- |
- protected: |
- // Sets |key| to |value| in the test store identified by |store_id| before |
- // migration begins. Also sets the corresponding hash in the same store. |
- void PresetStoreValue(MockPrefStoreID store_id, |
- const std::string& key, |
- const std::string value) { |
- PresetStoreValueOnly(store_id, key, value); |
- PresetStoreValueHash(store_id, key, value); |
- } |
- |
- // Sets |key| to |value| in the test store identified by |store_id| before |
- // migration begins. Stores the value hash in Local State as in M36 and |
- // earlier. |
- void PresetLegacyStoreValue(MockPrefStoreID store_id, |
- const std::string& key, |
- const std::string value) { |
- PresetStoreValueOnly(store_id, key, value); |
- PresetLegacyValueHash(key, value); |
- } |
- |
- // Stores a hash for |key| and |value| in the hash store identified by |
- // |store_id| before migration begins. |
- void PresetStoreValueHash(MockPrefStoreID store_id, |
- const std::string& key, |
- const std::string value) { |
- base::DictionaryValue* store = NULL; |
- scoped_ptr<PrefHashStore> pref_hash_store; |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- store = unprotected_prefs_.get(); |
- pref_hash_store.reset(new PrefHashStoreImpl(kSeed, kDeviceId, false)); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- store = protected_prefs_.get(); |
- pref_hash_store.reset(new PrefHashStoreImpl(kSeed, kDeviceId, true)); |
- break; |
- } |
- DCHECK(store); |
- |
- base::StringValue string_value(value); |
- pref_hash_store->BeginTransaction( |
- scoped_ptr<HashStoreContents>( |
- new DictionaryHashStoreContents(store)))->StoreHash( |
- key, &string_value); |
- } |
- |
- // Stores a hash for |key| and |value| in the legacy hash store in |
- // local_state. |
- void PresetLegacyValueHash(const std::string& key, |
- const std::string value) { |
- scoped_ptr<PrefHashStore> pref_hash_store( |
- new PrefHashStoreImpl(kSeed, kDeviceId, true)); |
- |
- base::StringValue string_value(value); |
- PrefHashStoreImpl(kSeed, kDeviceId, true) |
- .BeginTransaction(scoped_ptr<HashStoreContents>( |
- new PrefServiceHashStoreContents(kHashStoreId, &local_state_))) |
- ->StoreHash(key, &string_value); |
- } |
- |
- // Returns true if the store opposite to |store_id| is observed for its next |
- // successful write. |
- bool WasOnSuccessfulWriteCallbackRegistered(MockPrefStoreID store_id) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- return !protected_store_successful_write_callback_.is_null(); |
- case MOCK_PROTECTED_PREF_STORE: |
- return !unprotected_store_successful_write_callback_.is_null(); |
- } |
- NOTREACHED(); |
- return false; |
- } |
- |
- // Verifies that the (key, value) pairs in |expected_prefs_in_store| are found |
- // in the store identified by |store_id|. |
- void VerifyValuesStored( |
- MockPrefStoreID store_id, |
- const base::StringPairs& expected_prefs_in_store) { |
- base::DictionaryValue* store = NULL; |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- store = unprotected_prefs_.get(); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- store = protected_prefs_.get(); |
- break; |
- } |
- DCHECK(store); |
- |
- for (base::StringPairs::const_iterator it = expected_prefs_in_store.begin(); |
- it != expected_prefs_in_store.end(); ++it) { |
- std::string val; |
- EXPECT_TRUE(store->GetString(it->first, &val)); |
- EXPECT_EQ(it->second, val); |
- } |
- } |
- |
- // Determines whether |expected_pref_in_hash_store| has a hash in the hash |
- // store identified by |store_id|. |
- bool ContainsHash(MockPrefStoreID store_id, |
- std::string expected_pref_in_hash_store) { |
- base::DictionaryValue* store = NULL; |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- store = unprotected_prefs_.get(); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- store = protected_prefs_.get(); |
- break; |
- } |
- DCHECK(store); |
- const base::DictionaryValue* hash_store_contents = |
- DictionaryHashStoreContents(store).GetContents(); |
- return hash_store_contents && |
- hash_store_contents->GetString(expected_pref_in_hash_store, |
- static_cast<std::string*>(NULL)); |
- } |
- |
- // Determines whether |expected_pref_in_hash_store| has a hash in the Local |
- // State hash store. |
- bool ContainsLegacyHash(std::string expected_pref_in_hash_store) { |
- const base::DictionaryValue* hash_store_contents = |
- PrefServiceHashStoreContents(kHashStoreId, &local_state_).GetContents(); |
- return hash_store_contents && |
- hash_store_contents->GetString(expected_pref_in_hash_store, |
- static_cast<std::string*>(NULL)); |
- } |
- |
- // Both stores need to hand their prefs over in order for migration to kick |
- // in. |
- void HandPrefsToMigrator(MockPrefStoreID store_id) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- mock_unprotected_pref_filter_.FilterOnLoad( |
- base::Bind(&TrackedPreferencesMigrationTest::GetPrefsBack, |
- base::Unretained(this), |
- MOCK_UNPROTECTED_PREF_STORE), |
- unprotected_prefs_.Pass()); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- mock_protected_pref_filter_.FilterOnLoad( |
- base::Bind(&TrackedPreferencesMigrationTest::GetPrefsBack, |
- base::Unretained(this), |
- MOCK_PROTECTED_PREF_STORE), |
- protected_prefs_.Pass()); |
- break; |
- } |
- } |
- |
- bool HasPrefs(MockPrefStoreID store_id) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- return unprotected_prefs_; |
- case MOCK_PROTECTED_PREF_STORE: |
- return protected_prefs_; |
- } |
- NOTREACHED(); |
- return false; |
- } |
- |
- bool StoreModifiedByMigration(MockPrefStoreID store_id) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- return migration_modified_unprotected_store_; |
- case MOCK_PROTECTED_PREF_STORE: |
- return migration_modified_protected_store_; |
- } |
- NOTREACHED(); |
- return false; |
- } |
- |
- bool MigrationCompleted() { |
- return unprotected_store_migration_complete_ && |
- protected_store_migration_complete_; |
- } |
- |
- void SimulateSuccessfulWrite(MockPrefStoreID store_id) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- EXPECT_FALSE(unprotected_store_successful_write_callback_.is_null()); |
- unprotected_store_successful_write_callback_.Run(); |
- unprotected_store_successful_write_callback_.Reset(); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- EXPECT_FALSE(protected_store_successful_write_callback_.is_null()); |
- protected_store_successful_write_callback_.Run(); |
- protected_store_successful_write_callback_.Reset(); |
- break; |
- } |
- } |
- |
- private: |
- void RegisterSuccessfulWriteClosure( |
- MockPrefStoreID store_id, |
- const base::Closure& successful_write_closure) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- EXPECT_TRUE(unprotected_store_successful_write_callback_.is_null()); |
- unprotected_store_successful_write_callback_ = successful_write_closure; |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- EXPECT_TRUE(protected_store_successful_write_callback_.is_null()); |
- protected_store_successful_write_callback_ = successful_write_closure; |
- break; |
- } |
- } |
- |
- // Helper given as an InterceptablePrefFilter::FinalizeFilterOnLoadCallback |
- // to the migrator to be invoked when it's done. |
- void GetPrefsBack(MockPrefStoreID store_id, |
- scoped_ptr<base::DictionaryValue> prefs, |
- bool prefs_altered) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- EXPECT_FALSE(unprotected_prefs_); |
- unprotected_prefs_ = prefs.Pass(); |
- migration_modified_unprotected_store_ = prefs_altered; |
- unprotected_store_migration_complete_ = true; |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- EXPECT_FALSE(protected_prefs_); |
- protected_prefs_ = prefs.Pass(); |
- migration_modified_protected_store_ = prefs_altered; |
- protected_store_migration_complete_ = true; |
- break; |
- } |
- } |
- |
- // Helper given as a cleaning callback to the migrator. |
- void RemovePathFromStore(MockPrefStoreID store_id, const std::string& key) { |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- ASSERT_TRUE(unprotected_prefs_); |
- unprotected_prefs_->RemovePath(key, NULL); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- ASSERT_TRUE(protected_prefs_); |
- protected_prefs_->RemovePath(key, NULL); |
- break; |
- } |
- } |
- |
- // Sets |key| to |value| in the test store identified by |store_id| before |
- // migration begins. Does not store a preference hash. |
- void PresetStoreValueOnly(MockPrefStoreID store_id, |
- const std::string& key, |
- const std::string value) { |
- base::DictionaryValue* store = NULL; |
- switch (store_id) { |
- case MOCK_UNPROTECTED_PREF_STORE: |
- store = unprotected_prefs_.get(); |
- break; |
- case MOCK_PROTECTED_PREF_STORE: |
- store = protected_prefs_.get(); |
- break; |
- } |
- DCHECK(store); |
- |
- store->SetString(key, value); |
- } |
- |
- static const char kHashStoreId[]; |
- static const char kSeed[]; |
- static const char kDeviceId[]; |
- |
- scoped_ptr<base::DictionaryValue> unprotected_prefs_; |
- scoped_ptr<base::DictionaryValue> protected_prefs_; |
- |
- SimpleInterceptablePrefFilter mock_unprotected_pref_filter_; |
- SimpleInterceptablePrefFilter mock_protected_pref_filter_; |
- |
- base::Closure unprotected_store_successful_write_callback_; |
- base::Closure protected_store_successful_write_callback_; |
- |
- bool migration_modified_unprotected_store_; |
- bool migration_modified_protected_store_; |
- |
- bool unprotected_store_migration_complete_; |
- bool protected_store_migration_complete_; |
- |
- TestingPrefServiceSimple local_state_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TrackedPreferencesMigrationTest); |
-}; |
- |
-// static |
-const char TrackedPreferencesMigrationTest::kHashStoreId[] = "hash-store-id"; |
- |
-// static |
-const char TrackedPreferencesMigrationTest::kSeed[] = "seed"; |
- |
-// static |
-const char TrackedPreferencesMigrationTest::kDeviceId[] = "device-id"; |
- |
-} // namespace |
- |
-TEST_F(TrackedPreferencesMigrationTest, NoMigrationRequired) { |
- PresetStoreValue(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref, |
- kUnprotectedPrefValue); |
- PresetStoreValue(MOCK_PROTECTED_PREF_STORE, kProtectedPref, |
- kProtectedPrefValue); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- |
- // Hand unprotected prefs to the migrator which should wait for the protected |
- // prefs. |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- EXPECT_FALSE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(MigrationCompleted()); |
- |
- // Hand protected prefs to the migrator which should proceed with the |
- // migration synchronously. |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // Prefs should have been handed back over. |
- EXPECT_TRUE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_PROTECTED_PREF_STORE)); |
- |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back( |
- std::make_pair(kUnprotectedPref, kUnprotectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back( |
- std::make_pair(kProtectedPref, kProtectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
-} |
- |
-TEST_F(TrackedPreferencesMigrationTest, LegacyHashMigrationOnly) { |
- PresetLegacyStoreValue( |
- MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref, kUnprotectedPrefValue); |
- PresetLegacyStoreValue( |
- MOCK_PROTECTED_PREF_STORE, kProtectedPref, kProtectedPrefValue); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- |
- EXPECT_TRUE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kUnprotectedPref)); |
- |
- // Hand unprotected prefs to the migrator which should wait for the protected |
- // prefs. |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- EXPECT_FALSE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(MigrationCompleted()); |
- |
- // Hand protected prefs to the migrator which should proceed with the |
- // migration synchronously. |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // Prefs should have been handed back over. |
- EXPECT_TRUE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- |
- // There is no pending cleanup task for the modern hash stores. |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- |
- // Both stores were modified as hashes were moved from Local State. |
- EXPECT_TRUE(StoreModifiedByMigration(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(StoreModifiedByMigration(MOCK_PROTECTED_PREF_STORE)); |
- |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back( |
- std::make_pair(kUnprotectedPref, kUnprotectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back( |
- std::make_pair(kProtectedPref, kProtectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- |
- // The Local State hash store will not be reset until the next run. |
- EXPECT_TRUE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kUnprotectedPref)); |
- |
- Reset(); |
- |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // Neither store was modified. |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_PROTECTED_PREF_STORE)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- |
- EXPECT_FALSE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_FALSE(ContainsLegacyHash(kUnprotectedPref)); |
-} |
- |
-TEST_F(TrackedPreferencesMigrationTest, FullMigrationWithLegacyHashStore) { |
- // Store some values with matching MACs in Local State. |
- PresetLegacyStoreValue( |
- MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref, kUnprotectedPrefValue); |
- PresetLegacyStoreValue(MOCK_UNPROTECTED_PREF_STORE, |
- kPreviouslyUnprotectedPref, |
- kPreviouslyUnprotectedPrefValue); |
- PresetLegacyStoreValue( |
- MOCK_PROTECTED_PREF_STORE, kProtectedPref, kProtectedPrefValue); |
- PresetLegacyStoreValue(MOCK_PROTECTED_PREF_STORE, |
- kPreviouslyProtectedPref, |
- kPreviouslyProtectedPrefValue); |
- |
- // Verify that there are no MACs in Preferences or Secure Preferences. |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- // Verify that there are MACs in Local State. |
- EXPECT_TRUE(ContainsLegacyHash(kUnprotectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kPreviouslyProtectedPref)); |
- |
- // Perform a first-pass migration. |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // All values should have been moved to their preferred locations, including |
- // MACs. |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back( |
- std::make_pair(kUnprotectedPref, kUnprotectedPrefValue)); |
- expected_unprotected_values.push_back( |
- std::make_pair(kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back( |
- std::make_pair(kProtectedPref, kProtectedPrefValue)); |
- expected_protected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, expected_unprotected_values); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- // Removing the values from their previous locations is deferred until the new |
- // locations are persisted. |
- EXPECT_TRUE(ContainsLegacyHash(kUnprotectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_TRUE(ContainsLegacyHash(kPreviouslyProtectedPref)); |
- |
- EXPECT_TRUE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- |
- SimulateSuccessfulWrite(MOCK_UNPROTECTED_PREF_STORE); |
- SimulateSuccessfulWrite(MOCK_PROTECTED_PREF_STORE); |
- |
- Reset(); |
- |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // In this run the MACs should have been removed from their previous |
- // locations. There is no more pending action. |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsLegacyHash(kUnprotectedPref)); |
- EXPECT_FALSE(ContainsLegacyHash(kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsLegacyHash(kProtectedPref)); |
- EXPECT_FALSE(ContainsLegacyHash(kPreviouslyProtectedPref)); |
- |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, expected_unprotected_values); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
-} |
- |
-TEST_F(TrackedPreferencesMigrationTest, FullMigration) { |
- PresetStoreValue( |
- MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref, kUnprotectedPrefValue); |
- PresetStoreValue(MOCK_UNPROTECTED_PREF_STORE, |
- kPreviouslyUnprotectedPref, |
- kPreviouslyUnprotectedPrefValue); |
- PresetStoreValue( |
- MOCK_PROTECTED_PREF_STORE, kProtectedPref, kProtectedPrefValue); |
- PresetStoreValue(MOCK_PROTECTED_PREF_STORE, |
- kPreviouslyProtectedPref, |
- kPreviouslyProtectedPrefValue); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- EXPECT_FALSE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(MigrationCompleted()); |
- |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- EXPECT_TRUE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_TRUE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_TRUE(StoreModifiedByMigration(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(StoreModifiedByMigration(MOCK_PROTECTED_PREF_STORE)); |
- |
- // Values should have been migrated to their store, but migrated values should |
- // still remain in the source store until cleanup tasks are later invoked. |
- { |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back(std::make_pair( |
- kUnprotectedPref, kUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, |
- expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back(std::make_pair( |
- kProtectedPref, kProtectedPrefValue)); |
- expected_protected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- } |
- |
- // A successful write of the protected pref store should result in a clean up |
- // of the unprotected store. |
- SimulateSuccessfulWrite(MOCK_PROTECTED_PREF_STORE); |
- |
- { |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back(std::make_pair( |
- kUnprotectedPref, kUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, |
- expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back(std::make_pair( |
- kProtectedPref, kProtectedPrefValue)); |
- expected_protected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- } |
- |
- SimulateSuccessfulWrite(MOCK_UNPROTECTED_PREF_STORE); |
- |
- { |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back(std::make_pair( |
- kUnprotectedPref, kUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, |
- expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back(std::make_pair( |
- kProtectedPref, kProtectedPrefValue)); |
- expected_protected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- } |
- |
- // Hashes are not cleaned up yet. |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- Reset(); |
- |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- // Hashes are cleaned up. |
- EXPECT_TRUE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_FALSE(ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_UNPROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
- |
- EXPECT_FALSE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kUnprotectedPref)); |
- EXPECT_TRUE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyUnprotectedPref)); |
- EXPECT_TRUE(ContainsHash(MOCK_PROTECTED_PREF_STORE, kProtectedPref)); |
- EXPECT_FALSE( |
- ContainsHash(MOCK_PROTECTED_PREF_STORE, kPreviouslyProtectedPref)); |
-} |
- |
-TEST_F(TrackedPreferencesMigrationTest, CleanupOnly) { |
- // Already migrated; only cleanup needed. |
- PresetStoreValue( |
- MOCK_UNPROTECTED_PREF_STORE, kUnprotectedPref, kUnprotectedPrefValue); |
- PresetStoreValue(MOCK_UNPROTECTED_PREF_STORE, |
- kPreviouslyProtectedPref, |
- kPreviouslyProtectedPrefValue); |
- PresetStoreValue(MOCK_UNPROTECTED_PREF_STORE, |
- kPreviouslyUnprotectedPref, |
- kPreviouslyUnprotectedPrefValue); |
- PresetStoreValue( |
- MOCK_PROTECTED_PREF_STORE, kProtectedPref, kProtectedPrefValue); |
- PresetStoreValue(MOCK_PROTECTED_PREF_STORE, |
- kPreviouslyProtectedPref, |
- kPreviouslyProtectedPrefValue); |
- PresetStoreValue(MOCK_PROTECTED_PREF_STORE, |
- kPreviouslyUnprotectedPref, |
- kPreviouslyUnprotectedPrefValue); |
- |
- HandPrefsToMigrator(MOCK_UNPROTECTED_PREF_STORE); |
- EXPECT_FALSE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(MigrationCompleted()); |
- |
- HandPrefsToMigrator(MOCK_PROTECTED_PREF_STORE); |
- EXPECT_TRUE(MigrationCompleted()); |
- |
- EXPECT_TRUE(HasPrefs(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_TRUE(HasPrefs(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE( |
- WasOnSuccessfulWriteCallbackRegistered(MOCK_PROTECTED_PREF_STORE)); |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_UNPROTECTED_PREF_STORE)); |
- EXPECT_FALSE(StoreModifiedByMigration(MOCK_PROTECTED_PREF_STORE)); |
- |
- // Cleanup should happen synchronously if the values were already present in |
- // their destination stores. |
- { |
- base::StringPairs expected_unprotected_values; |
- expected_unprotected_values.push_back(std::make_pair( |
- kUnprotectedPref, kUnprotectedPrefValue)); |
- expected_unprotected_values.push_back(std::make_pair( |
- kPreviouslyProtectedPref, kPreviouslyProtectedPrefValue)); |
- VerifyValuesStored(MOCK_UNPROTECTED_PREF_STORE, |
- expected_unprotected_values); |
- |
- base::StringPairs expected_protected_values; |
- expected_protected_values.push_back(std::make_pair( |
- kProtectedPref, kProtectedPrefValue)); |
- expected_protected_values.push_back(std::make_pair( |
- kPreviouslyUnprotectedPref, kPreviouslyUnprotectedPrefValue)); |
- VerifyValuesStored(MOCK_PROTECTED_PREF_STORE, expected_protected_values); |
- } |
-} |