Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4159)

Unified Diff: chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc

Issue 1227973003: Componentize //chrome/browser/prefs/tracked. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prefs/tracked/pref_hash_filter.cc ('k') | chrome/browser/prefs/tracked/pref_hash_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc
diff --git a/chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc b/chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc
deleted file mode 100644
index 9f5649369c7f8c46bf6c1ba34653444972d5c21f..0000000000000000000000000000000000000000
--- a/chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc
+++ /dev/null
@@ -1,1053 +0,0 @@
-// Copyright 2013 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/pref_hash_filter.h"
-
-#include <map>
-#include <set>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/callback_forward.h"
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/metrics/histogram_base.h"
-#include "base/metrics/histogram_samples.h"
-#include "base/metrics/statistics_recorder.h"
-#include "base/prefs/testing_pref_store.h"
-#include "base/values.h"
-#include "chrome/browser/prefs/tracked/hash_store_contents.h"
-#include "chrome/browser/prefs/tracked/mock_validation_delegate.h"
-#include "chrome/browser/prefs/tracked/pref_hash_store.h"
-#include "chrome/browser/prefs/tracked/pref_hash_store_transaction.h"
-#include "chrome/common/pref_names.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-const char kAtomicPref[] = "atomic_pref";
-const char kAtomicPref2[] = "atomic_pref2";
-const char kAtomicPref3[] = "pref3";
-const char kAtomicPref4[] = "pref4";
-const char kReportOnlyPref[] = "report_only";
-const char kReportOnlySplitPref[] = "report_only_split_pref";
-const char kSplitPref[] = "split_pref";
-
-const PrefHashFilter::TrackedPreferenceMetadata kTestTrackedPrefs[] = {
- {
- 0, kAtomicPref, PrefHashFilter::ENFORCE_ON_LOAD,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- PrefHashFilter::VALUE_PERSONAL
- },
- {
- 1, kReportOnlyPref, PrefHashFilter::NO_ENFORCEMENT,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- PrefHashFilter::VALUE_IMPERSONAL
- },
- {
- 2, kSplitPref, PrefHashFilter::ENFORCE_ON_LOAD,
- PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- PrefHashFilter::VALUE_IMPERSONAL
- },
- {
- 3, kReportOnlySplitPref, PrefHashFilter::NO_ENFORCEMENT,
- PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- PrefHashFilter::VALUE_IMPERSONAL
- },
- {
- 4, kAtomicPref2, PrefHashFilter::ENFORCE_ON_LOAD,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- PrefHashFilter::VALUE_IMPERSONAL
- },
- {
- 5, kAtomicPref3, PrefHashFilter::ENFORCE_ON_LOAD,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- PrefHashFilter::VALUE_IMPERSONAL
- },
- {
- 6, kAtomicPref4, PrefHashFilter::ENFORCE_ON_LOAD,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- PrefHashFilter::VALUE_IMPERSONAL
- },
-};
-
-} // namespace
-
-// A PrefHashStore that allows simulation of CheckValue results and captures
-// checked and stored values.
-class MockPrefHashStore : public PrefHashStore {
- public:
- typedef std::pair<const void*, PrefHashFilter::PrefTrackingStrategy>
- ValuePtrStrategyPair;
-
- MockPrefHashStore()
- : stamp_super_mac_result_(false),
- is_super_mac_valid_result_(false),
- transactions_performed_(0),
- transaction_active_(false) {}
-
- ~MockPrefHashStore() override { EXPECT_FALSE(transaction_active_); }
-
- // Set the result that will be returned when |path| is passed to
- // |CheckValue/CheckSplitValue|.
- void SetCheckResult(const std::string& path,
- PrefHashStoreTransaction::ValueState result);
-
- // Set the invalid_keys that will be returned when |path| is passed to
- // |CheckSplitValue|. SetCheckResult should already have been called for
- // |path| with |result == CHANGED| for this to make any sense.
- void SetInvalidKeysResult(
- const std::string& path,
- const std::vector<std::string>& invalid_keys_result);
-
- // Sets the value that will be returned from
- // PrefHashStoreTransaction::StampSuperMAC().
- void set_stamp_super_mac_result(bool result) {
- stamp_super_mac_result_ = result;
- }
-
- // Sets the value that will be returned from
- // PrefHashStoreTransaction::IsSuperMACValid().
- void set_is_super_mac_valid_result(bool result) {
- is_super_mac_valid_result_ = result;
- }
-
- // Returns the number of transactions that were performed.
- size_t transactions_performed() { return transactions_performed_; }
-
- // Returns the number of paths checked.
- size_t checked_paths_count() const {
- return checked_values_.size();
- }
-
- // Returns the number of paths stored.
- size_t stored_paths_count() const {
- return stored_values_.size();
- }
-
- // Returns the pointer value and strategy that was passed to
- // |CheckHash/CheckSplitHash| for |path|. The returned pointer could since
- // have been freed and is thus not safe to dereference.
- ValuePtrStrategyPair checked_value(const std::string& path) const {
- std::map<std::string, ValuePtrStrategyPair>::const_iterator value =
- checked_values_.find(path);
- if (value != checked_values_.end())
- return value->second;
- return std::make_pair(
- reinterpret_cast<void*>(0xBAD),
- static_cast<PrefHashFilter::PrefTrackingStrategy>(-1));
- }
-
- // Returns the pointer value that was passed to |StoreHash/StoreSplitHash| for
- // |path|. The returned pointer could since have been freed and is thus not
- // safe to dereference.
- ValuePtrStrategyPair stored_value(const std::string& path) const {
- std::map<std::string, ValuePtrStrategyPair>::const_iterator value =
- stored_values_.find(path);
- if (value != stored_values_.end())
- return value->second;
- return std::make_pair(
- reinterpret_cast<void*>(0xBAD),
- static_cast<PrefHashFilter::PrefTrackingStrategy>(-1));
- }
-
- // PrefHashStore implementation.
- scoped_ptr<PrefHashStoreTransaction> BeginTransaction(
- scoped_ptr<HashStoreContents> storage) override;
-
- private:
- // A MockPrefHashStoreTransaction is handed to the caller on
- // MockPrefHashStore::BeginTransaction(). It then stores state in its
- // underlying MockPrefHashStore about calls it receives from that same caller
- // which can later be verified in tests.
- class MockPrefHashStoreTransaction : public PrefHashStoreTransaction {
- public:
- explicit MockPrefHashStoreTransaction(MockPrefHashStore* outer)
- : outer_(outer) {}
-
- ~MockPrefHashStoreTransaction() override {
- outer_->transaction_active_ = false;
- ++outer_->transactions_performed_;
- }
-
- // PrefHashStoreTransaction implementation.
- PrefHashStoreTransaction::ValueState CheckValue(
- const std::string& path,
- const base::Value* value) const override;
- void StoreHash(const std::string& path,
- const base::Value* new_value) override;
- PrefHashStoreTransaction::ValueState CheckSplitValue(
- const std::string& path,
- const base::DictionaryValue* initial_split_value,
- std::vector<std::string>* invalid_keys) const override;
- void StoreSplitHash(const std::string& path,
- const base::DictionaryValue* split_value) override;
- bool HasHash(const std::string& path) const override;
- void ImportHash(const std::string& path, const base::Value* hash) override;
- void ClearHash(const std::string& path) override;
- bool IsSuperMACValid() const override;
- bool StampSuperMac() override;
-
- private:
- MockPrefHashStore* outer_;
-
- DISALLOW_COPY_AND_ASSIGN(MockPrefHashStoreTransaction);
- };
-
- // Records a call to this mock's CheckValue/CheckSplitValue methods.
- PrefHashStoreTransaction::ValueState RecordCheckValue(
- const std::string& path,
- const base::Value* value,
- PrefHashFilter::PrefTrackingStrategy strategy);
-
- // Records a call to this mock's StoreHash/StoreSplitHash methods.
- void RecordStoreHash(const std::string& path,
- const base::Value* new_value,
- PrefHashFilter::PrefTrackingStrategy strategy);
-
- std::map<std::string, PrefHashStoreTransaction::ValueState> check_results_;
- std::map<std::string, std::vector<std::string> > invalid_keys_results_;
-
- bool stamp_super_mac_result_;
- bool is_super_mac_valid_result_;
-
- std::map<std::string, ValuePtrStrategyPair> checked_values_;
- std::map<std::string, ValuePtrStrategyPair> stored_values_;
-
- // Number of transactions that were performed via this MockPrefHashStore.
- size_t transactions_performed_;
-
- // Whether a transaction is currently active (only one transaction should be
- // active at a time).
- bool transaction_active_;
-
- DISALLOW_COPY_AND_ASSIGN(MockPrefHashStore);
-};
-
-void MockPrefHashStore::SetCheckResult(
- const std::string& path, PrefHashStoreTransaction::ValueState result) {
- check_results_.insert(std::make_pair(path, result));
-}
-
-void MockPrefHashStore::SetInvalidKeysResult(
- const std::string& path,
- const std::vector<std::string>& invalid_keys_result) {
- // Ensure |check_results_| has a CHANGED entry for |path|.
- std::map<std::string,
- PrefHashStoreTransaction::ValueState>::const_iterator result =
- check_results_.find(path);
- ASSERT_TRUE(result != check_results_.end());
- ASSERT_EQ(PrefHashStoreTransaction::CHANGED, result->second);
-
- invalid_keys_results_.insert(std::make_pair(path, invalid_keys_result));
-}
-
-scoped_ptr<PrefHashStoreTransaction> MockPrefHashStore::BeginTransaction(
- scoped_ptr<HashStoreContents> storage) {
- EXPECT_FALSE(transaction_active_);
- return scoped_ptr<PrefHashStoreTransaction>(
- new MockPrefHashStoreTransaction(this));
-}
-
-PrefHashStoreTransaction::ValueState MockPrefHashStore::RecordCheckValue(
- const std::string& path,
- const base::Value* value,
- PrefHashFilter::PrefTrackingStrategy strategy) {
- // Record that |path| was checked and validate that it wasn't previously
- // checked.
- EXPECT_TRUE(checked_values_.insert(
- std::make_pair(path, std::make_pair(value, strategy))).second);
- std::map<std::string,
- PrefHashStoreTransaction::ValueState>::const_iterator result =
- check_results_.find(path);
- if (result != check_results_.end())
- return result->second;
- return PrefHashStoreTransaction::UNCHANGED;
-}
-
-void MockPrefHashStore::RecordStoreHash(
- const std::string& path,
- const base::Value* new_value,
- PrefHashFilter::PrefTrackingStrategy strategy) {
- EXPECT_TRUE(stored_values_.insert(
- std::make_pair(path, std::make_pair(new_value, strategy))).second);
-}
-
-PrefHashStoreTransaction::ValueState
-MockPrefHashStore::MockPrefHashStoreTransaction::CheckValue(
- const std::string& path, const base::Value* value) const {
- return outer_->RecordCheckValue(path, value,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC);
-}
-
-void MockPrefHashStore::MockPrefHashStoreTransaction::StoreHash(
- const std::string& path,
- const base::Value* new_value) {
- outer_->RecordStoreHash(path, new_value,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC);
-}
-
-PrefHashStoreTransaction::ValueState
-MockPrefHashStore::MockPrefHashStoreTransaction::CheckSplitValue(
- const std::string& path,
- const base::DictionaryValue* initial_split_value,
- std::vector<std::string>* invalid_keys) const {
- EXPECT_TRUE(invalid_keys && invalid_keys->empty());
-
- std::map<std::string, std::vector<std::string> >::const_iterator
- invalid_keys_result = outer_->invalid_keys_results_.find(path);
- if (invalid_keys_result != outer_->invalid_keys_results_.end()) {
- invalid_keys->insert(invalid_keys->begin(),
- invalid_keys_result->second.begin(),
- invalid_keys_result->second.end());
- }
-
- return outer_->RecordCheckValue(path, initial_split_value,
- PrefHashFilter::TRACKING_STRATEGY_SPLIT);
-}
-
-void MockPrefHashStore::MockPrefHashStoreTransaction::StoreSplitHash(
- const std::string& path,
- const base::DictionaryValue* new_value) {
- outer_->RecordStoreHash(path, new_value,
- PrefHashFilter::TRACKING_STRATEGY_SPLIT);
-}
-
-bool MockPrefHashStore::MockPrefHashStoreTransaction::HasHash(
- const std::string& path) const {
- ADD_FAILURE() << "Unexpected call.";
- return false;
-}
-
-void MockPrefHashStore::MockPrefHashStoreTransaction::ImportHash(
- const std::string& path,
- const base::Value* hash) {
- ADD_FAILURE() << "Unexpected call.";
-}
-
-void MockPrefHashStore::MockPrefHashStoreTransaction::ClearHash(
- const std::string& path) {
- // Allow this to be called by PrefHashFilter's deprecated tracked prefs
- // cleanup tasks.
-}
-
-bool MockPrefHashStore::MockPrefHashStoreTransaction::IsSuperMACValid() const {
- return outer_->is_super_mac_valid_result_;
-}
-
-bool MockPrefHashStore::MockPrefHashStoreTransaction::StampSuperMac() {
- return outer_->stamp_super_mac_result_;
-}
-
-std::vector<PrefHashFilter::TrackedPreferenceMetadata> GetConfiguration(
- PrefHashFilter::EnforcementLevel max_enforcement_level) {
- std::vector<PrefHashFilter::TrackedPreferenceMetadata> configuration(
- kTestTrackedPrefs, kTestTrackedPrefs + arraysize(kTestTrackedPrefs));
- for (std::vector<PrefHashFilter::TrackedPreferenceMetadata>::iterator it =
- configuration.begin();
- it != configuration.end();
- ++it) {
- if (it->enforcement_level > max_enforcement_level)
- it->enforcement_level = max_enforcement_level;
- }
- return configuration;
-}
-
-class PrefHashFilterTest
- : public testing::TestWithParam<PrefHashFilter::EnforcementLevel> {
- public:
- PrefHashFilterTest() : mock_pref_hash_store_(NULL),
- pref_store_contents_(new base::DictionaryValue),
- reset_recorded_(false) {}
-
- void SetUp() override {
- base::StatisticsRecorder::Initialize();
- Reset();
- }
-
- protected:
- // Reset the PrefHashFilter instance.
- void Reset() {
- // Construct a PrefHashFilter and MockPrefHashStore for the test.
- InitializePrefHashFilter(GetConfiguration(GetParam()));
- }
-
- // Initializes |pref_hash_filter_| with a PrefHashFilter that uses a
- // MockPrefHashStore. The raw pointer to the MockPrefHashStore (owned by the
- // PrefHashFilter) is stored in |mock_pref_hash_store_|.
- void InitializePrefHashFilter(const std::vector<
- PrefHashFilter::TrackedPreferenceMetadata>& configuration) {
- 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.Pass(),
- configuration,
- base::Bind(&PrefHashFilterTest::RecordReset, base::Unretained(this)),
- &mock_validation_delegate_,
- arraysize(kTestTrackedPrefs),
- true));
- }
-
- // Verifies whether a reset was reported by the PrefHashFiler. Also verifies
- // that kPreferenceResetTime was set (or not) accordingly.
- void VerifyRecordedReset(bool reset_expected) {
- EXPECT_EQ(reset_expected, reset_recorded_);
- EXPECT_EQ(reset_expected,
- pref_store_contents_->Get(prefs::kPreferenceResetTime, NULL));
- }
-
- // Calls FilterOnLoad() on |pref_hash_Filter_|. |pref_store_contents_| is
- // handed off, but should be given back to us synchronously through
- // GetPrefsBack() as there is no FilterOnLoadInterceptor installed on
- // |pref_hash_filter_|.
- void DoFilterOnLoad(bool expect_prefs_modifications) {
- pref_hash_filter_->FilterOnLoad(
- base::Bind(&PrefHashFilterTest::GetPrefsBack, base::Unretained(this),
- expect_prefs_modifications),
- pref_store_contents_.Pass());
- }
-
- MockPrefHashStore* mock_pref_hash_store_;
- scoped_ptr<base::DictionaryValue> pref_store_contents_;
- MockValidationDelegate mock_validation_delegate_;
- scoped_ptr<PrefHashFilter> pref_hash_filter_;
-
- private:
- // Stores |prefs| back in |pref_store_contents| and ensure
- // |expected_schedule_write| matches the reported |schedule_write|.
- void GetPrefsBack(bool expected_schedule_write,
- scoped_ptr<base::DictionaryValue> prefs,
- bool schedule_write) {
- pref_store_contents_ = prefs.Pass();
- EXPECT_TRUE(pref_store_contents_);
- EXPECT_EQ(expected_schedule_write, schedule_write);
- }
-
- void RecordReset() {
- // As-is |reset_recorded_| is only designed to remember a single reset, make
- // sure none was previously recorded.
- EXPECT_FALSE(reset_recorded_);
- reset_recorded_ = true;
- }
-
- bool reset_recorded_;
-
- DISALLOW_COPY_AND_ASSIGN(PrefHashFilterTest);
-};
-
-TEST_P(PrefHashFilterTest, EmptyAndUnchanged) {
- DoFilterOnLoad(false);
- // All paths checked.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- // No paths stored, since they all return |UNCHANGED|.
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
- // Since there was nothing in |pref_store_contents_| the checked value should
- // have been NULL for all tracked preferences.
- for (size_t i = 0; i < arraysize(kTestTrackedPrefs); ++i) {
- ASSERT_EQ(NULL, mock_pref_hash_store_->checked_value(
- kTestTrackedPrefs[i].name).first);
- }
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
- VerifyRecordedReset(false);
-
- // Delegate saw all paths, and all unchanged.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::UNCHANGED));
-}
-
-TEST_P(PrefHashFilterTest, StampSuperMACAltersStore) {
- mock_pref_hash_store_->set_stamp_super_mac_result(true);
- DoFilterOnLoad(true);
- // No paths stored, since they all return |UNCHANGED|. The StampSuperMAC
- // result is the only reason the prefs were considered altered.
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-}
-
-TEST_P(PrefHashFilterTest, FilterTrackedPrefUpdate) {
- base::DictionaryValue root_dict;
- // Ownership of |string_value| is transfered to |root_dict|.
- base::Value* string_value = new base::StringValue("string value");
- root_dict.Set(kAtomicPref, string_value);
-
- // No path should be stored on FilterUpdate.
- pref_hash_filter_->FilterUpdate(kAtomicPref);
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // One path should be stored on FilterSerializeData.
- pref_hash_filter_->FilterSerializeData(&root_dict);
- ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count());
- MockPrefHashStore::ValuePtrStrategyPair stored_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(string_value, stored_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, stored_value.second);
-
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
- VerifyRecordedReset(false);
-}
-
-TEST_P(PrefHashFilterTest, ReportSuperMacValidity) {
- // Do this once just to force the histogram to be defined.
- DoFilterOnLoad(false);
-
- base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
- "Settings.HashesDictionaryTrusted");
- ASSERT_TRUE(histogram);
-
- base::HistogramBase::Count initial_untrusted =
- histogram->SnapshotSamples()->GetCount(0);
- base::HistogramBase::Count initial_trusted =
- histogram->SnapshotSamples()->GetCount(1);
-
- Reset();
-
- // Run with an invalid super MAC.
- mock_pref_hash_store_->set_is_super_mac_valid_result(false);
-
- DoFilterOnLoad(false);
-
- // Verify that the invalidity was reported.
- ASSERT_EQ(initial_untrusted + 1, histogram->SnapshotSamples()->GetCount(0));
- ASSERT_EQ(initial_trusted, histogram->SnapshotSamples()->GetCount(1));
-
- Reset();
-
- // Run with a valid super MAC.
- mock_pref_hash_store_->set_is_super_mac_valid_result(true);
-
- DoFilterOnLoad(false);
-
- // Verify that the validity was reported.
- ASSERT_EQ(initial_untrusted + 1, histogram->SnapshotSamples()->GetCount(0));
- ASSERT_EQ(initial_trusted + 1, histogram->SnapshotSamples()->GetCount(1));
-}
-
-TEST_P(PrefHashFilterTest, FilterSplitPrefUpdate) {
- base::DictionaryValue root_dict;
- // Ownership of |dict_value| is transfered to |root_dict|.
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->SetString("a", "foo");
- dict_value->SetInteger("b", 1234);
- root_dict.Set(kSplitPref, dict_value);
-
- // No path should be stored on FilterUpdate.
- pref_hash_filter_->FilterUpdate(kSplitPref);
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // One path should be stored on FilterSerializeData.
- pref_hash_filter_->FilterSerializeData(&root_dict);
- ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count());
- MockPrefHashStore::ValuePtrStrategyPair stored_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(dict_value, stored_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value.second);
-
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
- VerifyRecordedReset(false);
-}
-
-TEST_P(PrefHashFilterTest, FilterUntrackedPrefUpdate) {
- base::DictionaryValue root_dict;
- root_dict.Set("untracked", new base::StringValue("some value"));
- pref_hash_filter_->FilterUpdate("untracked");
-
- // No paths should be stored on FilterUpdate.
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // Nor on FilterSerializeData.
- pref_hash_filter_->FilterSerializeData(&root_dict);
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // No transaction should even be started on FilterSerializeData() if there are
- // no updates to perform.
- ASSERT_EQ(0u, mock_pref_hash_store_->transactions_performed());
-}
-
-TEST_P(PrefHashFilterTest, MultiplePrefsFilterSerializeData) {
- base::DictionaryValue root_dict;
- // Ownership of the following values is transfered to |root_dict|.
- base::Value* int_value1 = new base::FundamentalValue(1);
- base::Value* int_value2 = new base::FundamentalValue(2);
- base::Value* int_value3 = new base::FundamentalValue(3);
- base::Value* int_value4 = new base::FundamentalValue(4);
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->Set("a", new base::FundamentalValue(true));
- root_dict.Set(kAtomicPref, int_value1);
- root_dict.Set(kAtomicPref2, int_value2);
- root_dict.Set(kAtomicPref3, int_value3);
- root_dict.Set("untracked", int_value4);
- root_dict.Set(kSplitPref, dict_value);
-
- // Only update kAtomicPref, kAtomicPref3, and kSplitPref.
- pref_hash_filter_->FilterUpdate(kAtomicPref);
- pref_hash_filter_->FilterUpdate(kAtomicPref3);
- pref_hash_filter_->FilterUpdate(kSplitPref);
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // Update kAtomicPref3 again, nothing should be stored still.
- base::Value* int_value5 = new base::FundamentalValue(5);
- root_dict.Set(kAtomicPref3, int_value5);
- ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
-
- // On FilterSerializeData, only kAtomicPref, kAtomicPref3, and kSplitPref
- // should get a new hash.
- pref_hash_filter_->FilterSerializeData(&root_dict);
- ASSERT_EQ(3u, mock_pref_hash_store_->stored_paths_count());
- MockPrefHashStore::ValuePtrStrategyPair stored_value_atomic1 =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(int_value1, stored_value_atomic1.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_value_atomic1.second);
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- MockPrefHashStore::ValuePtrStrategyPair stored_value_atomic3 =
- mock_pref_hash_store_->stored_value(kAtomicPref3);
- ASSERT_EQ(int_value5, stored_value_atomic3.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_value_atomic3.second);
-
- MockPrefHashStore::ValuePtrStrategyPair stored_value_split =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(dict_value, stored_value_split.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value_split.second);
-}
-
-TEST_P(PrefHashFilterTest, UnknownNullValue) {
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
- // NULL values are always trusted by the PrefHashStore.
- mock_pref_hash_store_->SetCheckResult(
- kAtomicPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE);
- mock_pref_hash_store_->SetCheckResult(
- kSplitPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE);
- DoFilterOnLoad(false);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(NULL, stored_atomic_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
-
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(NULL, stored_split_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
-
- // Delegate saw all prefs, two of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::TRUSTED_NULL_VALUE));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::UNCHANGED));
-
- const MockValidationDelegate::ValidationEvent* validated_split_pref =
- mock_validation_delegate_.GetEventForPath(kSplitPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- validated_split_pref->strategy);
- ASSERT_FALSE(validated_split_pref->is_personal);
- const MockValidationDelegate::ValidationEvent* validated_atomic_pref =
- mock_validation_delegate_.GetEventForPath(kAtomicPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- validated_atomic_pref->strategy);
- ASSERT_TRUE(validated_atomic_pref->is_personal);
-}
-
-TEST_P(PrefHashFilterTest, InitialValueUnknown) {
- // Ownership of these values is transfered to |pref_store_contents_|.
- base::StringValue* string_value = new base::StringValue("string value");
- pref_store_contents_->Set(kAtomicPref, string_value);
-
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->SetString("a", "foo");
- dict_value->SetInteger("b", 1234);
- pref_store_contents_->Set(kSplitPref, dict_value);
-
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
-
- mock_pref_hash_store_->SetCheckResult(
- kAtomicPref, PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE);
- mock_pref_hash_store_->SetCheckResult(
- kSplitPref, PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE);
- // If we are enforcing, expect this to report changes.
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- // Delegate saw all prefs, two of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::UNCHANGED));
-
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
- if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) {
- // Ensure the prefs were cleared and the hashes for NULL were restored if
- // the current enforcement level denies seeding.
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_EQ(NULL, stored_atomic_value.first);
-
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
- ASSERT_EQ(NULL, stored_split_value.first);
-
- VerifyRecordedReset(true);
- } else {
- // Otherwise the values should have remained intact and the hashes should
- // have been updated to match them.
- const base::Value* atomic_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store));
- ASSERT_EQ(string_value, atomic_value_in_store);
- ASSERT_EQ(string_value, stored_atomic_value.first);
-
- const base::Value* split_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
- ASSERT_EQ(dict_value, split_value_in_store);
- ASSERT_EQ(dict_value, stored_split_value.first);
-
- VerifyRecordedReset(false);
- }
-}
-
-TEST_P(PrefHashFilterTest, InitialValueTrustedUnknown) {
- // Ownership of this value is transfered to |pref_store_contents_|.
- base::Value* string_value = new base::StringValue("test");
- pref_store_contents_->Set(kAtomicPref, string_value);
-
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->SetString("a", "foo");
- dict_value->SetInteger("b", 1234);
- pref_store_contents_->Set(kSplitPref, dict_value);
-
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
-
- mock_pref_hash_store_->SetCheckResult(
- kAtomicPref, PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE);
- mock_pref_hash_store_->SetCheckResult(
- kSplitPref, PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE);
- DoFilterOnLoad(false);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- // Delegate saw all prefs, two of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
- mock_validation_delegate_.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));
- ASSERT_EQ(string_value, atomic_value_in_store);
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(string_value, stored_atomic_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
-
- const base::Value* split_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
- ASSERT_EQ(dict_value, split_value_in_store);
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(dict_value, stored_split_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
-}
-
-TEST_P(PrefHashFilterTest, InitialValueChanged) {
- // Ownership of this value is transfered to |pref_store_contents_|.
- base::Value* int_value = new base::FundamentalValue(1234);
- pref_store_contents_->Set(kAtomicPref, int_value);
-
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->SetString("a", "foo");
- dict_value->SetInteger("b", 1234);
- dict_value->SetInteger("c", 56);
- dict_value->SetBoolean("d", false);
- pref_store_contents_->Set(kSplitPref, dict_value);
-
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
-
- mock_pref_hash_store_->SetCheckResult(kAtomicPref,
- PrefHashStoreTransaction::CHANGED);
- mock_pref_hash_store_->SetCheckResult(kSplitPref,
- PrefHashStoreTransaction::CHANGED);
-
- std::vector<std::string> mock_invalid_keys;
- mock_invalid_keys.push_back("a");
- mock_invalid_keys.push_back("c");
- mock_pref_hash_store_->SetInvalidKeysResult(kSplitPref, mock_invalid_keys);
-
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
- if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) {
- // Ensure the atomic pref was cleared and the hash for NULL was restored if
- // the current enforcement level prevents changes.
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_EQ(NULL, stored_atomic_value.first);
-
- // The split pref on the other hand should only have been stripped of its
- // invalid keys.
- const base::Value* split_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
- ASSERT_EQ(2U, dict_value->size());
- ASSERT_FALSE(dict_value->HasKey("a"));
- ASSERT_TRUE(dict_value->HasKey("b"));
- ASSERT_FALSE(dict_value->HasKey("c"));
- ASSERT_TRUE(dict_value->HasKey("d"));
- ASSERT_EQ(dict_value, stored_split_value.first);
-
- VerifyRecordedReset(true);
- } else {
- // Otherwise the value should have remained intact and the hash should have
- // been updated to match it.
- const base::Value* atomic_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store));
- ASSERT_EQ(int_value, atomic_value_in_store);
- ASSERT_EQ(int_value, stored_atomic_value.first);
-
- const base::Value* split_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
- ASSERT_EQ(dict_value, split_value_in_store);
- ASSERT_EQ(4U, dict_value->size());
- ASSERT_TRUE(dict_value->HasKey("a"));
- ASSERT_TRUE(dict_value->HasKey("b"));
- ASSERT_TRUE(dict_value->HasKey("c"));
- ASSERT_TRUE(dict_value->HasKey("d"));
- ASSERT_EQ(dict_value, stored_split_value.first);
-
- VerifyRecordedReset(false);
- }
-}
-
-TEST_P(PrefHashFilterTest, EmptyCleared) {
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
- mock_pref_hash_store_->SetCheckResult(kAtomicPref,
- PrefHashStoreTransaction::CLEARED);
- mock_pref_hash_store_->SetCheckResult(kSplitPref,
- PrefHashStoreTransaction::CLEARED);
- DoFilterOnLoad(false);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- // Delegate saw all prefs, two of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::CLEARED));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
- mock_validation_delegate_.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));
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(NULL, stored_atomic_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
-
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(NULL, stored_split_value.first);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
-}
-
-TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) {
- // Ownership of these values is transfered to |pref_store_contents_|.
- base::StringValue* string_value = new base::StringValue("string value");
- pref_store_contents_->Set(kAtomicPref, string_value);
-
- base::DictionaryValue* dict_value = new base::DictionaryValue;
- dict_value->SetString("a", "foo");
- dict_value->SetInteger("b", 1234);
- pref_store_contents_->Set(kSplitPref, dict_value);
-
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
-
- mock_pref_hash_store_->SetCheckResult(
- kAtomicPref, PrefHashStoreTransaction::SECURE_LEGACY);
- mock_pref_hash_store_->SetCheckResult(
- kSplitPref, PrefHashStoreTransaction::SECURE_LEGACY);
- DoFilterOnLoad(false);
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- // Delegate saw all prefs, two of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::SECURE_LEGACY));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::UNCHANGED));
-
- // Ensure that both the atomic and split hashes were restored.
- ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
-
- // In all cases, the values should have remained intact and the hashes should
- // have been updated to match them.
-
- MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
- mock_pref_hash_store_->stored_value(kAtomicPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
- stored_atomic_value.second);
- const base::Value* atomic_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store));
- ASSERT_EQ(string_value, atomic_value_in_store);
- ASSERT_EQ(string_value, stored_atomic_value.first);
-
- MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
- mock_pref_hash_store_->stored_value(kSplitPref);
- ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
- stored_split_value.second);
- const base::Value* split_value_in_store;
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
- ASSERT_EQ(dict_value, split_value_in_store);
- ASSERT_EQ(dict_value, stored_split_value.first);
-
- VerifyRecordedReset(false);
-}
-
-TEST_P(PrefHashFilterTest, DontResetReportOnly) {
- // Ownership of these values is transfered to |pref_store_contents_|.
- base::Value* int_value1 = new base::FundamentalValue(1);
- base::Value* int_value2 = new base::FundamentalValue(2);
- base::Value* report_only_val = new base::FundamentalValue(3);
- base::DictionaryValue* report_only_split_val = new base::DictionaryValue;
- report_only_split_val->SetInteger("a", 1234);
- pref_store_contents_->Set(kAtomicPref, int_value1);
- pref_store_contents_->Set(kAtomicPref2, int_value2);
- pref_store_contents_->Set(kReportOnlyPref, report_only_val);
- pref_store_contents_->Set(kReportOnlySplitPref, report_only_split_val);
-
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref2, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kReportOnlyPref, NULL));
- ASSERT_TRUE(pref_store_contents_->Get(kReportOnlySplitPref, NULL));
-
- mock_pref_hash_store_->SetCheckResult(kAtomicPref,
- PrefHashStoreTransaction::CHANGED);
- mock_pref_hash_store_->SetCheckResult(kAtomicPref2,
- PrefHashStoreTransaction::CHANGED);
- mock_pref_hash_store_->SetCheckResult(kReportOnlyPref,
- PrefHashStoreTransaction::CHANGED);
- mock_pref_hash_store_->SetCheckResult(kReportOnlySplitPref,
- PrefHashStoreTransaction::CHANGED);
-
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD);
- // All prefs should be checked and a new hash should be stored for each tested
- // pref.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_pref_hash_store_->checked_paths_count());
- ASSERT_EQ(4u, mock_pref_hash_store_->stored_paths_count());
- ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
-
- // Delegate saw all prefs, four of which had the expected value_state.
- ASSERT_EQ(arraysize(kTestTrackedPrefs),
- mock_validation_delegate_.recorded_validations_count());
- ASSERT_EQ(4u,
- mock_validation_delegate_.CountValidationsOfState(
- PrefHashStoreTransaction::CHANGED));
- ASSERT_EQ(arraysize(kTestTrackedPrefs) - 4u,
- mock_validation_delegate_.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));
- ASSERT_TRUE(pref_store_contents_->Get(kReportOnlySplitPref, NULL));
- ASSERT_EQ(report_only_val,
- mock_pref_hash_store_->stored_value(kReportOnlyPref).first);
- ASSERT_EQ(report_only_split_val,
- mock_pref_hash_store_->stored_value(kReportOnlySplitPref).first);
-
- // All other prefs should have been reset if the enforcement level allows it.
- if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) {
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref2, NULL));
- ASSERT_EQ(NULL, mock_pref_hash_store_->stored_value(kAtomicPref).first);
- ASSERT_EQ(NULL, mock_pref_hash_store_->stored_value(kAtomicPref2).first);
-
- VerifyRecordedReset(true);
- } else {
- const base::Value* value_in_store;
- const base::Value* value_in_store2;
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &value_in_store));
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref2, &value_in_store2));
- ASSERT_EQ(int_value1, value_in_store);
- ASSERT_EQ(int_value1,
- mock_pref_hash_store_->stored_value(kAtomicPref).first);
- ASSERT_EQ(int_value2, value_in_store2);
- ASSERT_EQ(int_value2,
- mock_pref_hash_store_->stored_value(kAtomicPref2).first);
-
- VerifyRecordedReset(false);
- }
-}
-
-INSTANTIATE_TEST_CASE_P(
- PrefHashFilterTestInstance, PrefHashFilterTest,
- testing::Values(PrefHashFilter::NO_ENFORCEMENT,
- PrefHashFilter::ENFORCE_ON_LOAD));
« no previous file with comments | « chrome/browser/prefs/tracked/pref_hash_filter.cc ('k') | chrome/browser/prefs/tracked/pref_hash_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698