| 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 87886d6a3636bcb060a6692d444235ffc9810964..59d6d03b44fbf3ab421781cb714d9aae3957c751 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"
|
|
|
| @@ -338,10 +340,13 @@ 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();
|
| + pref_hash_filter_.reset(new PrefHashFilter(
|
| + temp_mock_pref_hash_store.PassAs<PrefHashStore>(),
|
| + configuration,
|
| + scoped_ptr<TrackedPreferenceValidationObserver>(
|
| + new MockValidationObserver(validation_data_)),
|
| + arraysize(kTestTrackedPrefs)));
|
| }
|
|
|
| bool RecordedReset() {
|
| @@ -362,6 +367,7 @@ class PrefHashFilterTest
|
| MockPrefHashStore* mock_pref_hash_store_;
|
| scoped_ptr<base::DictionaryValue> pref_store_contents_;
|
| bool last_filter_on_load_modified_prefs_;
|
| + scoped_refptr<MockValidationObserver::ValidationData> validation_data_;
|
| scoped_ptr<PrefHashFilter> pref_hash_filter_;
|
|
|
| private:
|
| @@ -394,6 +400,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) {
|
| @@ -537,6 +550,29 @@ 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);
|
| + EXPECT_EQ(TrackedPreferenceHelper::DONT_RESET,
|
| + validated_split_pref->reset_action);
|
| + const MockValidationObserver::ValidationData::ValidationEvent*
|
| + validated_atomic_pref = validation_data_->GetEventForPath(kAtomicPref);
|
| + ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
|
| + validated_atomic_pref->strategy);
|
| + EXPECT_EQ(TrackedPreferenceHelper::DONT_RESET,
|
| + validated_atomic_pref->reset_action);
|
| }
|
|
|
| TEST_P(PrefHashFilterTest, InitialValueUnknown) {
|
| @@ -563,6 +599,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 =
|
| @@ -622,6 +668,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));
|
| @@ -674,6 +730,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 =
|
| @@ -736,6 +794,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));
|
| @@ -773,6 +841,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,
|
| @@ -819,6 +897,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());
|
|
|
| @@ -881,6 +969,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));
|
|
|