Chromium Code Reviews| Index: chrome/browser/prefs/pref_hash_filter_unittest.cc |
| diff --git a/chrome/browser/prefs/pref_hash_filter_unittest.cc b/chrome/browser/prefs/pref_hash_filter_unittest.cc |
| index 1c7dfc6615262e18be525d9d8d15ba5c326be05c..9db0d6b8a312e821ff3d5ea573942989a8811c60 100644 |
| --- a/chrome/browser/prefs/pref_hash_filter_unittest.cc |
| +++ b/chrome/browser/prefs/pref_hash_filter_unittest.cc |
| @@ -19,8 +19,10 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/prefs/testing_pref_store.h" |
| #include "base/values.h" |
| +#include "chrome/browser/prefs/mock_validation_observer.h" |
| #include "chrome/browser/prefs/pref_hash_store.h" |
| #include "chrome/browser/prefs/pref_hash_store_transaction.h" |
| +#include "chrome/browser/prefs/tracked/tracked_preference_validation_observer.h" |
| #include "chrome/common/pref_names.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -336,10 +338,14 @@ class PrefHashFilterTest |
| scoped_ptr<MockPrefHashStore> temp_mock_pref_hash_store( |
| new MockPrefHashStore); |
| mock_pref_hash_store_ = temp_mock_pref_hash_store.get(); |
| - pref_hash_filter_.reset( |
| - new PrefHashFilter(temp_mock_pref_hash_store.PassAs<PrefHashStore>(), |
| - configuration, |
| - arraysize(kTestTrackedPrefs))); |
| + validation_data_ = new MockValidationObserver::ValidationData(); |
| + scoped_ptr<MockValidationObserver> mock_validation_observer( |
| + new MockValidationObserver(validation_data_)); |
| + pref_hash_filter_.reset(new PrefHashFilter( |
| + temp_mock_pref_hash_store.PassAs<PrefHashStore>(), |
| + configuration, |
| + mock_validation_observer.PassAs<TrackedPreferenceValidationObserver>(), |
|
erikwright (departed)
2014/05/14 00:39:26
I assume you decided it was clearer not to inline
grt (UTC plus 2)
2014/05/14 18:57:22
Not really. I thought PassAs was required (which w
grt (UTC plus 2)
2014/05/15 02:07:00
Well, as it turns out PassAs would be required in
erikwright (departed)
2014/05/15 13:49:02
Ah, yes, make_scoped_ptr infers the type from its
|
| + arraysize(kTestTrackedPrefs))); |
| } |
| bool RecordedReset() { |
| @@ -347,6 +353,7 @@ class PrefHashFilterTest |
| } |
| MockPrefHashStore* mock_pref_hash_store_; |
| + scoped_refptr<MockValidationObserver::ValidationData> validation_data_; |
| base::DictionaryValue pref_store_contents_; |
| scoped_ptr<PrefHashFilter> pref_hash_filter_; |
| @@ -369,6 +376,13 @@ TEST_P(PrefHashFilterTest, EmptyAndUnchanged) { |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| ASSERT_FALSE(RecordedReset()); |
| EXPECT_FALSE(mock_pref_hash_store_->commit_performed()); |
| + |
| + // Observer saw all paths, and all unchanged. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| } |
| TEST_P(PrefHashFilterTest, FilterTrackedPrefUpdate) { |
| @@ -512,6 +526,23 @@ TEST_P(PrefHashFilterTest, EmptyAndUnknown) { |
| ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, |
| stored_split_value.second); |
| EXPECT_FALSE(mock_pref_hash_store_->commit_performed()); |
| + |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| + const MockValidationObserver::ValidationData::ValidationEvent* |
| + validated_split_pref = validation_data_->GetEventForPath(kSplitPref); |
| + ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, |
| + validated_split_pref->strategy); |
|
erikwright (departed)
2014/05/14 00:39:26
Can you add at least one check somewhere that an a
grt (UTC plus 2)
2014/05/14 18:57:22
Done.
|
| + EXPECT_EQ(TrackedPreferenceHelper::DONT_RESET, |
| + validated_split_pref->reset_action); |
| } |
| TEST_P(PrefHashFilterTest, InitialValueUnknown) { |
| @@ -539,6 +570,16 @@ TEST_P(PrefHashFilterTest, InitialValueUnknown) { |
| ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = |
| mock_pref_hash_store_->stored_value(kAtomicPref); |
| MockPrefHashStore::ValuePtrStrategyPair stored_split_value = |
| @@ -598,6 +639,16 @@ TEST_P(PrefHashFilterTest, InitialValueTrustedUnknown) { |
| ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| // Seeding is always allowed for trusted unknown values. |
| const base::Value* atomic_value_in_store; |
| ASSERT_TRUE(pref_store_contents_.Get(kAtomicPref, &atomic_value_in_store)); |
| @@ -651,6 +702,8 @@ TEST_P(PrefHashFilterTest, InitialValueChanged) { |
| ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // CHANGED 2 |
| + |
| MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = |
| mock_pref_hash_store_->stored_value(kAtomicPref); |
| MockPrefHashStore::ValuePtrStrategyPair stored_split_value = |
| @@ -713,6 +766,16 @@ TEST_P(PrefHashFilterTest, EmptyCleared) { |
| ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::CLEARED)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| // Regardless of the enforcement level, the only thing that should be done is |
| // to restore the hash for NULL. The value itself should still be NULL. |
| ASSERT_FALSE(pref_store_contents_.Get(kAtomicPref, NULL)); |
| @@ -751,6 +814,16 @@ TEST_P(PrefHashFilterTest, InitialValueMigrated) { |
| ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, one of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(1u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::WEAK_LEGACY)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 1u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = |
| mock_pref_hash_store_->stored_value(kAtomicPref); |
| ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, |
| @@ -797,6 +870,16 @@ TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) { |
| mock_pref_hash_store_->checked_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::SECURE_LEGACY)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| // Ensure that both the atomic and split hashes were restored. |
| ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
| @@ -860,6 +943,16 @@ TEST_P(PrefHashFilterTest, DontResetReportOnly) { |
| ASSERT_EQ(4u, mock_pref_hash_store_->stored_paths_count()); |
| ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
| + // Observer saw all prefs, four of which had the expected value_state. |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs), |
| + validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(4u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::CHANGED)); |
| + ASSERT_EQ(arraysize(kTestTrackedPrefs) - 4u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| + |
| // No matter what the enforcement level is, the report only pref should never |
| // be reset. |
| ASSERT_TRUE(pref_store_contents_.Get(kReportOnlyPref, NULL)); |
| @@ -967,6 +1060,15 @@ TEST_P(PrefHashFilterTest, MigrateValuesTest) { |
| ASSERT_EQ("foobar3", value); |
| ASSERT_FALSE(destination->GetValue(kReportOnlyPref, NULL)); |
| ASSERT_FALSE(destination->GetValue(kAtomicPref4, NULL)); |
| + |
| + // Observer saw all prefs, two of which had the expected value_state. |
| + ASSERT_EQ(2u, validation_data_->recorded_validations_count()); |
| + ASSERT_EQ(1u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::CHANGED)); |
| + ASSERT_EQ(1u, |
| + validation_data_->CountValidationsOfState( |
| + PrefHashStoreTransaction::UNCHANGED)); |
| } else { |
| std::string value; |
| @@ -987,6 +1089,9 @@ TEST_P(PrefHashFilterTest, MigrateValuesTest) { |
| ASSERT_EQ("foobar3", value); |
| ASSERT_FALSE(destination->GetValue(kAtomicPref4, NULL)); |
| ASSERT_FALSE(destination->GetValue(kReportOnlyPref, NULL)); |
| + |
| + // Observer saw no prefs. |
| + EXPECT_EQ(0u, validation_data_->recorded_validations_count()); |
| } |
| EXPECT_FALSE(mock_pref_hash_store_->commit_performed()); |
| } |