Index: trunk/src/chrome/browser/prefs/pref_hash_filter_unittest.cc |
=================================================================== |
--- trunk/src/chrome/browser/prefs/pref_hash_filter_unittest.cc (revision 269437) |
+++ trunk/src/chrome/browser/prefs/pref_hash_filter_unittest.cc (working copy) |
@@ -320,9 +320,7 @@ |
class PrefHashFilterTest |
: public testing::TestWithParam<PrefHashFilter::EnforcementLevel> { |
public: |
- PrefHashFilterTest() : mock_pref_hash_store_(NULL), |
- pref_store_contents_(new base::DictionaryValue), |
- last_filter_on_load_modified_prefs_(false) {} |
+ PrefHashFilterTest() : mock_pref_hash_store_(NULL) {} |
virtual void SetUp() OVERRIDE { |
// Construct a PrefHashFilter and MockPrefHashStore for the test. |
@@ -345,41 +343,18 @@ |
} |
bool RecordedReset() { |
- return pref_store_contents_->Get(prefs::kPreferenceResetTime, NULL); |
+ return 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_; |
- bool last_filter_on_load_modified_prefs_; |
+ base::DictionaryValue pref_store_contents_; |
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); |
- } |
- |
DISALLOW_COPY_AND_ASSIGN(PrefHashFilterTest); |
}; |
TEST_P(PrefHashFilterTest, EmptyAndUnchanged) { |
- DoFilterOnLoad(false); |
+ ASSERT_FALSE(pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
// All paths checked. |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
@@ -512,14 +487,14 @@ |
} |
TEST_P(PrefHashFilterTest, EmptyAndUnknown) { |
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ 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_UNKNOWN_VALUE); |
mock_pref_hash_store_->SetCheckResult( |
kSplitPref, PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE); |
- DoFilterOnLoad(false); |
+ ASSERT_FALSE(pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
@@ -542,22 +517,23 @@ |
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); |
+ 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); |
+ pref_store_contents_.Set(kSplitPref, dict_value); |
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ 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(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD, |
+ pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
@@ -574,10 +550,10 @@ |
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_FALSE(pref_store_contents_.Get(kAtomicPref, NULL)); |
ASSERT_EQ(NULL, stored_atomic_value.first); |
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ ASSERT_FALSE(pref_store_contents_.Get(kSplitPref, NULL)); |
ASSERT_EQ(NULL, stored_split_value.first); |
ASSERT_TRUE(RecordedReset()); |
@@ -585,12 +561,12 @@ |
// 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_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_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); |
@@ -602,21 +578,21 @@ |
TEST_P(PrefHashFilterTest, InitialValueTrustedUnknown) { |
// Ownership of this value is transfered to |pref_store_contents_|. |
base::Value* string_value = base::Value::CreateStringValue("test"); |
- pref_store_contents_->Set(kAtomicPref, 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); |
+ pref_store_contents_.Set(kSplitPref, dict_value); |
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ 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_FALSE(pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
@@ -624,7 +600,7 @@ |
// 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_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); |
@@ -633,7 +609,7 @@ |
stored_atomic_value.second); |
const base::Value* split_value_in_store; |
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &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); |
@@ -646,17 +622,17 @@ |
TEST_P(PrefHashFilterTest, InitialValueChanged) { |
// Ownership of this value is transfered to |pref_store_contents_|. |
base::Value* int_value = base::Value::CreateIntegerValue(1234); |
- pref_store_contents_->Set(kAtomicPref, int_value); |
+ 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); |
+ pref_store_contents_.Set(kSplitPref, dict_value); |
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ ASSERT_TRUE(pref_store_contents_.Get(kAtomicPref, NULL)); |
+ ASSERT_TRUE(pref_store_contents_.Get(kSplitPref, NULL)); |
mock_pref_hash_store_->SetCheckResult(kAtomicPref, |
PrefHashStoreTransaction::CHANGED); |
@@ -668,7 +644,8 @@ |
mock_invalid_keys.push_back("c"); |
mock_pref_hash_store_->SetInvalidKeysResult(kSplitPref, mock_invalid_keys); |
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD); |
+ ASSERT_EQ(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD, |
+ pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
@@ -685,13 +662,13 @@ |
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_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_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")); |
@@ -704,12 +681,12 @@ |
// 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_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_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")); |
@@ -724,13 +701,13 @@ |
} |
TEST_P(PrefHashFilterTest, EmptyCleared) { |
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ 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_FALSE(pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); |
@@ -738,14 +715,14 @@ |
// 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)); |
+ 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)); |
+ 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); |
@@ -760,14 +737,15 @@ |
// Ownership of this value is transfered to |pref_store_contents_|. |
base::ListValue* list_value = new base::ListValue; |
list_value->Append(base::Value::CreateStringValue("test")); |
- pref_store_contents_->Set(kAtomicPref, list_value); |
+ pref_store_contents_.Set(kAtomicPref, list_value); |
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); |
+ ASSERT_TRUE(pref_store_contents_.Get(kAtomicPref, NULL)); |
mock_pref_hash_store_->SetCheckResult(kAtomicPref, |
PrefHashStoreTransaction::WEAK_LEGACY); |
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD); |
+ ASSERT_EQ(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD, |
+ pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count()); |
@@ -780,7 +758,7 @@ |
if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) { |
// Ensure the pref was cleared and the hash for NULL was restored if the |
// current enforcement level prevents migration. |
- ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); |
+ ASSERT_FALSE(pref_store_contents_.Get(kAtomicPref, NULL)); |
ASSERT_EQ(NULL, stored_atomic_value.first); |
ASSERT_TRUE(RecordedReset()); |
@@ -788,7 +766,7 @@ |
// 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_TRUE(pref_store_contents_.Get(kAtomicPref, &atomic_value_in_store)); |
ASSERT_EQ(list_value, atomic_value_in_store); |
ASSERT_EQ(list_value, stored_atomic_value.first); |
@@ -800,21 +778,21 @@ |
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); |
+ 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); |
+ pref_store_contents_.Set(kSplitPref, dict_value); |
- ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); |
- ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); |
+ 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_FALSE(pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
mock_pref_hash_store_->checked_paths_count()); |
ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
@@ -830,7 +808,7 @@ |
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_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); |
@@ -839,7 +817,7 @@ |
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_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); |
@@ -854,15 +832,15 @@ |
base::Value* report_only_val = base::Value::CreateIntegerValue(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); |
+ 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)); |
+ 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); |
@@ -873,7 +851,8 @@ |
mock_pref_hash_store_->SetCheckResult(kReportOnlySplitPref, |
PrefHashStoreTransaction::CHANGED); |
- DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD); |
+ ASSERT_EQ(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD, |
+ pref_hash_filter_->FilterOnLoad(&pref_store_contents_)); |
// All prefs should be checked and a new hash should be stored for each tested |
// pref. |
ASSERT_EQ(arraysize(kTestTrackedPrefs), |
@@ -883,8 +862,8 @@ |
// 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_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, |
@@ -892,8 +871,8 @@ |
// 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_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); |
@@ -901,8 +880,8 @@ |
} 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_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); |
@@ -915,6 +894,103 @@ |
EXPECT_FALSE(mock_pref_hash_store_->commit_performed()); |
} |
+TEST_P(PrefHashFilterTest, MigrateValuesTest) { |
+ // Migration configuration should only contain the protected preferences. |
+ std::vector<PrefHashFilter::TrackedPreferenceMetadata> configuration = |
+ GetConfiguration(GetParam()); |
+ std::vector<PrefHashFilter::TrackedPreferenceMetadata> |
+ migration_configuration; |
+ |
+ for (std::vector<PrefHashFilter::TrackedPreferenceMetadata>::iterator it = |
+ configuration.begin(); |
+ it != configuration.end(); |
+ ++it) { |
+ if (it->enforcement_level >= PrefHashFilter::ENFORCE_ON_LOAD) |
+ migration_configuration.push_back(*it); |
+ } |
+ |
+ // Discards the default created pref_hash_filter_. |
+ InitializePrefHashFilter(migration_configuration); |
+ |
+ scoped_refptr<TestingPrefStore> source(new TestingPrefStore); |
+ scoped_refptr<TestingPrefStore> destination(new TestingPrefStore); |
+ |
+ // If enforcing, should be migrated. |
+ source->SetString(kAtomicPref, "foobar"); |
+ mock_pref_hash_store_->SetCheckResult(kAtomicPref, |
+ PrefHashStoreTransaction::UNCHANGED); |
+ |
+ // If enforcing, should be discarded due to pre-existing value in |
+ // |destination|. |
+ source->SetString(kAtomicPref2, "foobar2"); |
+ mock_pref_hash_store_->SetCheckResult(kAtomicPref2, |
+ PrefHashStoreTransaction::UNCHANGED); |
+ |
+ // If enforcing, should be kept preferentially to value from |source|. If not |
+ // enforcing, should still be unaffected. |
+ destination->SetString(kAtomicPref2, "foobar2 preexisting"); |
+ // Should stay in |destination| in both scenarios. |
+ destination->SetString(kAtomicPref3, "foobar3"); |
+ mock_pref_hash_store_->SetCheckResult(kAtomicPref3, |
+ PrefHashStoreTransaction::UNCHANGED); |
+ |
+ // When enforcing, should be discarded due to MAC mismatch. If not enforcing, |
+ // stays in |source|. |
+ source->SetString(kAtomicPref4, "foobar4"); |
+ mock_pref_hash_store_->SetCheckResult(kAtomicPref4, |
+ PrefHashStoreTransaction::CHANGED); |
+ |
+ // Should remain in |source| in both scenarios. |
+ source->SetString(kReportOnlyPref, "helloworld"); |
+ mock_pref_hash_store_->SetCheckResult(kReportOnlyPref, |
+ PrefHashStoreTransaction::UNCHANGED); |
+ |
+ // Perform the migration. |
+ pref_hash_filter_->MigrateValues(source, destination); |
+ ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); |
+ |
+ if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) { |
+ std::string value; |
+ |
+ ASSERT_FALSE(source->GetValue(kAtomicPref, NULL)); |
+ ASSERT_FALSE(source->GetValue(kAtomicPref2, NULL)); |
+ ASSERT_FALSE(source->GetValue(kAtomicPref3, NULL)); |
+ ASSERT_FALSE(source->GetValue(kAtomicPref4, NULL)); |
+ ASSERT_TRUE(source->GetString(kReportOnlyPref, &value)); |
+ ASSERT_EQ("helloworld", value); |
+ |
+ ASSERT_TRUE(destination->GetString(kAtomicPref, &value)); |
+ ASSERT_EQ("foobar", value); |
+ ASSERT_TRUE(destination->GetString(kAtomicPref2, &value)); |
+ ASSERT_EQ("foobar2 preexisting", value); |
+ ASSERT_TRUE(destination->GetString(kAtomicPref3, &value)); |
+ ASSERT_EQ("foobar3", value); |
+ ASSERT_FALSE(destination->GetValue(kReportOnlyPref, NULL)); |
+ ASSERT_FALSE(destination->GetValue(kAtomicPref4, NULL)); |
+ } else { |
+ std::string value; |
+ |
+ ASSERT_TRUE(source->GetString(kAtomicPref, &value)); |
+ ASSERT_EQ("foobar", value); |
+ ASSERT_TRUE(source->GetString(kAtomicPref2, &value)); |
+ ASSERT_EQ("foobar2", value); |
+ ASSERT_FALSE(source->GetString(kAtomicPref3, &value)); |
+ ASSERT_TRUE(source->GetString(kAtomicPref4, &value)); |
+ ASSERT_EQ("foobar4", value); |
+ ASSERT_TRUE(source->GetString(kReportOnlyPref, &value)); |
+ ASSERT_EQ("helloworld", value); |
+ |
+ ASSERT_FALSE(destination->GetValue(kAtomicPref, NULL)); |
+ ASSERT_TRUE(destination->GetString(kAtomicPref2, &value)); |
+ ASSERT_EQ("foobar2 preexisting", value); |
+ ASSERT_TRUE(destination->GetString(kAtomicPref3, &value)); |
+ ASSERT_EQ("foobar3", value); |
+ ASSERT_FALSE(destination->GetValue(kAtomicPref4, NULL)); |
+ ASSERT_FALSE(destination->GetValue(kReportOnlyPref, NULL)); |
+ } |
+ EXPECT_FALSE(mock_pref_hash_store_->commit_performed()); |
+} |
+ |
INSTANTIATE_TEST_CASE_P( |
PrefHashFilterTestInstance, PrefHashFilterTest, |
testing::Values(PrefHashFilter::NO_ENFORCEMENT, |