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

Side by Side Diff: components/user_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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prefs/tracked/pref_hash_filter.h" 5 #include "components/user_prefs/tracked/pref_hash_filter.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/bind.h" 14 #include "base/bind.h"
15 #include "base/callback_forward.h" 15 #include "base/callback_forward.h"
16 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
19 #include "base/memory/scoped_ptr.h" 19 #include "base/memory/scoped_ptr.h"
20 #include "base/metrics/histogram_base.h" 20 #include "base/metrics/histogram_base.h"
21 #include "base/metrics/histogram_samples.h" 21 #include "base/metrics/histogram_samples.h"
22 #include "base/metrics/statistics_recorder.h" 22 #include "base/metrics/statistics_recorder.h"
23 #include "base/prefs/testing_pref_store.h" 23 #include "base/prefs/testing_pref_store.h"
24 #include "base/values.h" 24 #include "base/values.h"
25 #include "chrome/browser/prefs/tracked/hash_store_contents.h" 25 #include "components/user_prefs/tracked/hash_store_contents.h"
26 #include "chrome/browser/prefs/tracked/mock_validation_delegate.h" 26 #include "components/user_prefs/tracked/mock_validation_delegate.h"
27 #include "chrome/browser/prefs/tracked/pref_hash_store.h" 27 #include "components/user_prefs/tracked/pref_hash_store.h"
28 #include "chrome/browser/prefs/tracked/pref_hash_store_transaction.h" 28 #include "components/user_prefs/tracked/pref_hash_store_transaction.h"
29 #include "chrome/common/pref_names.h" 29 #include "components/user_prefs/tracked/pref_names.h"
30 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
31 31
32 namespace { 32 namespace {
33 33
34 const char kAtomicPref[] = "atomic_pref"; 34 const char kAtomicPref[] = "atomic_pref";
35 const char kAtomicPref2[] = "atomic_pref2"; 35 const char kAtomicPref2[] = "atomic_pref2";
36 const char kAtomicPref3[] = "pref3"; 36 const char kAtomicPref3[] = "pref3";
37 const char kAtomicPref4[] = "pref4"; 37 const char kAtomicPref4[] = "pref4";
38 const char kReportOnlyPref[] = "report_only"; 38 const char kReportOnlyPref[] = "report_only";
39 const char kReportOnlySplitPref[] = "report_only_split_pref"; 39 const char kReportOnlySplitPref[] = "report_only_split_pref";
40 const char kSplitPref[] = "split_pref"; 40 const char kSplitPref[] = "split_pref";
41 41
42 const PrefHashFilter::TrackedPreferenceMetadata kTestTrackedPrefs[] = { 42 const PrefHashFilter::TrackedPreferenceMetadata kTestTrackedPrefs[] = {
43 { 43 {0,
44 0, kAtomicPref, PrefHashFilter::ENFORCE_ON_LOAD, 44 kAtomicPref,
45 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 45 PrefHashFilter::ENFORCE_ON_LOAD,
46 PrefHashFilter::VALUE_PERSONAL 46 PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
47 }, 47 PrefHashFilter::VALUE_PERSONAL},
48 { 48 {1,
49 1, kReportOnlyPref, PrefHashFilter::NO_ENFORCEMENT, 49 kReportOnlyPref,
50 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 50 PrefHashFilter::NO_ENFORCEMENT,
51 PrefHashFilter::VALUE_IMPERSONAL 51 PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
52 }, 52 PrefHashFilter::VALUE_IMPERSONAL},
53 { 53 {2,
54 2, kSplitPref, PrefHashFilter::ENFORCE_ON_LOAD, 54 kSplitPref,
55 PrefHashFilter::TRACKING_STRATEGY_SPLIT, 55 PrefHashFilter::ENFORCE_ON_LOAD,
56 PrefHashFilter::VALUE_IMPERSONAL 56 PrefHashFilter::TRACKING_STRATEGY_SPLIT,
57 }, 57 PrefHashFilter::VALUE_IMPERSONAL},
58 { 58 {3,
59 3, kReportOnlySplitPref, PrefHashFilter::NO_ENFORCEMENT, 59 kReportOnlySplitPref,
60 PrefHashFilter::TRACKING_STRATEGY_SPLIT, 60 PrefHashFilter::NO_ENFORCEMENT,
61 PrefHashFilter::VALUE_IMPERSONAL 61 PrefHashFilter::TRACKING_STRATEGY_SPLIT,
62 }, 62 PrefHashFilter::VALUE_IMPERSONAL},
63 { 63 {4,
64 4, kAtomicPref2, PrefHashFilter::ENFORCE_ON_LOAD, 64 kAtomicPref2,
65 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 65 PrefHashFilter::ENFORCE_ON_LOAD,
66 PrefHashFilter::VALUE_IMPERSONAL 66 PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
67 }, 67 PrefHashFilter::VALUE_IMPERSONAL},
68 { 68 {5,
69 5, kAtomicPref3, PrefHashFilter::ENFORCE_ON_LOAD, 69 kAtomicPref3,
70 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 70 PrefHashFilter::ENFORCE_ON_LOAD,
71 PrefHashFilter::VALUE_IMPERSONAL 71 PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
72 }, 72 PrefHashFilter::VALUE_IMPERSONAL},
73 { 73 {6,
74 6, kAtomicPref4, PrefHashFilter::ENFORCE_ON_LOAD, 74 kAtomicPref4,
75 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 75 PrefHashFilter::ENFORCE_ON_LOAD,
76 PrefHashFilter::VALUE_IMPERSONAL 76 PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
77 }, 77 PrefHashFilter::VALUE_IMPERSONAL},
78 }; 78 };
79 79
80 } // namespace 80 } // namespace
81 81
82 // A PrefHashStore that allows simulation of CheckValue results and captures 82 // A PrefHashStore that allows simulation of CheckValue results and captures
83 // checked and stored values. 83 // checked and stored values.
84 class MockPrefHashStore : public PrefHashStore { 84 class MockPrefHashStore : public PrefHashStore {
85 public: 85 public:
86 typedef std::pair<const void*, PrefHashFilter::PrefTrackingStrategy> 86 typedef std::pair<const void*, PrefHashFilter::PrefTrackingStrategy>
87 ValuePtrStrategyPair; 87 ValuePtrStrategyPair;
(...skipping 27 matching lines...) Expand all
115 // Sets the value that will be returned from 115 // Sets the value that will be returned from
116 // PrefHashStoreTransaction::IsSuperMACValid(). 116 // PrefHashStoreTransaction::IsSuperMACValid().
117 void set_is_super_mac_valid_result(bool result) { 117 void set_is_super_mac_valid_result(bool result) {
118 is_super_mac_valid_result_ = result; 118 is_super_mac_valid_result_ = result;
119 } 119 }
120 120
121 // Returns the number of transactions that were performed. 121 // Returns the number of transactions that were performed.
122 size_t transactions_performed() { return transactions_performed_; } 122 size_t transactions_performed() { return transactions_performed_; }
123 123
124 // Returns the number of paths checked. 124 // Returns the number of paths checked.
125 size_t checked_paths_count() const { 125 size_t checked_paths_count() const { return checked_values_.size(); }
126 return checked_values_.size();
127 }
128 126
129 // Returns the number of paths stored. 127 // Returns the number of paths stored.
130 size_t stored_paths_count() const { 128 size_t stored_paths_count() const { return stored_values_.size(); }
131 return stored_values_.size();
132 }
133 129
134 // Returns the pointer value and strategy that was passed to 130 // Returns the pointer value and strategy that was passed to
135 // |CheckHash/CheckSplitHash| for |path|. The returned pointer could since 131 // |CheckHash/CheckSplitHash| for |path|. The returned pointer could since
136 // have been freed and is thus not safe to dereference. 132 // have been freed and is thus not safe to dereference.
137 ValuePtrStrategyPair checked_value(const std::string& path) const { 133 ValuePtrStrategyPair checked_value(const std::string& path) const {
138 std::map<std::string, ValuePtrStrategyPair>::const_iterator value = 134 std::map<std::string, ValuePtrStrategyPair>::const_iterator value =
139 checked_values_.find(path); 135 checked_values_.find(path);
140 if (value != checked_values_.end()) 136 if (value != checked_values_.end())
141 return value->second; 137 return value->second;
142 return std::make_pair( 138 return std::make_pair(
143 reinterpret_cast<void*>(0xBAD), 139 reinterpret_cast<void*>(0xBAD),
144 static_cast<PrefHashFilter::PrefTrackingStrategy>(-1)); 140 static_cast<PrefHashFilter::PrefTrackingStrategy>(-1));
145 } 141 }
146 142
147 // Returns the pointer value that was passed to |StoreHash/StoreSplitHash| for 143 // Returns the pointer value that was passed to |StoreHash/StoreSplitHash| for
148 // |path|. The returned pointer could since have been freed and is thus not 144 // |path|. The returned pointer could since have been freed and is thus not
149 // safe to dereference. 145 // safe to dereference.
150 ValuePtrStrategyPair stored_value(const std::string& path) const { 146 ValuePtrStrategyPair stored_value(const std::string& path) const {
151 std::map<std::string, ValuePtrStrategyPair>::const_iterator value = 147 std::map<std::string, ValuePtrStrategyPair>::const_iterator value =
152 stored_values_.find(path); 148 stored_values_.find(path);
153 if (value != stored_values_.end()) 149 if (value != stored_values_.end())
154 return value->second; 150 return value->second;
155 return std::make_pair( 151 return std::make_pair(
156 reinterpret_cast<void*>(0xBAD), 152 reinterpret_cast<void*>(0xBAD),
157 static_cast<PrefHashFilter::PrefTrackingStrategy>(-1)); 153 static_cast<PrefHashFilter::PrefTrackingStrategy>(-1));
158 } 154 }
159 155
160 // PrefHashStore implementation. 156 // PrefHashStore implementation.
161 scoped_ptr<PrefHashStoreTransaction> BeginTransaction( 157 scoped_ptr<PrefHashStoreTransaction> BeginTransaction(
162 scoped_ptr<HashStoreContents> storage) override; 158 scoped_ptr<HashStoreContents> storage) override;
163 159
164 private: 160 private:
165 // A MockPrefHashStoreTransaction is handed to the caller on 161 // A MockPrefHashStoreTransaction is handed to the caller on
166 // MockPrefHashStore::BeginTransaction(). It then stores state in its 162 // MockPrefHashStore::BeginTransaction(). It then stores state in its
167 // underlying MockPrefHashStore about calls it receives from that same caller 163 // underlying MockPrefHashStore about calls it receives from that same caller
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 const std::string& path, 201 const std::string& path,
206 const base::Value* value, 202 const base::Value* value,
207 PrefHashFilter::PrefTrackingStrategy strategy); 203 PrefHashFilter::PrefTrackingStrategy strategy);
208 204
209 // Records a call to this mock's StoreHash/StoreSplitHash methods. 205 // Records a call to this mock's StoreHash/StoreSplitHash methods.
210 void RecordStoreHash(const std::string& path, 206 void RecordStoreHash(const std::string& path,
211 const base::Value* new_value, 207 const base::Value* new_value,
212 PrefHashFilter::PrefTrackingStrategy strategy); 208 PrefHashFilter::PrefTrackingStrategy strategy);
213 209
214 std::map<std::string, PrefHashStoreTransaction::ValueState> check_results_; 210 std::map<std::string, PrefHashStoreTransaction::ValueState> check_results_;
215 std::map<std::string, std::vector<std::string> > invalid_keys_results_; 211 std::map<std::string, std::vector<std::string>> invalid_keys_results_;
216 212
217 bool stamp_super_mac_result_; 213 bool stamp_super_mac_result_;
218 bool is_super_mac_valid_result_; 214 bool is_super_mac_valid_result_;
219 215
220 std::map<std::string, ValuePtrStrategyPair> checked_values_; 216 std::map<std::string, ValuePtrStrategyPair> checked_values_;
221 std::map<std::string, ValuePtrStrategyPair> stored_values_; 217 std::map<std::string, ValuePtrStrategyPair> stored_values_;
222 218
223 // Number of transactions that were performed via this MockPrefHashStore. 219 // Number of transactions that were performed via this MockPrefHashStore.
224 size_t transactions_performed_; 220 size_t transactions_performed_;
225 221
226 // Whether a transaction is currently active (only one transaction should be 222 // Whether a transaction is currently active (only one transaction should be
227 // active at a time). 223 // active at a time).
228 bool transaction_active_; 224 bool transaction_active_;
229 225
230 DISALLOW_COPY_AND_ASSIGN(MockPrefHashStore); 226 DISALLOW_COPY_AND_ASSIGN(MockPrefHashStore);
231 }; 227 };
232 228
233 void MockPrefHashStore::SetCheckResult( 229 void MockPrefHashStore::SetCheckResult(
234 const std::string& path, PrefHashStoreTransaction::ValueState result) { 230 const std::string& path,
231 PrefHashStoreTransaction::ValueState result) {
235 check_results_.insert(std::make_pair(path, result)); 232 check_results_.insert(std::make_pair(path, result));
236 } 233 }
237 234
238 void MockPrefHashStore::SetInvalidKeysResult( 235 void MockPrefHashStore::SetInvalidKeysResult(
239 const std::string& path, 236 const std::string& path,
240 const std::vector<std::string>& invalid_keys_result) { 237 const std::vector<std::string>& invalid_keys_result) {
241 // Ensure |check_results_| has a CHANGED entry for |path|. 238 // Ensure |check_results_| has a CHANGED entry for |path|.
242 std::map<std::string, 239 std::map<std::string, PrefHashStoreTransaction::ValueState>::const_iterator
243 PrefHashStoreTransaction::ValueState>::const_iterator result = 240 result = check_results_.find(path);
244 check_results_.find(path);
245 ASSERT_TRUE(result != check_results_.end()); 241 ASSERT_TRUE(result != check_results_.end());
246 ASSERT_EQ(PrefHashStoreTransaction::CHANGED, result->second); 242 ASSERT_EQ(PrefHashStoreTransaction::CHANGED, result->second);
247 243
248 invalid_keys_results_.insert(std::make_pair(path, invalid_keys_result)); 244 invalid_keys_results_.insert(std::make_pair(path, invalid_keys_result));
249 } 245 }
250 246
251 scoped_ptr<PrefHashStoreTransaction> MockPrefHashStore::BeginTransaction( 247 scoped_ptr<PrefHashStoreTransaction> MockPrefHashStore::BeginTransaction(
252 scoped_ptr<HashStoreContents> storage) { 248 scoped_ptr<HashStoreContents> storage) {
253 EXPECT_FALSE(transaction_active_); 249 EXPECT_FALSE(transaction_active_);
254 return scoped_ptr<PrefHashStoreTransaction>( 250 return scoped_ptr<PrefHashStoreTransaction>(
255 new MockPrefHashStoreTransaction(this)); 251 new MockPrefHashStoreTransaction(this));
256 } 252 }
257 253
258 PrefHashStoreTransaction::ValueState MockPrefHashStore::RecordCheckValue( 254 PrefHashStoreTransaction::ValueState MockPrefHashStore::RecordCheckValue(
259 const std::string& path, 255 const std::string& path,
260 const base::Value* value, 256 const base::Value* value,
261 PrefHashFilter::PrefTrackingStrategy strategy) { 257 PrefHashFilter::PrefTrackingStrategy strategy) {
262 // Record that |path| was checked and validate that it wasn't previously 258 // Record that |path| was checked and validate that it wasn't previously
263 // checked. 259 // checked.
264 EXPECT_TRUE(checked_values_.insert( 260 EXPECT_TRUE(checked_values_.insert(std::make_pair(
265 std::make_pair(path, std::make_pair(value, strategy))).second); 261 path, std::make_pair(value, strategy)))
266 std::map<std::string, 262 .second);
267 PrefHashStoreTransaction::ValueState>::const_iterator result = 263 std::map<std::string, PrefHashStoreTransaction::ValueState>::const_iterator
268 check_results_.find(path); 264 result = check_results_.find(path);
269 if (result != check_results_.end()) 265 if (result != check_results_.end())
270 return result->second; 266 return result->second;
271 return PrefHashStoreTransaction::UNCHANGED; 267 return PrefHashStoreTransaction::UNCHANGED;
272 } 268 }
273 269
274 void MockPrefHashStore::RecordStoreHash( 270 void MockPrefHashStore::RecordStoreHash(
275 const std::string& path, 271 const std::string& path,
276 const base::Value* new_value, 272 const base::Value* new_value,
277 PrefHashFilter::PrefTrackingStrategy strategy) { 273 PrefHashFilter::PrefTrackingStrategy strategy) {
278 EXPECT_TRUE(stored_values_.insert( 274 EXPECT_TRUE(
279 std::make_pair(path, std::make_pair(new_value, strategy))).second); 275 stored_values_.insert(std::make_pair(path,
276 std::make_pair(new_value, strategy)))
277 .second);
280 } 278 }
281 279
282 PrefHashStoreTransaction::ValueState 280 PrefHashStoreTransaction::ValueState
283 MockPrefHashStore::MockPrefHashStoreTransaction::CheckValue( 281 MockPrefHashStore::MockPrefHashStoreTransaction::CheckValue(
284 const std::string& path, const base::Value* value) const { 282 const std::string& path,
283 const base::Value* value) const {
285 return outer_->RecordCheckValue(path, value, 284 return outer_->RecordCheckValue(path, value,
286 PrefHashFilter::TRACKING_STRATEGY_ATOMIC); 285 PrefHashFilter::TRACKING_STRATEGY_ATOMIC);
287 } 286 }
288 287
289 void MockPrefHashStore::MockPrefHashStoreTransaction::StoreHash( 288 void MockPrefHashStore::MockPrefHashStoreTransaction::StoreHash(
290 const std::string& path, 289 const std::string& path,
291 const base::Value* new_value) { 290 const base::Value* new_value) {
292 outer_->RecordStoreHash(path, new_value, 291 outer_->RecordStoreHash(path, new_value,
293 PrefHashFilter::TRACKING_STRATEGY_ATOMIC); 292 PrefHashFilter::TRACKING_STRATEGY_ATOMIC);
294 } 293 }
295 294
296 PrefHashStoreTransaction::ValueState 295 PrefHashStoreTransaction::ValueState
297 MockPrefHashStore::MockPrefHashStoreTransaction::CheckSplitValue( 296 MockPrefHashStore::MockPrefHashStoreTransaction::CheckSplitValue(
298 const std::string& path, 297 const std::string& path,
299 const base::DictionaryValue* initial_split_value, 298 const base::DictionaryValue* initial_split_value,
300 std::vector<std::string>* invalid_keys) const { 299 std::vector<std::string>* invalid_keys) const {
301 EXPECT_TRUE(invalid_keys && invalid_keys->empty()); 300 EXPECT_TRUE(invalid_keys && invalid_keys->empty());
302 301
303 std::map<std::string, std::vector<std::string> >::const_iterator 302 std::map<std::string, std::vector<std::string>>::const_iterator
304 invalid_keys_result = outer_->invalid_keys_results_.find(path); 303 invalid_keys_result = outer_->invalid_keys_results_.find(path);
305 if (invalid_keys_result != outer_->invalid_keys_results_.end()) { 304 if (invalid_keys_result != outer_->invalid_keys_results_.end()) {
306 invalid_keys->insert(invalid_keys->begin(), 305 invalid_keys->insert(invalid_keys->begin(),
307 invalid_keys_result->second.begin(), 306 invalid_keys_result->second.begin(),
308 invalid_keys_result->second.end()); 307 invalid_keys_result->second.end());
309 } 308 }
310 309
311 return outer_->RecordCheckValue(path, initial_split_value, 310 return outer_->RecordCheckValue(path, initial_split_value,
312 PrefHashFilter::TRACKING_STRATEGY_SPLIT); 311 PrefHashFilter::TRACKING_STRATEGY_SPLIT);
313 } 312 }
314 313
315 void MockPrefHashStore::MockPrefHashStoreTransaction::StoreSplitHash( 314 void MockPrefHashStore::MockPrefHashStoreTransaction::StoreSplitHash(
316 const std::string& path, 315 const std::string& path,
317 const base::DictionaryValue* new_value) { 316 const base::DictionaryValue* new_value) {
318 outer_->RecordStoreHash(path, new_value, 317 outer_->RecordStoreHash(path, new_value,
319 PrefHashFilter::TRACKING_STRATEGY_SPLIT); 318 PrefHashFilter::TRACKING_STRATEGY_SPLIT);
320 } 319 }
321 320
322 bool MockPrefHashStore::MockPrefHashStoreTransaction::HasHash( 321 bool MockPrefHashStore::MockPrefHashStoreTransaction::HasHash(
323 const std::string& path) const { 322 const std::string& path) const {
324 ADD_FAILURE() << "Unexpected call."; 323 ADD_FAILURE() << "Unexpected call.";
325 return false; 324 return false;
326 } 325 }
327 326
328 void MockPrefHashStore::MockPrefHashStoreTransaction::ImportHash( 327 void MockPrefHashStore::MockPrefHashStoreTransaction::ImportHash(
329 const std::string& path, 328 const std::string& path,
330 const base::Value* hash) { 329 const base::Value* hash) {
331 ADD_FAILURE() << "Unexpected call."; 330 ADD_FAILURE() << "Unexpected call.";
332 } 331 }
333 332
334 void MockPrefHashStore::MockPrefHashStoreTransaction::ClearHash( 333 void MockPrefHashStore::MockPrefHashStoreTransaction::ClearHash(
335 const std::string& path) { 334 const std::string& path) {
336 // Allow this to be called by PrefHashFilter's deprecated tracked prefs 335 // Allow this to be called by PrefHashFilter's deprecated tracked prefs
337 // cleanup tasks. 336 // cleanup tasks.
338 } 337 }
339 338
340 bool MockPrefHashStore::MockPrefHashStoreTransaction::IsSuperMACValid() const { 339 bool MockPrefHashStore::MockPrefHashStoreTransaction::IsSuperMACValid() const {
341 return outer_->is_super_mac_valid_result_; 340 return outer_->is_super_mac_valid_result_;
342 } 341 }
343 342
344 bool MockPrefHashStore::MockPrefHashStoreTransaction::StampSuperMac() { 343 bool MockPrefHashStore::MockPrefHashStoreTransaction::StampSuperMac() {
345 return outer_->stamp_super_mac_result_; 344 return outer_->stamp_super_mac_result_;
346 } 345 }
347 346
348 std::vector<PrefHashFilter::TrackedPreferenceMetadata> GetConfiguration( 347 std::vector<PrefHashFilter::TrackedPreferenceMetadata> GetConfiguration(
349 PrefHashFilter::EnforcementLevel max_enforcement_level) { 348 PrefHashFilter::EnforcementLevel max_enforcement_level) {
350 std::vector<PrefHashFilter::TrackedPreferenceMetadata> configuration( 349 std::vector<PrefHashFilter::TrackedPreferenceMetadata> configuration(
351 kTestTrackedPrefs, kTestTrackedPrefs + arraysize(kTestTrackedPrefs)); 350 kTestTrackedPrefs, kTestTrackedPrefs + arraysize(kTestTrackedPrefs));
352 for (std::vector<PrefHashFilter::TrackedPreferenceMetadata>::iterator it = 351 for (std::vector<PrefHashFilter::TrackedPreferenceMetadata>::iterator it =
353 configuration.begin(); 352 configuration.begin();
354 it != configuration.end(); 353 it != configuration.end(); ++it) {
355 ++it) {
356 if (it->enforcement_level > max_enforcement_level) 354 if (it->enforcement_level > max_enforcement_level)
357 it->enforcement_level = max_enforcement_level; 355 it->enforcement_level = max_enforcement_level;
358 } 356 }
359 return configuration; 357 return configuration;
360 } 358 }
361 359
362 class PrefHashFilterTest 360 class PrefHashFilterTest
363 : public testing::TestWithParam<PrefHashFilter::EnforcementLevel> { 361 : public testing::TestWithParam<PrefHashFilter::EnforcementLevel> {
364 public: 362 public:
365 PrefHashFilterTest() : mock_pref_hash_store_(NULL), 363 PrefHashFilterTest()
366 pref_store_contents_(new base::DictionaryValue), 364 : mock_pref_hash_store_(NULL),
367 reset_recorded_(false) {} 365 pref_store_contents_(new base::DictionaryValue),
366 reset_recorded_(false) {}
368 367
369 void SetUp() override { 368 void SetUp() override {
370 base::StatisticsRecorder::Initialize(); 369 base::StatisticsRecorder::Initialize();
371 Reset(); 370 Reset();
372 } 371 }
373 372
374 protected: 373 protected:
375 // Reset the PrefHashFilter instance. 374 // Reset the PrefHashFilter instance.
376 void Reset() { 375 void Reset() {
377 // Construct a PrefHashFilter and MockPrefHashStore for the test. 376 // Construct a PrefHashFilter and MockPrefHashStore for the test.
378 InitializePrefHashFilter(GetConfiguration(GetParam())); 377 InitializePrefHashFilter(GetConfiguration(GetParam()));
379 } 378 }
380 379
381 // Initializes |pref_hash_filter_| with a PrefHashFilter that uses a 380 // Initializes |pref_hash_filter_| with a PrefHashFilter that uses a
382 // MockPrefHashStore. The raw pointer to the MockPrefHashStore (owned by the 381 // MockPrefHashStore. The raw pointer to the MockPrefHashStore (owned by the
383 // PrefHashFilter) is stored in |mock_pref_hash_store_|. 382 // PrefHashFilter) is stored in |mock_pref_hash_store_|.
384 void InitializePrefHashFilter(const std::vector< 383 void InitializePrefHashFilter(const std::vector<
385 PrefHashFilter::TrackedPreferenceMetadata>& configuration) { 384 PrefHashFilter::TrackedPreferenceMetadata>& configuration) {
386 scoped_ptr<MockPrefHashStore> temp_mock_pref_hash_store( 385 scoped_ptr<MockPrefHashStore> temp_mock_pref_hash_store(
387 new MockPrefHashStore); 386 new MockPrefHashStore);
388 mock_pref_hash_store_ = temp_mock_pref_hash_store.get(); 387 mock_pref_hash_store_ = temp_mock_pref_hash_store.get();
389 pref_hash_filter_.reset(new PrefHashFilter( 388 pref_hash_filter_.reset(new PrefHashFilter(
390 temp_mock_pref_hash_store.Pass(), 389 temp_mock_pref_hash_store.Pass(), configuration,
391 configuration,
392 base::Bind(&PrefHashFilterTest::RecordReset, base::Unretained(this)), 390 base::Bind(&PrefHashFilterTest::RecordReset, base::Unretained(this)),
393 &mock_validation_delegate_, 391 &mock_validation_delegate_, arraysize(kTestTrackedPrefs), true));
394 arraysize(kTestTrackedPrefs),
395 true));
396 } 392 }
397 393
398 // Verifies whether a reset was reported by the PrefHashFiler. Also verifies 394 // Verifies whether a reset was reported by the PrefHashFiler. Also verifies
399 // that kPreferenceResetTime was set (or not) accordingly. 395 // that kPreferenceResetTime was set (or not) accordingly.
400 void VerifyRecordedReset(bool reset_expected) { 396 void VerifyRecordedReset(bool reset_expected) {
401 EXPECT_EQ(reset_expected, reset_recorded_); 397 EXPECT_EQ(reset_expected, reset_recorded_);
402 EXPECT_EQ(reset_expected, 398 EXPECT_EQ(reset_expected,
403 pref_store_contents_->Get(prefs::kPreferenceResetTime, NULL)); 399 pref_store_contents_->Get(
400 user_prefs::kPreferenceResetTime, NULL));
404 } 401 }
405 402
406 // Calls FilterOnLoad() on |pref_hash_Filter_|. |pref_store_contents_| is 403 // Calls FilterOnLoad() on |pref_hash_Filter_|. |pref_store_contents_| is
407 // handed off, but should be given back to us synchronously through 404 // handed off, but should be given back to us synchronously through
408 // GetPrefsBack() as there is no FilterOnLoadInterceptor installed on 405 // GetPrefsBack() as there is no FilterOnLoadInterceptor installed on
409 // |pref_hash_filter_|. 406 // |pref_hash_filter_|.
410 void DoFilterOnLoad(bool expect_prefs_modifications) { 407 void DoFilterOnLoad(bool expect_prefs_modifications) {
411 pref_hash_filter_->FilterOnLoad( 408 pref_hash_filter_->FilterOnLoad(
412 base::Bind(&PrefHashFilterTest::GetPrefsBack, base::Unretained(this), 409 base::Bind(&PrefHashFilterTest::GetPrefsBack, base::Unretained(this),
413 expect_prefs_modifications), 410 expect_prefs_modifications),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 TEST_P(PrefHashFilterTest, EmptyAndUnchanged) { 442 TEST_P(PrefHashFilterTest, EmptyAndUnchanged) {
446 DoFilterOnLoad(false); 443 DoFilterOnLoad(false);
447 // All paths checked. 444 // All paths checked.
448 ASSERT_EQ(arraysize(kTestTrackedPrefs), 445 ASSERT_EQ(arraysize(kTestTrackedPrefs),
449 mock_pref_hash_store_->checked_paths_count()); 446 mock_pref_hash_store_->checked_paths_count());
450 // No paths stored, since they all return |UNCHANGED|. 447 // No paths stored, since they all return |UNCHANGED|.
451 ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count()); 448 ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
452 // Since there was nothing in |pref_store_contents_| the checked value should 449 // Since there was nothing in |pref_store_contents_| the checked value should
453 // have been NULL for all tracked preferences. 450 // have been NULL for all tracked preferences.
454 for (size_t i = 0; i < arraysize(kTestTrackedPrefs); ++i) { 451 for (size_t i = 0; i < arraysize(kTestTrackedPrefs); ++i) {
455 ASSERT_EQ(NULL, mock_pref_hash_store_->checked_value( 452 ASSERT_EQ(
456 kTestTrackedPrefs[i].name).first); 453 NULL,
454 mock_pref_hash_store_->checked_value(kTestTrackedPrefs[i].name).first);
457 } 455 }
458 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 456 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
459 VerifyRecordedReset(false); 457 VerifyRecordedReset(false);
460 458
461 // Delegate saw all paths, and all unchanged. 459 // Delegate saw all paths, and all unchanged.
462 ASSERT_EQ(arraysize(kTestTrackedPrefs), 460 ASSERT_EQ(arraysize(kTestTrackedPrefs),
463 mock_validation_delegate_.recorded_validations_count()); 461 mock_validation_delegate_.recorded_validations_count());
464 ASSERT_EQ(arraysize(kTestTrackedPrefs), 462 ASSERT_EQ(arraysize(kTestTrackedPrefs),
465 mock_validation_delegate_.CountValidationsOfState( 463 mock_validation_delegate_.CountValidationsOfState(
466 PrefHashStoreTransaction::UNCHANGED)); 464 PrefHashStoreTransaction::UNCHANGED));
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 root_dict.Set(kSplitPref, dict_value); 539 root_dict.Set(kSplitPref, dict_value);
542 540
543 // No path should be stored on FilterUpdate. 541 // No path should be stored on FilterUpdate.
544 pref_hash_filter_->FilterUpdate(kSplitPref); 542 pref_hash_filter_->FilterUpdate(kSplitPref);
545 ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count()); 543 ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
546 544
547 // One path should be stored on FilterSerializeData. 545 // One path should be stored on FilterSerializeData.
548 pref_hash_filter_->FilterSerializeData(&root_dict); 546 pref_hash_filter_->FilterSerializeData(&root_dict);
549 ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count()); 547 ASSERT_EQ(1u, mock_pref_hash_store_->stored_paths_count());
550 MockPrefHashStore::ValuePtrStrategyPair stored_value = 548 MockPrefHashStore::ValuePtrStrategyPair stored_value =
551 mock_pref_hash_store_->stored_value(kSplitPref); 549 mock_pref_hash_store_->stored_value(kSplitPref);
552 ASSERT_EQ(dict_value, stored_value.first); 550 ASSERT_EQ(dict_value, stored_value.first);
553 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value.second); 551 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value.second);
554 552
555 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 553 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
556 VerifyRecordedReset(false); 554 VerifyRecordedReset(false);
557 } 555 }
558 556
559 TEST_P(PrefHashFilterTest, FilterUntrackedPrefUpdate) { 557 TEST_P(PrefHashFilterTest, FilterUntrackedPrefUpdate) {
560 base::DictionaryValue root_dict; 558 base::DictionaryValue root_dict;
561 root_dict.Set("untracked", new base::StringValue("some value")); 559 root_dict.Set("untracked", new base::StringValue("some value"));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 stored_value_atomic1.second); 608 stored_value_atomic1.second);
611 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 609 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
612 610
613 MockPrefHashStore::ValuePtrStrategyPair stored_value_atomic3 = 611 MockPrefHashStore::ValuePtrStrategyPair stored_value_atomic3 =
614 mock_pref_hash_store_->stored_value(kAtomicPref3); 612 mock_pref_hash_store_->stored_value(kAtomicPref3);
615 ASSERT_EQ(int_value5, stored_value_atomic3.first); 613 ASSERT_EQ(int_value5, stored_value_atomic3.first);
616 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 614 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
617 stored_value_atomic3.second); 615 stored_value_atomic3.second);
618 616
619 MockPrefHashStore::ValuePtrStrategyPair stored_value_split = 617 MockPrefHashStore::ValuePtrStrategyPair stored_value_split =
620 mock_pref_hash_store_->stored_value(kSplitPref); 618 mock_pref_hash_store_->stored_value(kSplitPref);
621 ASSERT_EQ(dict_value, stored_value_split.first); 619 ASSERT_EQ(dict_value, stored_value_split.first);
622 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value_split.second); 620 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_value_split.second);
623 } 621 }
624 622
625 TEST_P(PrefHashFilterTest, UnknownNullValue) { 623 TEST_P(PrefHashFilterTest, UnknownNullValue) {
626 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); 624 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
627 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); 625 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
628 // NULL values are always trusted by the PrefHashStore. 626 // NULL values are always trusted by the PrefHashStore.
629 mock_pref_hash_store_->SetCheckResult( 627 mock_pref_hash_store_->SetCheckResult(
630 kAtomicPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE); 628 kAtomicPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE);
631 mock_pref_hash_store_->SetCheckResult( 629 mock_pref_hash_store_->SetCheckResult(
632 kSplitPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE); 630 kSplitPref, PrefHashStoreTransaction::TRUSTED_NULL_VALUE);
633 DoFilterOnLoad(false); 631 DoFilterOnLoad(false);
634 ASSERT_EQ(arraysize(kTestTrackedPrefs), 632 ASSERT_EQ(arraysize(kTestTrackedPrefs),
635 mock_pref_hash_store_->checked_paths_count()); 633 mock_pref_hash_store_->checked_paths_count());
636 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 634 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
637 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 635 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
638 636
639 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 637 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
640 mock_pref_hash_store_->stored_value(kAtomicPref); 638 mock_pref_hash_store_->stored_value(kAtomicPref);
641 ASSERT_EQ(NULL, stored_atomic_value.first); 639 ASSERT_EQ(NULL, stored_atomic_value.first);
642 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 640 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
643 stored_atomic_value.second); 641 stored_atomic_value.second);
644 642
645 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 643 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
646 mock_pref_hash_store_->stored_value(kSplitPref); 644 mock_pref_hash_store_->stored_value(kSplitPref);
647 ASSERT_EQ(NULL, stored_split_value.first); 645 ASSERT_EQ(NULL, stored_split_value.first);
648 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 646 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
649 stored_split_value.second);
650 647
651 // Delegate saw all prefs, two of which had the expected value_state. 648 // Delegate saw all prefs, two of which had the expected value_state.
652 ASSERT_EQ(arraysize(kTestTrackedPrefs), 649 ASSERT_EQ(arraysize(kTestTrackedPrefs),
653 mock_validation_delegate_.recorded_validations_count()); 650 mock_validation_delegate_.recorded_validations_count());
654 ASSERT_EQ(2u, 651 ASSERT_EQ(2u, mock_validation_delegate_.CountValidationsOfState(
655 mock_validation_delegate_.CountValidationsOfState( 652 PrefHashStoreTransaction::TRUSTED_NULL_VALUE));
656 PrefHashStoreTransaction::TRUSTED_NULL_VALUE));
657 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, 653 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
658 mock_validation_delegate_.CountValidationsOfState( 654 mock_validation_delegate_.CountValidationsOfState(
659 PrefHashStoreTransaction::UNCHANGED)); 655 PrefHashStoreTransaction::UNCHANGED));
660 656
661 const MockValidationDelegate::ValidationEvent* validated_split_pref = 657 const MockValidationDelegate::ValidationEvent* validated_split_pref =
662 mock_validation_delegate_.GetEventForPath(kSplitPref); 658 mock_validation_delegate_.GetEventForPath(kSplitPref);
663 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 659 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT,
664 validated_split_pref->strategy); 660 validated_split_pref->strategy);
665 ASSERT_FALSE(validated_split_pref->is_personal); 661 ASSERT_FALSE(validated_split_pref->is_personal);
666 const MockValidationDelegate::ValidationEvent* validated_atomic_pref = 662 const MockValidationDelegate::ValidationEvent* validated_atomic_pref =
(...skipping 23 matching lines...) Expand all
690 // If we are enforcing, expect this to report changes. 686 // If we are enforcing, expect this to report changes.
691 DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD); 687 DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD);
692 ASSERT_EQ(arraysize(kTestTrackedPrefs), 688 ASSERT_EQ(arraysize(kTestTrackedPrefs),
693 mock_pref_hash_store_->checked_paths_count()); 689 mock_pref_hash_store_->checked_paths_count());
694 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 690 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
695 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 691 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
696 692
697 // Delegate saw all prefs, two of which had the expected value_state. 693 // Delegate saw all prefs, two of which had the expected value_state.
698 ASSERT_EQ(arraysize(kTestTrackedPrefs), 694 ASSERT_EQ(arraysize(kTestTrackedPrefs),
699 mock_validation_delegate_.recorded_validations_count()); 695 mock_validation_delegate_.recorded_validations_count());
700 ASSERT_EQ(2u, 696 ASSERT_EQ(2u, mock_validation_delegate_.CountValidationsOfState(
701 mock_validation_delegate_.CountValidationsOfState( 697 PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE));
702 PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE));
703 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, 698 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
704 mock_validation_delegate_.CountValidationsOfState( 699 mock_validation_delegate_.CountValidationsOfState(
705 PrefHashStoreTransaction::UNCHANGED)); 700 PrefHashStoreTransaction::UNCHANGED));
706 701
707 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 702 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
708 mock_pref_hash_store_->stored_value(kAtomicPref); 703 mock_pref_hash_store_->stored_value(kAtomicPref);
709 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 704 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
710 mock_pref_hash_store_->stored_value(kSplitPref); 705 mock_pref_hash_store_->stored_value(kSplitPref);
711 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 706 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
712 stored_atomic_value.second); 707 stored_atomic_value.second);
713 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 708 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
714 stored_split_value.second);
715 if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) { 709 if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) {
716 // Ensure the prefs were cleared and the hashes for NULL were restored if 710 // Ensure the prefs were cleared and the hashes for NULL were restored if
717 // the current enforcement level denies seeding. 711 // the current enforcement level denies seeding.
718 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); 712 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
719 ASSERT_EQ(NULL, stored_atomic_value.first); 713 ASSERT_EQ(NULL, stored_atomic_value.first);
720 714
721 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); 715 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
722 ASSERT_EQ(NULL, stored_split_value.first); 716 ASSERT_EQ(NULL, stored_split_value.first);
723 717
724 VerifyRecordedReset(true); 718 VerifyRecordedReset(true);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 kSplitPref, PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE); 752 kSplitPref, PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE);
759 DoFilterOnLoad(false); 753 DoFilterOnLoad(false);
760 ASSERT_EQ(arraysize(kTestTrackedPrefs), 754 ASSERT_EQ(arraysize(kTestTrackedPrefs),
761 mock_pref_hash_store_->checked_paths_count()); 755 mock_pref_hash_store_->checked_paths_count());
762 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 756 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
763 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 757 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
764 758
765 // Delegate saw all prefs, two of which had the expected value_state. 759 // Delegate saw all prefs, two of which had the expected value_state.
766 ASSERT_EQ(arraysize(kTestTrackedPrefs), 760 ASSERT_EQ(arraysize(kTestTrackedPrefs),
767 mock_validation_delegate_.recorded_validations_count()); 761 mock_validation_delegate_.recorded_validations_count());
768 ASSERT_EQ(2u, 762 ASSERT_EQ(2u, mock_validation_delegate_.CountValidationsOfState(
769 mock_validation_delegate_.CountValidationsOfState( 763 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE));
770 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE));
771 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, 764 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
772 mock_validation_delegate_.CountValidationsOfState( 765 mock_validation_delegate_.CountValidationsOfState(
773 PrefHashStoreTransaction::UNCHANGED)); 766 PrefHashStoreTransaction::UNCHANGED));
774 767
775 // Seeding is always allowed for trusted unknown values. 768 // Seeding is always allowed for trusted unknown values.
776 const base::Value* atomic_value_in_store; 769 const base::Value* atomic_value_in_store;
777 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store)); 770 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store));
778 ASSERT_EQ(string_value, atomic_value_in_store); 771 ASSERT_EQ(string_value, atomic_value_in_store);
779 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 772 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
780 mock_pref_hash_store_->stored_value(kAtomicPref); 773 mock_pref_hash_store_->stored_value(kAtomicPref);
781 ASSERT_EQ(string_value, stored_atomic_value.first); 774 ASSERT_EQ(string_value, stored_atomic_value.first);
782 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 775 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
783 stored_atomic_value.second); 776 stored_atomic_value.second);
784 777
785 const base::Value* split_value_in_store; 778 const base::Value* split_value_in_store;
786 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store)); 779 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
787 ASSERT_EQ(dict_value, split_value_in_store); 780 ASSERT_EQ(dict_value, split_value_in_store);
788 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 781 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
789 mock_pref_hash_store_->stored_value(kSplitPref); 782 mock_pref_hash_store_->stored_value(kSplitPref);
790 ASSERT_EQ(dict_value, stored_split_value.first); 783 ASSERT_EQ(dict_value, stored_split_value.first);
791 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 784 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
792 stored_split_value.second);
793 } 785 }
794 786
795 TEST_P(PrefHashFilterTest, InitialValueChanged) { 787 TEST_P(PrefHashFilterTest, InitialValueChanged) {
796 // Ownership of this value is transfered to |pref_store_contents_|. 788 // Ownership of this value is transfered to |pref_store_contents_|.
797 base::Value* int_value = new base::FundamentalValue(1234); 789 base::Value* int_value = new base::FundamentalValue(1234);
798 pref_store_contents_->Set(kAtomicPref, int_value); 790 pref_store_contents_->Set(kAtomicPref, int_value);
799 791
800 base::DictionaryValue* dict_value = new base::DictionaryValue; 792 base::DictionaryValue* dict_value = new base::DictionaryValue;
801 dict_value->SetString("a", "foo"); 793 dict_value->SetString("a", "foo");
802 dict_value->SetInteger("b", 1234); 794 dict_value->SetInteger("b", 1234);
(...skipping 14 matching lines...) Expand all
817 mock_invalid_keys.push_back("c"); 809 mock_invalid_keys.push_back("c");
818 mock_pref_hash_store_->SetInvalidKeysResult(kSplitPref, mock_invalid_keys); 810 mock_pref_hash_store_->SetInvalidKeysResult(kSplitPref, mock_invalid_keys);
819 811
820 DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD); 812 DoFilterOnLoad(GetParam() >= PrefHashFilter::ENFORCE_ON_LOAD);
821 ASSERT_EQ(arraysize(kTestTrackedPrefs), 813 ASSERT_EQ(arraysize(kTestTrackedPrefs),
822 mock_pref_hash_store_->checked_paths_count()); 814 mock_pref_hash_store_->checked_paths_count());
823 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 815 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
824 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 816 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
825 817
826 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 818 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
827 mock_pref_hash_store_->stored_value(kAtomicPref); 819 mock_pref_hash_store_->stored_value(kAtomicPref);
828 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 820 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
829 mock_pref_hash_store_->stored_value(kSplitPref); 821 mock_pref_hash_store_->stored_value(kSplitPref);
830 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 822 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
831 stored_atomic_value.second); 823 stored_atomic_value.second);
832 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 824 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
833 stored_split_value.second);
834 if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) { 825 if (GetParam() == PrefHashFilter::ENFORCE_ON_LOAD) {
835 // Ensure the atomic pref was cleared and the hash for NULL was restored if 826 // Ensure the atomic pref was cleared and the hash for NULL was restored if
836 // the current enforcement level prevents changes. 827 // the current enforcement level prevents changes.
837 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); 828 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
838 ASSERT_EQ(NULL, stored_atomic_value.first); 829 ASSERT_EQ(NULL, stored_atomic_value.first);
839 830
840 // The split pref on the other hand should only have been stripped of its 831 // The split pref on the other hand should only have been stripped of its
841 // invalid keys. 832 // invalid keys.
842 const base::Value* split_value_in_store; 833 const base::Value* split_value_in_store;
843 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store)); 834 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 PrefHashStoreTransaction::CLEARED); 871 PrefHashStoreTransaction::CLEARED);
881 DoFilterOnLoad(false); 872 DoFilterOnLoad(false);
882 ASSERT_EQ(arraysize(kTestTrackedPrefs), 873 ASSERT_EQ(arraysize(kTestTrackedPrefs),
883 mock_pref_hash_store_->checked_paths_count()); 874 mock_pref_hash_store_->checked_paths_count());
884 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 875 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
885 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 876 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
886 877
887 // Delegate saw all prefs, two of which had the expected value_state. 878 // Delegate saw all prefs, two of which had the expected value_state.
888 ASSERT_EQ(arraysize(kTestTrackedPrefs), 879 ASSERT_EQ(arraysize(kTestTrackedPrefs),
889 mock_validation_delegate_.recorded_validations_count()); 880 mock_validation_delegate_.recorded_validations_count());
890 ASSERT_EQ(2u, 881 ASSERT_EQ(2u, mock_validation_delegate_.CountValidationsOfState(
891 mock_validation_delegate_.CountValidationsOfState( 882 PrefHashStoreTransaction::CLEARED));
892 PrefHashStoreTransaction::CLEARED));
893 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, 883 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
894 mock_validation_delegate_.CountValidationsOfState( 884 mock_validation_delegate_.CountValidationsOfState(
895 PrefHashStoreTransaction::UNCHANGED)); 885 PrefHashStoreTransaction::UNCHANGED));
896 886
897 // Regardless of the enforcement level, the only thing that should be done is 887 // Regardless of the enforcement level, the only thing that should be done is
898 // to restore the hash for NULL. The value itself should still be NULL. 888 // to restore the hash for NULL. The value itself should still be NULL.
899 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL)); 889 ASSERT_FALSE(pref_store_contents_->Get(kAtomicPref, NULL));
900 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 890 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
901 mock_pref_hash_store_->stored_value(kAtomicPref); 891 mock_pref_hash_store_->stored_value(kAtomicPref);
902 ASSERT_EQ(NULL, stored_atomic_value.first); 892 ASSERT_EQ(NULL, stored_atomic_value.first);
903 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 893 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
904 stored_atomic_value.second); 894 stored_atomic_value.second);
905 895
906 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL)); 896 ASSERT_FALSE(pref_store_contents_->Get(kSplitPref, NULL));
907 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 897 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
908 mock_pref_hash_store_->stored_value(kSplitPref); 898 mock_pref_hash_store_->stored_value(kSplitPref);
909 ASSERT_EQ(NULL, stored_split_value.first); 899 ASSERT_EQ(NULL, stored_split_value.first);
910 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 900 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
911 stored_split_value.second);
912 } 901 }
913 902
914 TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) { 903 TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) {
915 // Ownership of these values is transfered to |pref_store_contents_|. 904 // Ownership of these values is transfered to |pref_store_contents_|.
916 base::StringValue* string_value = new base::StringValue("string value"); 905 base::StringValue* string_value = new base::StringValue("string value");
917 pref_store_contents_->Set(kAtomicPref, string_value); 906 pref_store_contents_->Set(kAtomicPref, string_value);
918 907
919 base::DictionaryValue* dict_value = new base::DictionaryValue; 908 base::DictionaryValue* dict_value = new base::DictionaryValue;
920 dict_value->SetString("a", "foo"); 909 dict_value->SetString("a", "foo");
921 dict_value->SetInteger("b", 1234); 910 dict_value->SetInteger("b", 1234);
922 pref_store_contents_->Set(kSplitPref, dict_value); 911 pref_store_contents_->Set(kSplitPref, dict_value);
923 912
924 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL)); 913 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
925 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL)); 914 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
926 915
927 mock_pref_hash_store_->SetCheckResult( 916 mock_pref_hash_store_->SetCheckResult(
928 kAtomicPref, PrefHashStoreTransaction::SECURE_LEGACY); 917 kAtomicPref, PrefHashStoreTransaction::SECURE_LEGACY);
929 mock_pref_hash_store_->SetCheckResult( 918 mock_pref_hash_store_->SetCheckResult(
930 kSplitPref, PrefHashStoreTransaction::SECURE_LEGACY); 919 kSplitPref, PrefHashStoreTransaction::SECURE_LEGACY);
931 DoFilterOnLoad(false); 920 DoFilterOnLoad(false);
932 ASSERT_EQ(arraysize(kTestTrackedPrefs), 921 ASSERT_EQ(arraysize(kTestTrackedPrefs),
933 mock_pref_hash_store_->checked_paths_count()); 922 mock_pref_hash_store_->checked_paths_count());
934 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 923 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
935 924
936 // Delegate saw all prefs, two of which had the expected value_state. 925 // Delegate saw all prefs, two of which had the expected value_state.
937 ASSERT_EQ(arraysize(kTestTrackedPrefs), 926 ASSERT_EQ(arraysize(kTestTrackedPrefs),
938 mock_validation_delegate_.recorded_validations_count()); 927 mock_validation_delegate_.recorded_validations_count());
939 ASSERT_EQ(2u, 928 ASSERT_EQ(2u, mock_validation_delegate_.CountValidationsOfState(
940 mock_validation_delegate_.CountValidationsOfState( 929 PrefHashStoreTransaction::SECURE_LEGACY));
941 PrefHashStoreTransaction::SECURE_LEGACY));
942 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u, 930 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 2u,
943 mock_validation_delegate_.CountValidationsOfState( 931 mock_validation_delegate_.CountValidationsOfState(
944 PrefHashStoreTransaction::UNCHANGED)); 932 PrefHashStoreTransaction::UNCHANGED));
945 933
946 // Ensure that both the atomic and split hashes were restored. 934 // Ensure that both the atomic and split hashes were restored.
947 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count()); 935 ASSERT_EQ(2u, mock_pref_hash_store_->stored_paths_count());
948 936
949 // In all cases, the values should have remained intact and the hashes should 937 // In all cases, the values should have remained intact and the hashes should
950 // have been updated to match them. 938 // have been updated to match them.
951 939
952 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value = 940 MockPrefHashStore::ValuePtrStrategyPair stored_atomic_value =
953 mock_pref_hash_store_->stored_value(kAtomicPref); 941 mock_pref_hash_store_->stored_value(kAtomicPref);
954 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC, 942 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_ATOMIC,
955 stored_atomic_value.second); 943 stored_atomic_value.second);
956 const base::Value* atomic_value_in_store; 944 const base::Value* atomic_value_in_store;
957 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store)); 945 ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, &atomic_value_in_store));
958 ASSERT_EQ(string_value, atomic_value_in_store); 946 ASSERT_EQ(string_value, atomic_value_in_store);
959 ASSERT_EQ(string_value, stored_atomic_value.first); 947 ASSERT_EQ(string_value, stored_atomic_value.first);
960 948
961 MockPrefHashStore::ValuePtrStrategyPair stored_split_value = 949 MockPrefHashStore::ValuePtrStrategyPair stored_split_value =
962 mock_pref_hash_store_->stored_value(kSplitPref); 950 mock_pref_hash_store_->stored_value(kSplitPref);
963 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, 951 ASSERT_EQ(PrefHashFilter::TRACKING_STRATEGY_SPLIT, stored_split_value.second);
964 stored_split_value.second);
965 const base::Value* split_value_in_store; 952 const base::Value* split_value_in_store;
966 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store)); 953 ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, &split_value_in_store));
967 ASSERT_EQ(dict_value, split_value_in_store); 954 ASSERT_EQ(dict_value, split_value_in_store);
968 ASSERT_EQ(dict_value, stored_split_value.first); 955 ASSERT_EQ(dict_value, stored_split_value.first);
969 956
970 VerifyRecordedReset(false); 957 VerifyRecordedReset(false);
971 } 958 }
972 959
973 TEST_P(PrefHashFilterTest, DontResetReportOnly) { 960 TEST_P(PrefHashFilterTest, DontResetReportOnly) {
974 // Ownership of these values is transfered to |pref_store_contents_|. 961 // Ownership of these values is transfered to |pref_store_contents_|.
(...skipping 25 matching lines...) Expand all
1000 // All prefs should be checked and a new hash should be stored for each tested 987 // All prefs should be checked and a new hash should be stored for each tested
1001 // pref. 988 // pref.
1002 ASSERT_EQ(arraysize(kTestTrackedPrefs), 989 ASSERT_EQ(arraysize(kTestTrackedPrefs),
1003 mock_pref_hash_store_->checked_paths_count()); 990 mock_pref_hash_store_->checked_paths_count());
1004 ASSERT_EQ(4u, mock_pref_hash_store_->stored_paths_count()); 991 ASSERT_EQ(4u, mock_pref_hash_store_->stored_paths_count());
1005 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed()); 992 ASSERT_EQ(1u, mock_pref_hash_store_->transactions_performed());
1006 993
1007 // Delegate saw all prefs, four of which had the expected value_state. 994 // Delegate saw all prefs, four of which had the expected value_state.
1008 ASSERT_EQ(arraysize(kTestTrackedPrefs), 995 ASSERT_EQ(arraysize(kTestTrackedPrefs),
1009 mock_validation_delegate_.recorded_validations_count()); 996 mock_validation_delegate_.recorded_validations_count());
1010 ASSERT_EQ(4u, 997 ASSERT_EQ(4u, mock_validation_delegate_.CountValidationsOfState(
1011 mock_validation_delegate_.CountValidationsOfState( 998 PrefHashStoreTransaction::CHANGED));
1012 PrefHashStoreTransaction::CHANGED));
1013 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 4u, 999 ASSERT_EQ(arraysize(kTestTrackedPrefs) - 4u,
1014 mock_validation_delegate_.CountValidationsOfState( 1000 mock_validation_delegate_.CountValidationsOfState(
1015 PrefHashStoreTransaction::UNCHANGED)); 1001 PrefHashStoreTransaction::UNCHANGED));
1016 1002
1017 // No matter what the enforcement level is, the report only pref should never 1003 // No matter what the enforcement level is, the report only pref should never
1018 // be reset. 1004 // be reset.
1019 ASSERT_TRUE(pref_store_contents_->Get(kReportOnlyPref, NULL)); 1005 ASSERT_TRUE(pref_store_contents_->Get(kReportOnlyPref, NULL));
1020 ASSERT_TRUE(pref_store_contents_->Get(kReportOnlySplitPref, NULL)); 1006 ASSERT_TRUE(pref_store_contents_->Get(kReportOnlySplitPref, NULL));
1021 ASSERT_EQ(report_only_val, 1007 ASSERT_EQ(report_only_val,
1022 mock_pref_hash_store_->stored_value(kReportOnlyPref).first); 1008 mock_pref_hash_store_->stored_value(kReportOnlyPref).first);
(...skipping 17 matching lines...) Expand all
1040 ASSERT_EQ(int_value1, 1026 ASSERT_EQ(int_value1,
1041 mock_pref_hash_store_->stored_value(kAtomicPref).first); 1027 mock_pref_hash_store_->stored_value(kAtomicPref).first);
1042 ASSERT_EQ(int_value2, value_in_store2); 1028 ASSERT_EQ(int_value2, value_in_store2);
1043 ASSERT_EQ(int_value2, 1029 ASSERT_EQ(int_value2,
1044 mock_pref_hash_store_->stored_value(kAtomicPref2).first); 1030 mock_pref_hash_store_->stored_value(kAtomicPref2).first);
1045 1031
1046 VerifyRecordedReset(false); 1032 VerifyRecordedReset(false);
1047 } 1033 }
1048 } 1034 }
1049 1035
1050 INSTANTIATE_TEST_CASE_P( 1036 INSTANTIATE_TEST_CASE_P(PrefHashFilterTestInstance,
1051 PrefHashFilterTestInstance, PrefHashFilterTest, 1037 PrefHashFilterTest,
1052 testing::Values(PrefHashFilter::NO_ENFORCEMENT, 1038 testing::Values(PrefHashFilter::NO_ENFORCEMENT,
1053 PrefHashFilter::ENFORCE_ON_LOAD)); 1039 PrefHashFilter::ENFORCE_ON_LOAD));
OLDNEW
« no previous file with comments | « components/user_prefs/tracked/pref_hash_filter.cc ('k') | components/user_prefs/tracked/pref_hash_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698