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

Unified Diff: chrome/browser/prefs/pref_hash_store_impl_unittest.cc

Issue 114223002: Multi-strategy based tracking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review:asvitkine Created 7 years 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
Index: chrome/browser/prefs/pref_hash_store_impl_unittest.cc
diff --git a/chrome/browser/prefs/pref_hash_store_impl_unittest.cc b/chrome/browser/prefs/pref_hash_store_impl_unittest.cc
index 330879a89e3e1a0fcde6dc3bab2a3f1acece35b5..9d1af8209b9a3e8f1071a8654294c095a805fa34 100644
--- a/chrome/browser/prefs/pref_hash_store_impl_unittest.cc
+++ b/chrome/browser/prefs/pref_hash_store_impl_unittest.cc
@@ -14,7 +14,7 @@
#include "chrome/common/pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"
-TEST(PrefHashStoreImplTest, TestCase) {
+TEST(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
base::StringValue string_1("string1");
base::StringValue string_2("string2");
@@ -23,7 +23,7 @@ TEST(PrefHashStoreImplTest, TestCase) {
// 32 NULL bytes is the seed that was used to generate the legacy hash.
PrefHashStoreImpl pref_hash_store(
- "store_id", std::string(32,0), "device_id", &local_state);
+ "store_id", std::string(32, 0), "device_id", &local_state);
ASSERT_EQ(PrefHashStore::UNKNOWN_VALUE,
pref_hash_store.CheckValue("path1", &string_1));
@@ -37,7 +37,7 @@ TEST(PrefHashStoreImplTest, TestCase) {
ASSERT_EQ(PrefHashStore::CHANGED,
pref_hash_store.CheckValue("path1", &string_2));
- DictionaryValue dict;
+ base::DictionaryValue dict;
dict.Set("a", new StringValue("foo"));
dict.Set("d", new StringValue("bad"));
dict.Set("b", new StringValue("bar"));
@@ -45,7 +45,7 @@ TEST(PrefHashStoreImplTest, TestCase) {
// Manually shove in a legacy hash.
DictionaryPrefUpdate update(&local_state, prefs::kProfilePreferenceHashes);
- DictionaryValue* child_dictionary = NULL;
+ base::DictionaryValue* child_dictionary = NULL;
ASSERT_TRUE(update->GetDictionary("store_id", &child_dictionary));
child_dictionary->SetString(
"path1",
@@ -57,3 +57,103 @@ TEST(PrefHashStoreImplTest, TestCase) {
ASSERT_EQ(PrefHashStore::UNCHANGED,
pref_hash_store.CheckValue("path1", &dict));
}
+
+TEST(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
+ base::DictionaryValue dict;
+ dict.Set("a", new StringValue("to be replaced"));
+ dict.Set("b", new StringValue("same"));
+ dict.Set("o", new StringValue("old"));
+
+ base::DictionaryValue modified_dict;
+ modified_dict.Set("a", new StringValue("replaced"));
+ modified_dict.Set("b", new StringValue("same"));
+ modified_dict.Set("c", new StringValue("new"));
+
+ base::DictionaryValue empty_dict;
+
+ TestingPrefServiceSimple local_state;
+ PrefHashStoreImpl::RegisterPrefs(local_state.registry());
+
+ PrefHashStoreImpl pref_hash_store(
+ "store_id", std::string(32, 0), "device_id", &local_state);
+
+ std::vector<std::string> invalid_keys;
+
+ // No hashes stored yet.
+ ASSERT_EQ(PrefHashStore::UNKNOWN_VALUE,
+ pref_hash_store.CheckSplitValue("path1", &dict, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ pref_hash_store.StoreSplitHash("path1", &dict);
+
+ // Verify match post storage.
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", &dict, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ // Verify new path is still unknown.
+ ASSERT_EQ(PrefHashStore::UNKNOWN_VALUE,
+ pref_hash_store.CheckSplitValue("path2", &dict, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ // Verify NULL or empty dicts are declared as having been cleared.
+ ASSERT_EQ(PrefHashStore::CLEARED,
+ pref_hash_store.CheckSplitValue("path1", NULL, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+ ASSERT_EQ(PrefHashStore::CLEARED,
+ pref_hash_store.CheckSplitValue("path1", &empty_dict,
+ &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ // Verify changes are properly detected.
+ ASSERT_EQ(PrefHashStore::CHANGED,
+ pref_hash_store.CheckSplitValue("path1", &modified_dict,
+ &invalid_keys));
+ std::vector<std::string> expected_invalid_keys1;
+ expected_invalid_keys1.push_back("a");
+ expected_invalid_keys1.push_back("c");
+ ASSERT_EQ(expected_invalid_keys1, invalid_keys);
+ invalid_keys.clear();
+
+ // Verify still match post check.
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", &dict, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ pref_hash_store.StoreSplitHash("path1", &modified_dict);
+
+ // Verify |modified_dict| is now the one that verifies correctly.
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", &modified_dict,
+ &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ // Verify old dict no longer matches.
+ ASSERT_EQ(PrefHashStore::CHANGED,
+ pref_hash_store.CheckSplitValue("path1", &dict, &invalid_keys));
+ std::vector<std::string> expected_invalid_keys2;
+ expected_invalid_keys2.push_back("a");
+ expected_invalid_keys2.push_back("o");
+ ASSERT_EQ(expected_invalid_keys2, invalid_keys);
+ invalid_keys.clear();
+
+ // Verify stored empty dictionary matches NULL and empty dictionary back.
+ pref_hash_store.StoreSplitHash("path1", &empty_dict);
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", NULL, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", &empty_dict,
+ &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+
+ // Same when storing NULL directly.
+ pref_hash_store.StoreSplitHash("path1", NULL);
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", NULL, &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+ ASSERT_EQ(PrefHashStore::UNCHANGED,
+ pref_hash_store.CheckSplitValue("path1", &empty_dict,
+ &invalid_keys));
+ ASSERT_TRUE(invalid_keys.empty());
+}

Powered by Google App Engine
This is Rietveld 408576698