| Index: components/user_prefs/tracked/pref_hash_store_impl_unittest.cc
|
| diff --git a/components/user_prefs/tracked/pref_hash_store_impl_unittest.cc b/components/user_prefs/tracked/pref_hash_store_impl_unittest.cc
|
| index 10867e66d4510dc12500d0b526becc70392073be..6dae7719a21459a2d606ea7a5ebfbc7240b57867 100644
|
| --- a/components/user_prefs/tracked/pref_hash_store_impl_unittest.cc
|
| +++ b/components/user_prefs/tracked/pref_hash_store_impl_unittest.cc
|
| @@ -15,14 +15,19 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| class PrefHashStoreImplTest : public testing::Test {
|
| + public:
|
| + PrefHashStoreImplTest() : contents_(&pref_store_contents_) {}
|
| +
|
| protected:
|
| - std::unique_ptr<HashStoreContents> CreateHashStoreContents() {
|
| - return std::unique_ptr<HashStoreContents>(
|
| - new DictionaryHashStoreContents(&pref_store_contents_));
|
| - }
|
| + HashStoreContents* GetHashStoreContents() { return &contents_; }
|
|
|
| private:
|
| base::DictionaryValue pref_store_contents_;
|
| + // Must be declared after |pref_store_contents_| as it needs to be outlived
|
| + // by it.
|
| + DictionaryHashStoreContents contents_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PrefHashStoreImplTest);
|
| };
|
|
|
| TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
|
| @@ -33,7 +38,7 @@ TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
|
| // 32 NULL bytes is the seed that was used to generate the legacy hash.
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
|
|
| // Only NULL should be trusted in the absence of a hash.
|
| EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
|
| @@ -63,14 +68,14 @@ TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
|
| transaction->CheckValue("path1", &dict));
|
| }
|
|
|
| - ASSERT_FALSE(CreateHashStoreContents()->GetSuperMac().empty());
|
| + ASSERT_FALSE(GetHashStoreContents()->GetSuperMac().empty());
|
|
|
| {
|
| // |pref_hash_store2| should trust its initial hashes dictionary and thus
|
| // trust new unknown values.
|
| PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store2.BeginTransaction(GetHashStoreContents()));
|
| EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckValue("new_path", &string_1));
|
| EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
|
| @@ -80,14 +85,14 @@ TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
|
| }
|
|
|
| // Manually corrupt the super MAC.
|
| - CreateHashStoreContents()->SetSuperMac(std::string(64, 'A'));
|
| + GetHashStoreContents()->SetSuperMac(std::string(64, 'A'));
|
|
|
| {
|
| // |pref_hash_store3| should no longer trust its initial hashes dictionary
|
| // and thus shouldn't trust non-NULL unknown values.
|
| PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store3.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store3.BeginTransaction(GetHashStoreContents()));
|
| EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckValue("new_path", &string_1));
|
| EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
|
| @@ -105,7 +110,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_FALSE(transaction->IsSuperMACValid());
|
|
|
| ASSERT_FALSE(transaction->HasHash("path1"));
|
| @@ -122,7 +127,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
|
|
| // Make a copy of the stored hash for future use.
|
| const base::Value* hash = NULL;
|
| - ASSERT_TRUE(CreateHashStoreContents()->GetContents()->Get("path1", &hash));
|
| + ASSERT_TRUE(GetHashStoreContents()->GetContents()->Get("path1", &hash));
|
| std::unique_ptr<base::Value> path_1_string_1_hash_copy(hash->DeepCopy());
|
| hash = NULL;
|
|
|
| @@ -130,7 +135,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_TRUE(transaction->IsSuperMACValid());
|
| ASSERT_TRUE(transaction->HasHash("path1"));
|
|
|
| @@ -149,18 +154,18 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_TRUE(transaction->IsSuperMACValid());
|
| ASSERT_FALSE(transaction->HasHash("path1"));
|
| }
|
|
|
| // Invalidate the super MAC.
|
| - CreateHashStoreContents()->SetSuperMac(std::string());
|
| + GetHashStoreContents()->SetSuperMac(std::string());
|
|
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_FALSE(transaction->IsSuperMACValid());
|
| ASSERT_FALSE(transaction->HasHash("path1"));
|
|
|
| @@ -178,7 +183,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_FALSE(transaction->IsSuperMACValid());
|
| ASSERT_TRUE(transaction->HasHash("path1"));
|
| EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
|
| @@ -196,7 +201,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_FALSE(transaction->IsSuperMACValid());
|
|
|
| // Test StampSuperMac.
|
| @@ -207,7 +212,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_TRUE(transaction->IsSuperMACValid());
|
|
|
| // Store the hash of a different value to test an "over-import".
|
| @@ -221,7 +226,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_TRUE(transaction->IsSuperMACValid());
|
|
|
| // "Over-import". An import should preserve validity.
|
| @@ -236,7 +241,7 @@ TEST_F(PrefHashStoreImplTest, ImportExportOperations) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
| ASSERT_TRUE(transaction->IsSuperMACValid());
|
| EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
|
| transaction->CheckValue("path1", &string_1));
|
| @@ -253,19 +258,19 @@ TEST_F(PrefHashStoreImplTest, SuperMACDisabled) {
|
| // Pass |use_super_mac| => false.
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", false);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
|
|
| transaction->StoreHash("path1", &string_2);
|
| EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
|
| transaction->CheckValue("path1", &string_2));
|
| }
|
|
|
| - ASSERT_TRUE(CreateHashStoreContents()->GetSuperMac().empty());
|
| + ASSERT_TRUE(GetHashStoreContents()->GetSuperMac().empty());
|
|
|
| {
|
| PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", false);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store2.BeginTransaction(GetHashStoreContents()));
|
| EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckValue("new_path", &string_1));
|
| }
|
| @@ -289,7 +294,7 @@ TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
|
|
| // No hashes stored yet and hashes dictionary is empty (and thus not
|
| // trusted).
|
| @@ -359,21 +364,21 @@ TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
|
| // trust new unknown values.
|
| PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store2.BeginTransaction(GetHashStoreContents()));
|
| EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
|
| EXPECT_TRUE(invalid_keys.empty());
|
| }
|
|
|
| // Manually corrupt the super MAC.
|
| - CreateHashStoreContents()->SetSuperMac(std::string(64, 'A'));
|
| + GetHashStoreContents()->SetSuperMac(std::string(64, 'A'));
|
|
|
| {
|
| // |pref_hash_store3| should no longer trust its initial hashes dictionary
|
| // and thus shouldn't trust unknown values.
|
| PrefHashStoreImpl pref_hash_store3(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store3.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store3.BeginTransaction(GetHashStoreContents()));
|
| EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
|
| EXPECT_TRUE(invalid_keys.empty());
|
| @@ -388,7 +393,7 @@ TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
|
|
| // Store hashes for a random dict to be overwritten below.
|
| base::DictionaryValue initial_dict;
|
| @@ -424,7 +429,7 @@ TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) {
|
| // update the stored hash of hashes).
|
| PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store2.BeginTransaction(GetHashStoreContents()));
|
|
|
| base::DictionaryValue tested_dict;
|
| tested_dict.Set("a", new base::StringValue("foo"));
|
| @@ -454,7 +459,7 @@ TEST_F(PrefHashStoreImplTest, TrustedUnknownSplitValueFromExistingAtomic) {
|
| {
|
| PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store.BeginTransaction(GetHashStoreContents()));
|
|
|
| transaction->StoreHash("path1", &string);
|
| EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
|
| @@ -465,7 +470,7 @@ TEST_F(PrefHashStoreImplTest, TrustedUnknownSplitValueFromExistingAtomic) {
|
| // Load a new |pref_hash_store2| in which the hashes dictionary is trusted.
|
| PrefHashStoreImpl pref_hash_store2(std::string(32, 0), "device_id", true);
|
| std::unique_ptr<PrefHashStoreTransaction> transaction(
|
| - pref_hash_store2.BeginTransaction(CreateHashStoreContents()));
|
| + pref_hash_store2.BeginTransaction(GetHashStoreContents()));
|
| std::vector<std::string> invalid_keys;
|
| EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
|
| transaction->CheckSplitValue("path1", &dict, &invalid_keys));
|
|
|