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

Side by Side Diff: chrome/browser/prefs/pref_hash_store_impl_unittest.cc

Issue 329093003: Remove unloaded profile hash store initialization, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Combine three CLs. Created 6 years, 6 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 | Annotate | Revision Log
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/pref_hash_store_impl.h" 5 #include "chrome/browser/prefs/pref_hash_store_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 13 matching lines...) Expand all
24 // Returns the current value of |commit_performed| and resets it to false 24 // Returns the current value of |commit_performed| and resets it to false
25 // immediately after. 25 // immediately after.
26 bool GetCommitPerformedAndReset() { 26 bool GetCommitPerformedAndReset() {
27 bool current_commit_performed = commit_performed; 27 bool current_commit_performed = commit_performed;
28 commit_performed = false; 28 commit_performed = false;
29 return current_commit_performed; 29 return current_commit_performed;
30 } 30 }
31 31
32 scoped_ptr<base::DictionaryValue> contents; 32 scoped_ptr<base::DictionaryValue> contents;
33 std::string super_mac; 33 std::string super_mac;
34 scoped_ptr<int> version;
35 bool commit_performed; 34 bool commit_performed;
36 }; 35 };
37 36
38 explicit MockHashStoreContents(Data* data) : data_(data) {} 37 explicit MockHashStoreContents(Data* data) : data_(data) {}
39 38
40 // HashStoreContents implementation 39 // HashStoreContents implementation
41 virtual std::string hash_store_id() const OVERRIDE { return "store_id"; } 40 virtual std::string hash_store_id() const OVERRIDE { return "store_id"; }
42 41
43 virtual void Reset() OVERRIDE { 42 virtual void Reset() OVERRIDE {
44 data_->contents.reset(); 43 data_->contents.reset();
45 data_->super_mac = ""; 44 data_->super_mac = "";
46 data_->version.reset();
47 } 45 }
48 46
49 virtual bool IsInitialized() const OVERRIDE { return data_->contents; } 47 virtual bool IsInitialized() const OVERRIDE { return data_->contents; }
50 48
51 virtual bool GetVersion(int* version) const OVERRIDE {
52 if (data_->version)
53 *version = *data_->version;
54 return data_->version;
55 }
56
57 virtual void SetVersion(int version) OVERRIDE {
58 data_->version.reset(new int(version));
59 }
60
61 virtual const base::DictionaryValue* GetContents() const OVERRIDE { 49 virtual const base::DictionaryValue* GetContents() const OVERRIDE {
62 return data_->contents.get(); 50 return data_->contents.get();
63 } 51 }
64 52
65 virtual scoped_ptr<MutableDictionary> GetMutableContents() OVERRIDE { 53 virtual scoped_ptr<MutableDictionary> GetMutableContents() OVERRIDE {
66 return scoped_ptr<MutableDictionary>(new MockMutableDictionary(data_)); 54 return scoped_ptr<MutableDictionary>(new MockMutableDictionary(data_));
67 } 55 }
68 56
69 virtual std::string GetSuperMac() const OVERRIDE { return data_->super_mac; } 57 virtual std::string GetSuperMac() const OVERRIDE { return data_->super_mac; }
70 58
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 MockHashStoreContents::Data hash_store_data_; 97 MockHashStoreContents::Data hash_store_data_;
110 }; 98 };
111 99
112 TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) { 100 TEST_F(PrefHashStoreImplTest, AtomicHashStoreAndCheck) {
113 base::StringValue string_1("string1"); 101 base::StringValue string_1("string1");
114 base::StringValue string_2("string2"); 102 base::StringValue string_2("string2");
115 103
116 { 104 {
117 // 32 NULL bytes is the seed that was used to generate the legacy hash. 105 // 32 NULL bytes is the seed that was used to generate the legacy hash.
118 PrefHashStoreImpl pref_hash_store( 106 PrefHashStoreImpl pref_hash_store(
119 std::string(32, 0), "device_id", CreateHashStoreContents()); 107 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
120 scoped_ptr<PrefHashStoreTransaction> transaction( 108 scoped_ptr<PrefHashStoreTransaction> transaction(
121 pref_hash_store.BeginTransaction()); 109 pref_hash_store.BeginTransaction());
122 110
123 // Only NULL should be trusted in the absence of a hash. 111 // Only NULL should be trusted in the absence of a hash.
124 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 112 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
125 transaction->CheckValue("path1", &string_1)); 113 transaction->CheckValue("path1", &string_1));
126 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 114 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
127 transaction->CheckValue("path1", NULL)); 115 transaction->CheckValue("path1", NULL));
128 116
129 transaction->StoreHash("path1", &string_1); 117 transaction->StoreHash("path1", &string_1);
(...skipping 24 matching lines...) Expand all
154 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 142 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
155 transaction->CheckValue("path1", &dict)); 143 transaction->CheckValue("path1", &dict));
156 144
157 // Test that the |pref_hash_store| flushes its changes on request post 145 // Test that the |pref_hash_store| flushes its changes on request post
158 // transaction. 146 // transaction.
159 transaction.reset(); 147 transaction.reset();
160 pref_hash_store.CommitPendingWrite(); 148 pref_hash_store.CommitPendingWrite();
161 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset()); 149 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset());
162 } 150 }
163 151
152 ASSERT_FALSE(CreateHashStoreContents()->GetSuperMac().empty());
gab 2014/06/13 18:04:10 This doesn't really test StampSuperMAC() itself si
153
164 { 154 {
165 // |pref_hash_store2| should trust its initial hashes dictionary and thus 155 // |pref_hash_store2| should trust its initial hashes dictionary and thus
166 // trust new unknown values. 156 // trust new unknown values.
167 PrefHashStoreImpl pref_hash_store2( 157 PrefHashStoreImpl pref_hash_store2(
168 std::string(32, 0), "device_id", CreateHashStoreContents()); 158 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
169 scoped_ptr<PrefHashStoreTransaction> transaction( 159 scoped_ptr<PrefHashStoreTransaction> transaction(
170 pref_hash_store2.BeginTransaction()); 160 pref_hash_store2.BeginTransaction());
171 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 161 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
172 transaction->CheckValue("new_path", &string_1)); 162 transaction->CheckValue("new_path", &string_1));
173 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 163 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
174 transaction->CheckValue("new_path", &string_2)); 164 transaction->CheckValue("new_path", &string_2));
175 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 165 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
176 transaction->CheckValue("new_path", NULL)); 166 transaction->CheckValue("new_path", NULL));
177 167
178 // Test that |pref_hash_store2| doesn't flush its contents to disk when it 168 // Test that |pref_hash_store2| doesn't flush its contents to disk when it
179 // didn't change. 169 // didn't change.
180 transaction.reset(); 170 transaction.reset();
181 pref_hash_store2.CommitPendingWrite(); 171 pref_hash_store2.CommitPendingWrite();
182 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset()); 172 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
183 } 173 }
184 174
185 // Manually corrupt the super MAC. 175 // Manually corrupt the super MAC.
186 hash_store_data_.super_mac = std::string(64, 'A'); 176 hash_store_data_.super_mac = std::string(64, 'A');
187 177
188 { 178 {
189 // |pref_hash_store3| should no longer trust its initial hashes dictionary 179 // |pref_hash_store3| should no longer trust its initial hashes dictionary
190 // and thus shouldn't trust non-NULL unknown values. 180 // and thus shouldn't trust non-NULL unknown values.
191 PrefHashStoreImpl pref_hash_store3( 181 PrefHashStoreImpl pref_hash_store3(
192 std::string(32, 0), "device_id", CreateHashStoreContents()); 182 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
193 scoped_ptr<PrefHashStoreTransaction> transaction( 183 scoped_ptr<PrefHashStoreTransaction> transaction(
194 pref_hash_store3.BeginTransaction()); 184 pref_hash_store3.BeginTransaction());
195 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 185 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
196 transaction->CheckValue("new_path", &string_1)); 186 transaction->CheckValue("new_path", &string_1));
197 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 187 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
198 transaction->CheckValue("new_path", &string_2)); 188 transaction->CheckValue("new_path", &string_2));
199 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 189 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
200 transaction->CheckValue("new_path", NULL)); 190 transaction->CheckValue("new_path", NULL));
201 191
202 // Test that |pref_hash_store3| doesn't flush its contents to disk when it 192 // Test that |pref_hash_store3| doesn't flush its contents to disk when it
203 // didn't change. 193 // didn't change.
204 transaction.reset(); 194 transaction.reset();
205 pref_hash_store3.CommitPendingWrite(); 195 pref_hash_store3.CommitPendingWrite();
206 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset()); 196 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
207 } 197 }
208 } 198 }
209 199
200 TEST_F(PrefHashStoreImplTest, SuperMACDisabled) {
201 base::StringValue string_1("string1");
202 base::StringValue string_2("string2");
203
204 {
205 // Pass |use_super_mac| => false.
206 PrefHashStoreImpl pref_hash_store(
207 std::string(32, 0), "device_id", CreateHashStoreContents(), false);
208 scoped_ptr<PrefHashStoreTransaction> transaction(
209 pref_hash_store.BeginTransaction());
210
211 transaction->StoreHash("path1", &string_2);
212 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
213 transaction->CheckValue("path1", &string_2));
214 }
215
216 ASSERT_TRUE(CreateHashStoreContents()->GetSuperMac().empty());
217
218 {
219 PrefHashStoreImpl pref_hash_store2(
220 std::string(32, 0), "device_id", CreateHashStoreContents(), false);
221 scoped_ptr<PrefHashStoreTransaction> transaction(
222 pref_hash_store2.BeginTransaction());
223 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
224 transaction->CheckValue("new_path", &string_1));
225 }
226 }
227
210 TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) { 228 TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
211 base::DictionaryValue dict; 229 base::DictionaryValue dict;
212 dict.Set("a", new base::StringValue("to be replaced")); 230 dict.Set("a", new base::StringValue("to be replaced"));
213 dict.Set("b", new base::StringValue("same")); 231 dict.Set("b", new base::StringValue("same"));
214 dict.Set("o", new base::StringValue("old")); 232 dict.Set("o", new base::StringValue("old"));
215 233
216 base::DictionaryValue modified_dict; 234 base::DictionaryValue modified_dict;
217 modified_dict.Set("a", new base::StringValue("replaced")); 235 modified_dict.Set("a", new base::StringValue("replaced"));
218 modified_dict.Set("b", new base::StringValue("same")); 236 modified_dict.Set("b", new base::StringValue("same"));
219 modified_dict.Set("c", new base::StringValue("new")); 237 modified_dict.Set("c", new base::StringValue("new"));
220 238
221 base::DictionaryValue empty_dict; 239 base::DictionaryValue empty_dict;
222 240
223 std::vector<std::string> invalid_keys; 241 std::vector<std::string> invalid_keys;
224 242
225 { 243 {
226 PrefHashStoreImpl pref_hash_store( 244 PrefHashStoreImpl pref_hash_store(
227 std::string(32, 0), "device_id", CreateHashStoreContents()); 245 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
228 scoped_ptr<PrefHashStoreTransaction> transaction( 246 scoped_ptr<PrefHashStoreTransaction> transaction(
229 pref_hash_store.BeginTransaction()); 247 pref_hash_store.BeginTransaction());
230 248
231 // No hashes stored yet and hashes dictionary is empty (and thus not 249 // No hashes stored yet and hashes dictionary is empty (and thus not
232 // trusted). 250 // trusted).
233 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 251 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
234 transaction->CheckSplitValue("path1", &dict, &invalid_keys)); 252 transaction->CheckSplitValue("path1", &dict, &invalid_keys));
235 EXPECT_TRUE(invalid_keys.empty()); 253 EXPECT_TRUE(invalid_keys.empty());
236 254
237 transaction->StoreSplitHash("path1", &dict); 255 transaction->StoreSplitHash("path1", &dict);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // Test that the |pref_hash_store| flushes its changes on request. 311 // Test that the |pref_hash_store| flushes its changes on request.
294 transaction.reset(); 312 transaction.reset();
295 pref_hash_store.CommitPendingWrite(); 313 pref_hash_store.CommitPendingWrite();
296 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset()); 314 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset());
297 } 315 }
298 316
299 { 317 {
300 // |pref_hash_store2| should trust its initial hashes dictionary and thus 318 // |pref_hash_store2| should trust its initial hashes dictionary and thus
301 // trust new unknown values. 319 // trust new unknown values.
302 PrefHashStoreImpl pref_hash_store2( 320 PrefHashStoreImpl pref_hash_store2(
303 std::string(32, 0), "device_id", CreateHashStoreContents()); 321 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
304 scoped_ptr<PrefHashStoreTransaction> transaction( 322 scoped_ptr<PrefHashStoreTransaction> transaction(
305 pref_hash_store2.BeginTransaction()); 323 pref_hash_store2.BeginTransaction());
306 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 324 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
307 transaction->CheckSplitValue("new_path", &dict, &invalid_keys)); 325 transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
308 EXPECT_TRUE(invalid_keys.empty()); 326 EXPECT_TRUE(invalid_keys.empty());
309 327
310 // Test that |pref_hash_store2| doesn't flush its contents to disk when it 328 // Test that |pref_hash_store2| doesn't flush its contents to disk when it
311 // didn't change. 329 // didn't change.
312 transaction.reset(); 330 transaction.reset();
313 pref_hash_store2.CommitPendingWrite(); 331 pref_hash_store2.CommitPendingWrite();
314 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset()); 332 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
315 } 333 }
316 334
317 // Manually corrupt the super MAC. 335 // Manually corrupt the super MAC.
318 hash_store_data_.super_mac = std::string(64, 'A'); 336 hash_store_data_.super_mac = std::string(64, 'A');
319 337
320 { 338 {
321 // |pref_hash_store3| should no longer trust its initial hashes dictionary 339 // |pref_hash_store3| should no longer trust its initial hashes dictionary
322 // and thus shouldn't trust unknown values. 340 // and thus shouldn't trust unknown values.
323 PrefHashStoreImpl pref_hash_store3( 341 PrefHashStoreImpl pref_hash_store3(
324 std::string(32, 0), "device_id", CreateHashStoreContents()); 342 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
325 scoped_ptr<PrefHashStoreTransaction> transaction( 343 scoped_ptr<PrefHashStoreTransaction> transaction(
326 pref_hash_store3.BeginTransaction()); 344 pref_hash_store3.BeginTransaction());
327 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE, 345 EXPECT_EQ(PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE,
328 transaction->CheckSplitValue("new_path", &dict, &invalid_keys)); 346 transaction->CheckSplitValue("new_path", &dict, &invalid_keys));
329 EXPECT_TRUE(invalid_keys.empty()); 347 EXPECT_TRUE(invalid_keys.empty());
330 348
331 // Test that |pref_hash_store3| doesn't flush its contents to disk when it 349 // Test that |pref_hash_store3| doesn't flush its contents to disk when it
332 // didn't change. 350 // didn't change.
333 transaction.reset(); 351 transaction.reset();
334 pref_hash_store3.CommitPendingWrite(); 352 pref_hash_store3.CommitPendingWrite();
335 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset()); 353 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
336 } 354 }
337 } 355 }
338 356
339 TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) { 357 TEST_F(PrefHashStoreImplTest, EmptyAndNULLSplitDict) {
340 base::DictionaryValue empty_dict; 358 base::DictionaryValue empty_dict;
341 359
342 std::vector<std::string> invalid_keys; 360 std::vector<std::string> invalid_keys;
343 361
344 { 362 {
345 PrefHashStoreImpl pref_hash_store( 363 PrefHashStoreImpl pref_hash_store(
346 std::string(32, 0), "device_id", CreateHashStoreContents()); 364 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
347 scoped_ptr<PrefHashStoreTransaction> transaction( 365 scoped_ptr<PrefHashStoreTransaction> transaction(
348 pref_hash_store.BeginTransaction()); 366 pref_hash_store.BeginTransaction());
349 367
350 // Store hashes for a random dict to be overwritten below. 368 // Store hashes for a random dict to be overwritten below.
351 base::DictionaryValue initial_dict; 369 base::DictionaryValue initial_dict;
352 initial_dict.Set("a", new base::StringValue("foo")); 370 initial_dict.Set("a", new base::StringValue("foo"));
353 transaction->StoreSplitHash("path1", &initial_dict); 371 transaction->StoreSplitHash("path1", &initial_dict);
354 372
355 // Verify stored empty dictionary matches NULL and empty dictionary back. 373 // Verify stored empty dictionary matches NULL and empty dictionary back.
356 transaction->StoreSplitHash("path1", &empty_dict); 374 transaction->StoreSplitHash("path1", &empty_dict);
(...skipping 16 matching lines...) Expand all
373 EXPECT_TRUE(invalid_keys.empty()); 391 EXPECT_TRUE(invalid_keys.empty());
374 } 392 }
375 393
376 { 394 {
377 // |pref_hash_store2| should trust its initial hashes dictionary (and thus 395 // |pref_hash_store2| should trust its initial hashes dictionary (and thus
378 // trust new unknown values) even though the last action done was to clear 396 // trust new unknown values) even though the last action done was to clear
379 // the hashes for path1 by setting its value to NULL (this is a regression 397 // the hashes for path1 by setting its value to NULL (this is a regression
380 // test ensuring that the internal action of clearing some hashes does 398 // test ensuring that the internal action of clearing some hashes does
381 // update the stored hash of hashes). 399 // update the stored hash of hashes).
382 PrefHashStoreImpl pref_hash_store2( 400 PrefHashStoreImpl pref_hash_store2(
383 std::string(32, 0), "device_id", CreateHashStoreContents()); 401 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
384 scoped_ptr<PrefHashStoreTransaction> transaction( 402 scoped_ptr<PrefHashStoreTransaction> transaction(
385 pref_hash_store2.BeginTransaction()); 403 pref_hash_store2.BeginTransaction());
386 404
387 base::DictionaryValue tested_dict; 405 base::DictionaryValue tested_dict;
388 tested_dict.Set("a", new base::StringValue("foo")); 406 tested_dict.Set("a", new base::StringValue("foo"));
389 tested_dict.Set("b", new base::StringValue("bar")); 407 tested_dict.Set("b", new base::StringValue("bar"));
390 EXPECT_EQ( 408 EXPECT_EQ(
391 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 409 PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
392 transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys)); 410 transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys));
393 EXPECT_TRUE(invalid_keys.empty()); 411 EXPECT_TRUE(invalid_keys.empty());
(...skipping 10 matching lines...) Expand all
404 base::StringValue string("string1"); 422 base::StringValue string("string1");
405 423
406 base::DictionaryValue dict; 424 base::DictionaryValue dict;
407 dict.Set("a", new base::StringValue("foo")); 425 dict.Set("a", new base::StringValue("foo"));
408 dict.Set("d", new base::StringValue("bad")); 426 dict.Set("d", new base::StringValue("bad"));
409 dict.Set("b", new base::StringValue("bar")); 427 dict.Set("b", new base::StringValue("bar"));
410 dict.Set("c", new base::StringValue("baz")); 428 dict.Set("c", new base::StringValue("baz"));
411 429
412 { 430 {
413 PrefHashStoreImpl pref_hash_store( 431 PrefHashStoreImpl pref_hash_store(
414 std::string(32, 0), "device_id", CreateHashStoreContents()); 432 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
415 scoped_ptr<PrefHashStoreTransaction> transaction( 433 scoped_ptr<PrefHashStoreTransaction> transaction(
416 pref_hash_store.BeginTransaction()); 434 pref_hash_store.BeginTransaction());
417 435
418 transaction->StoreHash("path1", &string); 436 transaction->StoreHash("path1", &string);
419 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED, 437 EXPECT_EQ(PrefHashStoreTransaction::UNCHANGED,
420 transaction->CheckValue("path1", &string)); 438 transaction->CheckValue("path1", &string));
421 } 439 }
422 440
423 { 441 {
424 // Load a new |pref_hash_store2| in which the hashes dictionary is trusted. 442 // Load a new |pref_hash_store2| in which the hashes dictionary is trusted.
425 PrefHashStoreImpl pref_hash_store2( 443 PrefHashStoreImpl pref_hash_store2(
426 std::string(32, 0), "device_id", CreateHashStoreContents()); 444 std::string(32, 0), "device_id", CreateHashStoreContents(), true);
427 scoped_ptr<PrefHashStoreTransaction> transaction( 445 scoped_ptr<PrefHashStoreTransaction> transaction(
428 pref_hash_store2.BeginTransaction()); 446 pref_hash_store2.BeginTransaction());
429 std::vector<std::string> invalid_keys; 447 std::vector<std::string> invalid_keys;
430 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE, 448 EXPECT_EQ(PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE,
431 transaction->CheckSplitValue("path1", &dict, &invalid_keys)); 449 transaction->CheckSplitValue("path1", &dict, &invalid_keys));
432 EXPECT_TRUE(invalid_keys.empty()); 450 EXPECT_TRUE(invalid_keys.empty());
433 } 451 }
434 } 452 }
435
436 TEST_F(PrefHashStoreImplTest, GetCurrentVersion) {
437 COMPILE_ASSERT(PrefHashStoreImpl::VERSION_LATEST == 2,
438 new_versions_should_be_tested_here);
439 {
440 PrefHashStoreImpl pref_hash_store(
441 std::string(32, 0), "device_id", CreateHashStoreContents());
442
443 // VERSION_UNINITIALIZED when no hashes are stored.
444 EXPECT_EQ(PrefHashStoreImpl::VERSION_UNINITIALIZED,
445 pref_hash_store.GetCurrentVersion());
446
447 scoped_ptr<PrefHashStoreTransaction> transaction(
448 pref_hash_store.BeginTransaction());
449 base::StringValue string_value("foo");
450 transaction->StoreHash("path1", &string_value);
451
452 // Test that |pref_hash_store| flushes its content to disk when it
453 // initializes its version.
454 transaction.reset();
455 pref_hash_store.CommitPendingWrite();
456 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset());
457 }
458 {
459 PrefHashStoreImpl pref_hash_store(
460 std::string(32, 0), "device_id", CreateHashStoreContents());
461
462 // VERSION_LATEST after storing a hash.
463 EXPECT_EQ(PrefHashStoreImpl::VERSION_LATEST,
464 pref_hash_store.GetCurrentVersion());
465
466 // Test that |pref_hash_store| doesn't flush its contents to disk when it
467 // didn't change.
468 pref_hash_store.CommitPendingWrite();
469 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
470 }
471
472 // Manually clear the version number.
473 hash_store_data_.version.reset();
474
475 {
476 PrefHashStoreImpl pref_hash_store(
477 std::string(32, 0), "device_id", CreateHashStoreContents());
478
479 // VERSION_PRE_MIGRATION when no version is stored.
480 EXPECT_EQ(PrefHashStoreImpl::VERSION_PRE_MIGRATION,
481 pref_hash_store.GetCurrentVersion());
482
483 scoped_ptr<PrefHashStoreTransaction> transaction(
484 pref_hash_store.BeginTransaction());
485
486 // Test that |pref_hash_store| flushes its content to disk when it
487 // re-initializes its version.
488 transaction.reset();
489 pref_hash_store.CommitPendingWrite();
490 EXPECT_TRUE(hash_store_data_.GetCommitPerformedAndReset());
491 }
492 {
493 PrefHashStoreImpl pref_hash_store(
494 std::string(32, 0), "device_id", CreateHashStoreContents());
495
496 // Back to VERSION_LATEST after performing a transaction from
497 // VERSION_PRE_MIGRATION (the presence of an existing hash should be
498 // sufficient, no need for the transaction itself to perform any work).
499 EXPECT_EQ(PrefHashStoreImpl::VERSION_LATEST,
500 pref_hash_store.GetCurrentVersion());
501
502 // Test that |pref_hash_store| doesn't flush its contents to disk when it
503 // didn't change (i.e., its version was already up-to-date and the only
504 // transaction performed was empty).
505 scoped_ptr<PrefHashStoreTransaction> transaction(
506 pref_hash_store.BeginTransaction());
507 transaction.reset();
508 pref_hash_store.CommitPendingWrite();
509 EXPECT_FALSE(hash_store_data_.GetCommitPerformedAndReset());
510 }
511 }
OLDNEW
« no previous file with comments | « chrome/browser/prefs/pref_hash_store_impl.cc ('k') | chrome/browser/prefs/profile_pref_store_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698