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

Side by Side Diff: content/browser/dom_storage/session_storage_database_unittest.cc

Issue 22297005: Move webkit/{browser,common}/dom_storage into content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 5
6 #include "webkit/browser/dom_storage/session_storage_database.h" 6 #include "content/browser/dom_storage/session_storage_database.h"
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 11
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/files/scoped_temp_dir.h" 13 #include "base/files/scoped_temp_dir.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "content/common/dom_storage/dom_storage_types.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "third_party/leveldatabase/src/include/leveldb/db.h" 19 #include "third_party/leveldatabase/src/include/leveldb/db.h"
19 #include "third_party/leveldatabase/src/include/leveldb/iterator.h" 20 #include "third_party/leveldatabase/src/include/leveldb/iterator.h"
20 #include "third_party/leveldatabase/src/include/leveldb/options.h" 21 #include "third_party/leveldatabase/src/include/leveldb/options.h"
21 #include "url/gurl.h" 22 #include "url/gurl.h"
22 #include "webkit/common/dom_storage/dom_storage_types.h"
23 23
24 namespace dom_storage { 24 namespace content {
25 25
26 class SessionStorageDatabaseTest : public testing::Test { 26 class SessionStorageDatabaseTest : public testing::Test {
27 public: 27 public:
28 SessionStorageDatabaseTest(); 28 SessionStorageDatabaseTest();
29 virtual ~SessionStorageDatabaseTest(); 29 virtual ~SessionStorageDatabaseTest();
30 virtual void SetUp() OVERRIDE; 30 virtual void SetUp() OVERRIDE;
31 31
32 protected: 32 protected:
33 typedef std::map<std::string, std::string> DataMap; 33 typedef std::map<std::string, std::string> DataMap;
34 34
35 // Helpers. 35 // Helpers.
36 static bool IsNamespaceKey(const std::string& key, 36 static bool IsNamespaceKey(const std::string& key,
37 std::string* namespace_id); 37 std::string* namespace_id);
38 static bool IsNamespaceOriginKey(const std::string& key, 38 static bool IsNamespaceOriginKey(const std::string& key,
39 std::string* namespace_id); 39 std::string* namespace_id);
40 static bool IsMapRefCountKey(const std::string& key, 40 static bool IsMapRefCountKey(const std::string& key,
41 int64* map_id); 41 int64* map_id);
42 static bool IsMapValueKey(const std::string& key, 42 static bool IsMapValueKey(const std::string& key,
43 int64* map_id); 43 int64* map_id);
44 void ResetDatabase(); 44 void ResetDatabase();
45 void ReadData(DataMap* data) const; 45 void ReadData(DataMap* data) const;
46 void CheckDatabaseConsistency() const; 46 void CheckDatabaseConsistency() const;
47 void CheckEmptyDatabase() const; 47 void CheckEmptyDatabase() const;
48 void DumpData() const; 48 void DumpData() const;
49 void CheckAreaData(const std::string& namespace_id, 49 void CheckAreaData(const std::string& namespace_id,
50 const GURL& origin, 50 const GURL& origin,
51 const ValuesMap& reference) const; 51 const DOMStorageValuesMap& reference) const;
52 void CompareValuesMaps(const ValuesMap& map1, const ValuesMap& map2) const; 52 void CompareValuesMaps(const DOMStorageValuesMap& map1,
53 const DOMStorageValuesMap& map2) const;
53 void CheckNamespaceIds( 54 void CheckNamespaceIds(
54 const std::set<std::string>& expected_namespace_ids) const; 55 const std::set<std::string>& expected_namespace_ids) const;
55 void CheckOrigins( 56 void CheckOrigins(
56 const std::string& namespace_id, 57 const std::string& namespace_id,
57 const std::set<GURL>& expected_origins) const; 58 const std::set<GURL>& expected_origins) const;
58 std::string GetMapForArea(const std::string& namespace_id, 59 std::string GetMapForArea(const std::string& namespace_id,
59 const GURL& origin) const; 60 const GURL& origin) const;
60 int64 GetMapRefCount(const std::string& map_id) const; 61 int64 GetMapRefCount(const std::string& map_id) const;
61 62
62 base::ScopedTempDir temp_dir_; 63 base::ScopedTempDir temp_dir_;
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 LOG(WARNING) << it->key().ToString() << ": " << value; 310 LOG(WARNING) << it->key().ToString() << ": " << value;
310 } else { 311 } else {
311 LOG(WARNING) << it->key().ToString() << ": " << it->value().ToString(); 312 LOG(WARNING) << it->key().ToString() << ": " << it->value().ToString();
312 } 313 }
313 } 314 }
314 LOG(WARNING) << "----"; 315 LOG(WARNING) << "----";
315 } 316 }
316 317
317 void SessionStorageDatabaseTest::CheckAreaData( 318 void SessionStorageDatabaseTest::CheckAreaData(
318 const std::string& namespace_id, const GURL& origin, 319 const std::string& namespace_id, const GURL& origin,
319 const ValuesMap& reference) const { 320 const DOMStorageValuesMap& reference) const {
320 ValuesMap values; 321 DOMStorageValuesMap values;
321 db_->ReadAreaValues(namespace_id, origin, &values); 322 db_->ReadAreaValues(namespace_id, origin, &values);
322 CompareValuesMaps(values, reference); 323 CompareValuesMaps(values, reference);
323 } 324 }
324 325
325 void SessionStorageDatabaseTest::CompareValuesMaps( 326 void SessionStorageDatabaseTest::CompareValuesMaps(
326 const ValuesMap& map1, 327 const DOMStorageValuesMap& map1,
327 const ValuesMap& map2) const { 328 const DOMStorageValuesMap& map2) const {
328 ASSERT_EQ(map2.size(), map1.size()); 329 ASSERT_EQ(map2.size(), map1.size());
329 for (ValuesMap::const_iterator it = map1.begin(); it != map1.end(); ++it) { 330 for (DOMStorageValuesMap::const_iterator it = map1.begin();
331 it != map1.end(); ++it) {
330 base::string16 key = it->first; 332 base::string16 key = it->first;
331 ASSERT_TRUE(map2.find(key) != map2.end()); 333 ASSERT_TRUE(map2.find(key) != map2.end());
332 base::NullableString16 val1 = it->second; 334 base::NullableString16 val1 = it->second;
333 base::NullableString16 val2 = map2.find(key)->second; 335 base::NullableString16 val2 = map2.find(key)->second;
334 EXPECT_EQ(val2.is_null(), val1.is_null()); 336 EXPECT_EQ(val2.is_null(), val1.is_null());
335 EXPECT_EQ(val2.string(), val1.string()); 337 EXPECT_EQ(val2.string(), val1.string());
336 } 338 }
337 } 339 }
338 340
339 void SessionStorageDatabaseTest::CheckNamespaceIds( 341 void SessionStorageDatabaseTest::CheckNamespaceIds(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 return ref_count; 381 return ref_count;
380 } 382 }
381 383
382 TEST_F(SessionStorageDatabaseTest, EmptyDatabaseSanityCheck) { 384 TEST_F(SessionStorageDatabaseTest, EmptyDatabaseSanityCheck) {
383 // An empty database should be valid. 385 // An empty database should be valid.
384 CheckDatabaseConsistency(); 386 CheckDatabaseConsistency();
385 } 387 }
386 388
387 TEST_F(SessionStorageDatabaseTest, WriteDataForOneOrigin) { 389 TEST_F(SessionStorageDatabaseTest, WriteDataForOneOrigin) {
388 // Keep track on what the values should look like. 390 // Keep track on what the values should look like.
389 ValuesMap reference; 391 DOMStorageValuesMap reference;
390 // Write data. 392 // Write data.
391 { 393 {
392 ValuesMap changes; 394 DOMStorageValuesMap changes;
393 changes[kKey1] = kValue1; 395 changes[kKey1] = kValue1;
394 changes[kKey2] = kValue2; 396 changes[kKey2] = kValue2;
395 changes[kKey3] = kValue3; 397 changes[kKey3] = kValue3;
396 reference[kKey1] = kValue1; 398 reference[kKey1] = kValue1;
397 reference[kKey2] = kValue2; 399 reference[kKey2] = kValue2;
398 reference[kKey3] = kValue3; 400 reference[kKey3] = kValue3;
399 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); 401 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes));
400 } 402 }
401 CheckDatabaseConsistency(); 403 CheckDatabaseConsistency();
402 CheckAreaData(kNamespace1, kOrigin1, reference); 404 CheckAreaData(kNamespace1, kOrigin1, reference);
403 405
404 // Overwrite and delete values. 406 // Overwrite and delete values.
405 { 407 {
406 ValuesMap changes; 408 DOMStorageValuesMap changes;
407 changes[kKey1] = kValue4; 409 changes[kKey1] = kValue4;
408 changes[kKey3] = kValueNull; 410 changes[kKey3] = kValueNull;
409 reference[kKey1] = kValue4; 411 reference[kKey1] = kValue4;
410 reference.erase(kKey3); 412 reference.erase(kKey3);
411 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); 413 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes));
412 } 414 }
413 CheckDatabaseConsistency(); 415 CheckDatabaseConsistency();
414 CheckAreaData(kNamespace1, kOrigin1, reference); 416 CheckAreaData(kNamespace1, kOrigin1, reference);
415 417
416 // Clear data before writing. 418 // Clear data before writing.
417 { 419 {
418 ValuesMap changes; 420 DOMStorageValuesMap changes;
419 changes[kKey2] = kValue2; 421 changes[kKey2] = kValue2;
420 reference.erase(kKey1); 422 reference.erase(kKey1);
421 reference[kKey2] = kValue2; 423 reference[kKey2] = kValue2;
422 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, true, changes)); 424 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, true, changes));
423 } 425 }
424 CheckDatabaseConsistency(); 426 CheckDatabaseConsistency();
425 CheckAreaData(kNamespace1, kOrigin1, reference); 427 CheckAreaData(kNamespace1, kOrigin1, reference);
426 } 428 }
427 429
428 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoOrigins) { 430 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoOrigins) {
429 // Write data. 431 // Write data.
430 ValuesMap data1; 432 DOMStorageValuesMap data1;
431 data1[kKey1] = kValue1; 433 data1[kKey1] = kValue1;
432 data1[kKey2] = kValue2; 434 data1[kKey2] = kValue2;
433 data1[kKey3] = kValue3; 435 data1[kKey3] = kValue3;
434 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 436 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
435 437
436 ValuesMap data2; 438 DOMStorageValuesMap data2;
437 data2[kKey1] = kValue4; 439 data2[kKey1] = kValue4;
438 data2[kKey2] = kValue1; 440 data2[kKey2] = kValue1;
439 data2[kKey3] = kValue2; 441 data2[kKey3] = kValue2;
440 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 442 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
441 443
442 CheckDatabaseConsistency(); 444 CheckDatabaseConsistency();
443 CheckAreaData(kNamespace1, kOrigin1, data1); 445 CheckAreaData(kNamespace1, kOrigin1, data1);
444 CheckAreaData(kNamespace1, kOrigin2, data2); 446 CheckAreaData(kNamespace1, kOrigin2, data2);
445 } 447 }
446 448
447 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoNamespaces) { 449 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoNamespaces) {
448 // Write data. 450 // Write data.
449 ValuesMap data11; 451 DOMStorageValuesMap data11;
450 data11[kKey1] = kValue1; 452 data11[kKey1] = kValue1;
451 data11[kKey2] = kValue2; 453 data11[kKey2] = kValue2;
452 data11[kKey3] = kValue3; 454 data11[kKey3] = kValue3;
453 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data11)); 455 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data11));
454 ValuesMap data12; 456 DOMStorageValuesMap data12;
455 data12[kKey2] = kValue4; 457 data12[kKey2] = kValue4;
456 data12[kKey3] = kValue3; 458 data12[kKey3] = kValue3;
457 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data12)); 459 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data12));
458 ValuesMap data21; 460 DOMStorageValuesMap data21;
459 data21[kKey1] = kValue2; 461 data21[kKey1] = kValue2;
460 data21[kKey2] = kValue4; 462 data21[kKey2] = kValue4;
461 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin1, false, data21)); 463 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin1, false, data21));
462 ValuesMap data22; 464 DOMStorageValuesMap data22;
463 data22[kKey2] = kValue1; 465 data22[kKey2] = kValue1;
464 data22[kKey3] = kValue2; 466 data22[kKey3] = kValue2;
465 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data22)); 467 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data22));
466 CheckDatabaseConsistency(); 468 CheckDatabaseConsistency();
467 CheckAreaData(kNamespace1, kOrigin1, data11); 469 CheckAreaData(kNamespace1, kOrigin1, data11);
468 CheckAreaData(kNamespace1, kOrigin2, data12); 470 CheckAreaData(kNamespace1, kOrigin2, data12);
469 CheckAreaData(kNamespace2, kOrigin1, data21); 471 CheckAreaData(kNamespace2, kOrigin1, data21);
470 CheckAreaData(kNamespace2, kOrigin2, data22); 472 CheckAreaData(kNamespace2, kOrigin2, data22);
471 } 473 }
472 474
473 TEST_F(SessionStorageDatabaseTest, ShallowCopy) { 475 TEST_F(SessionStorageDatabaseTest, ShallowCopy) {
474 // Write data for a namespace, for 2 origins. 476 // Write data for a namespace, for 2 origins.
475 ValuesMap data1; 477 DOMStorageValuesMap data1;
476 data1[kKey1] = kValue1; 478 data1[kKey1] = kValue1;
477 data1[kKey2] = kValue2; 479 data1[kKey2] = kValue2;
478 data1[kKey3] = kValue3; 480 data1[kKey3] = kValue3;
479 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 481 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
480 ValuesMap data2; 482 DOMStorageValuesMap data2;
481 data2[kKey1] = kValue2; 483 data2[kKey1] = kValue2;
482 data2[kKey3] = kValue1; 484 data2[kKey3] = kValue1;
483 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 485 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
484 // Make a shallow copy. 486 // Make a shallow copy.
485 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 487 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
486 // Now both namespaces should have the same data. 488 // Now both namespaces should have the same data.
487 CheckDatabaseConsistency(); 489 CheckDatabaseConsistency();
488 CheckAreaData(kNamespace1, kOrigin1, data1); 490 CheckAreaData(kNamespace1, kOrigin1, data1);
489 CheckAreaData(kNamespace1, kOrigin2, data2); 491 CheckAreaData(kNamespace1, kOrigin2, data2);
490 CheckAreaData(kNamespaceClone, kOrigin1, data1); 492 CheckAreaData(kNamespaceClone, kOrigin1, data1);
491 CheckAreaData(kNamespaceClone, kOrigin2, data2); 493 CheckAreaData(kNamespaceClone, kOrigin2, data2);
492 // Both the namespaces refer to the same maps. 494 // Both the namespaces refer to the same maps.
493 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin1), 495 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin1),
494 GetMapForArea(kNamespaceClone, kOrigin1)); 496 GetMapForArea(kNamespaceClone, kOrigin1));
495 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), 497 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2),
496 GetMapForArea(kNamespaceClone, kOrigin2)); 498 GetMapForArea(kNamespaceClone, kOrigin2));
497 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); 499 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1)));
498 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); 500 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2)));
499 } 501 }
500 502
501 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) { 503 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) {
502 ValuesMap data1; 504 DOMStorageValuesMap data1;
503 data1[kKey1] = kValue1; 505 data1[kKey1] = kValue1;
504 data1[kKey2] = kValue2; 506 data1[kKey2] = kValue2;
505 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 507 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
506 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 508 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
507 509
508 // Write data into a shallow copy. 510 // Write data into a shallow copy.
509 ValuesMap changes; 511 DOMStorageValuesMap changes;
510 ValuesMap reference; 512 DOMStorageValuesMap reference;
511 changes[kKey1] = kValueNull; 513 changes[kKey1] = kValueNull;
512 changes[kKey2] = kValue4; 514 changes[kKey2] = kValue4;
513 changes[kKey3] = kValue4; 515 changes[kKey3] = kValue4;
514 reference[kKey2] = kValue4; 516 reference[kKey2] = kValue4;
515 reference[kKey3] = kValue4; 517 reference[kKey3] = kValue4;
516 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, 518 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false,
517 changes)); 519 changes));
518 520
519 // Values in the original namespace were not changed. 521 // Values in the original namespace were not changed.
520 CheckAreaData(kNamespace1, kOrigin1, data1); 522 CheckAreaData(kNamespace1, kOrigin1, data1);
521 // But values in the copy were. 523 // But values in the copy were.
522 CheckAreaData(kNamespaceClone, kOrigin1, reference); 524 CheckAreaData(kNamespaceClone, kOrigin1, reference);
523 525
524 // The namespaces no longer refer to the same map. 526 // The namespaces no longer refer to the same map.
525 EXPECT_NE(GetMapForArea(kNamespace1, kOrigin1), 527 EXPECT_NE(GetMapForArea(kNamespace1, kOrigin1),
526 GetMapForArea(kNamespaceClone, kOrigin1)); 528 GetMapForArea(kNamespaceClone, kOrigin1));
527 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); 529 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1)));
528 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespaceClone, kOrigin1))); 530 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespaceClone, kOrigin1)));
529 } 531 }
530 532
531 TEST_F(SessionStorageDatabaseTest, ManyShallowCopies) { 533 TEST_F(SessionStorageDatabaseTest, ManyShallowCopies) {
532 // Write data for a namespace, for 2 origins. 534 // Write data for a namespace, for 2 origins.
533 ValuesMap data1; 535 DOMStorageValuesMap data1;
534 data1[kKey1] = kValue1; 536 data1[kKey1] = kValue1;
535 data1[kKey2] = kValue2; 537 data1[kKey2] = kValue2;
536 data1[kKey3] = kValue3; 538 data1[kKey3] = kValue3;
537 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 539 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
538 ValuesMap data2; 540 DOMStorageValuesMap data2;
539 data2[kKey1] = kValue2; 541 data2[kKey1] = kValue2;
540 data2[kKey3] = kValue1; 542 data2[kKey3] = kValue1;
541 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 543 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
542 544
543 // Make a two shallow copies. 545 // Make a two shallow copies.
544 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 546 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
545 std::string another_clone("another_cloned"); 547 std::string another_clone("another_cloned");
546 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, another_clone)); 548 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, another_clone));
547 549
548 // Make a shallow copy of a shallow copy. 550 // Make a shallow copy of a shallow copy.
(...skipping 24 matching lines...) Expand all
573 GetMapForArea(clone_of_clone, kOrigin1)); 575 GetMapForArea(clone_of_clone, kOrigin1));
574 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), 576 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2),
575 GetMapForArea(clone_of_clone, kOrigin2)); 577 GetMapForArea(clone_of_clone, kOrigin2));
576 578
577 // Check the ref counts. 579 // Check the ref counts.
578 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); 580 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1)));
579 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); 581 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2)));
580 } 582 }
581 583
582 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) { 584 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) {
583 ValuesMap data1; 585 DOMStorageValuesMap data1;
584 data1[kKey1] = kValue1; 586 data1[kKey1] = kValue1;
585 data1[kKey2] = kValue2; 587 data1[kKey2] = kValue2;
586 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 588 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
587 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 589 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
588 590
589 // Disassoaciate the shallow copy. 591 // Disassoaciate the shallow copy.
590 EXPECT_TRUE(db_->DeleteArea(kNamespaceClone, kOrigin1)); 592 EXPECT_TRUE(db_->DeleteArea(kNamespaceClone, kOrigin1));
591 CheckDatabaseConsistency(); 593 CheckDatabaseConsistency();
592 594
593 // Now new data can be written to that map. 595 // Now new data can be written to that map.
594 ValuesMap reference; 596 DOMStorageValuesMap reference;
595 ValuesMap changes; 597 DOMStorageValuesMap changes;
596 changes[kKey1] = kValueNull; 598 changes[kKey1] = kValueNull;
597 changes[kKey2] = kValue4; 599 changes[kKey2] = kValue4;
598 changes[kKey3] = kValue4; 600 changes[kKey3] = kValue4;
599 reference[kKey2] = kValue4; 601 reference[kKey2] = kValue4;
600 reference[kKey3] = kValue4; 602 reference[kKey3] = kValue4;
601 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, 603 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false,
602 changes)); 604 changes));
603 605
604 // Values in the original map were not changed. 606 // Values in the original map were not changed.
605 CheckAreaData(kNamespace1, kOrigin1, data1); 607 CheckAreaData(kNamespace1, kOrigin1, data1);
606 608
607 // But values in the disassociated map were. 609 // But values in the disassociated map were.
608 CheckAreaData(kNamespaceClone, kOrigin1, reference); 610 CheckAreaData(kNamespaceClone, kOrigin1, reference);
609 } 611 }
610 612
611 TEST_F(SessionStorageDatabaseTest, DeleteNamespace) { 613 TEST_F(SessionStorageDatabaseTest, DeleteNamespace) {
612 ValuesMap data1; 614 DOMStorageValuesMap data1;
613 data1[kKey1] = kValue1; 615 data1[kKey1] = kValue1;
614 data1[kKey2] = kValue2; 616 data1[kKey2] = kValue2;
615 data1[kKey3] = kValue3; 617 data1[kKey3] = kValue3;
616 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 618 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
617 ValuesMap data2; 619 DOMStorageValuesMap data2;
618 data2[kKey2] = kValue4; 620 data2[kKey2] = kValue4;
619 data2[kKey3] = kValue3; 621 data2[kKey3] = kValue3;
620 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 622 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
621 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); 623 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1));
622 CheckDatabaseConsistency(); 624 CheckDatabaseConsistency();
623 CheckEmptyDatabase(); 625 CheckEmptyDatabase();
624 } 626 }
625 627
626 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceWithShallowCopy) { 628 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceWithShallowCopy) {
627 // Write data for a namespace, for 2 origins. 629 // Write data for a namespace, for 2 origins.
628 ValuesMap data1; 630 DOMStorageValuesMap data1;
629 data1[kKey1] = kValue1; 631 data1[kKey1] = kValue1;
630 data1[kKey2] = kValue2; 632 data1[kKey2] = kValue2;
631 data1[kKey3] = kValue3; 633 data1[kKey3] = kValue3;
632 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 634 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
633 ValuesMap data2; 635 DOMStorageValuesMap data2;
634 data2[kKey1] = kValue2; 636 data2[kKey1] = kValue2;
635 data2[kKey3] = kValue1; 637 data2[kKey3] = kValue1;
636 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 638 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
637 639
638 // Make a shallow copy and delete the original namespace. 640 // Make a shallow copy and delete the original namespace.
639 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 641 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
640 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); 642 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1));
641 643
642 // The original namespace has no data. 644 // The original namespace has no data.
643 CheckDatabaseConsistency(); 645 CheckDatabaseConsistency();
644 CheckAreaData(kNamespace1, kOrigin1, ValuesMap()); 646 CheckAreaData(kNamespace1, kOrigin1, DOMStorageValuesMap());
645 CheckAreaData(kNamespace1, kOrigin2, ValuesMap()); 647 CheckAreaData(kNamespace1, kOrigin2, DOMStorageValuesMap());
646 // But the copy persists. 648 // But the copy persists.
647 CheckAreaData(kNamespaceClone, kOrigin1, data1); 649 CheckAreaData(kNamespaceClone, kOrigin1, data1);
648 CheckAreaData(kNamespaceClone, kOrigin2, data2); 650 CheckAreaData(kNamespaceClone, kOrigin2, data2);
649 } 651 }
650 652
651 TEST_F(SessionStorageDatabaseTest, DeleteArea) { 653 TEST_F(SessionStorageDatabaseTest, DeleteArea) {
652 // Write data for a namespace, for 2 origins. 654 // Write data for a namespace, for 2 origins.
653 ValuesMap data1; 655 DOMStorageValuesMap data1;
654 data1[kKey1] = kValue1; 656 data1[kKey1] = kValue1;
655 data1[kKey2] = kValue2; 657 data1[kKey2] = kValue2;
656 data1[kKey3] = kValue3; 658 data1[kKey3] = kValue3;
657 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 659 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
658 ValuesMap data2; 660 DOMStorageValuesMap data2;
659 data2[kKey1] = kValue2; 661 data2[kKey1] = kValue2;
660 data2[kKey3] = kValue1; 662 data2[kKey3] = kValue1;
661 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 663 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
662 664
663 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); 665 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2));
664 CheckDatabaseConsistency(); 666 CheckDatabaseConsistency();
665 // The data for the non-deleted origin persists. 667 // The data for the non-deleted origin persists.
666 CheckAreaData(kNamespace1, kOrigin1, data1); 668 CheckAreaData(kNamespace1, kOrigin1, data1);
667 // The data for the deleted origin is gone. 669 // The data for the deleted origin is gone.
668 CheckAreaData(kNamespace1, kOrigin2, ValuesMap()); 670 CheckAreaData(kNamespace1, kOrigin2, DOMStorageValuesMap());
669 } 671 }
670 672
671 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) { 673 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) {
672 // Write data for a namespace, for 2 origins. 674 // Write data for a namespace, for 2 origins.
673 ValuesMap data1; 675 DOMStorageValuesMap data1;
674 data1[kKey1] = kValue1; 676 data1[kKey1] = kValue1;
675 data1[kKey2] = kValue2; 677 data1[kKey2] = kValue2;
676 data1[kKey3] = kValue3; 678 data1[kKey3] = kValue3;
677 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 679 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
678 ValuesMap data2; 680 DOMStorageValuesMap data2;
679 data2[kKey1] = kValue2; 681 data2[kKey1] = kValue2;
680 data2[kKey3] = kValue1; 682 data2[kKey3] = kValue1;
681 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 683 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
682 684
683 // Make a shallow copy and delete an origin from the original namespace. 685 // Make a shallow copy and delete an origin from the original namespace.
684 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 686 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
685 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); 687 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1));
686 CheckDatabaseConsistency(); 688 CheckDatabaseConsistency();
687 689
688 // The original namespace has data for only the non-deleted origin. 690 // The original namespace has data for only the non-deleted origin.
689 CheckAreaData(kNamespace1, kOrigin1, ValuesMap()); 691 CheckAreaData(kNamespace1, kOrigin1, DOMStorageValuesMap());
690 CheckAreaData(kNamespace1, kOrigin2, data2); 692 CheckAreaData(kNamespace1, kOrigin2, data2);
691 // But the copy persists. 693 // But the copy persists.
692 CheckAreaData(kNamespaceClone, kOrigin1, data1); 694 CheckAreaData(kNamespaceClone, kOrigin1, data1);
693 CheckAreaData(kNamespaceClone, kOrigin2, data2); 695 CheckAreaData(kNamespaceClone, kOrigin2, data2);
694 } 696 }
695 697
696 TEST_F(SessionStorageDatabaseTest, WriteRawBytes) { 698 TEST_F(SessionStorageDatabaseTest, WriteRawBytes) {
697 // Write data which is not valid utf8 and contains null bytes. 699 // Write data which is not valid utf8 and contains null bytes.
698 unsigned char raw_data[10] = {255, 0, 0, 0, 1, 2, 3, 4, 5, 0}; 700 unsigned char raw_data[10] = {255, 0, 0, 0, 1, 2, 3, 4, 5, 0};
699 ValuesMap changes; 701 DOMStorageValuesMap changes;
700 base::string16 string_with_raw_data; 702 base::string16 string_with_raw_data;
701 string_with_raw_data.assign(reinterpret_cast<char16*>(raw_data), 5); 703 string_with_raw_data.assign(reinterpret_cast<char16*>(raw_data), 5);
702 changes[kKey1] = base::NullableString16(string_with_raw_data, false); 704 changes[kKey1] = base::NullableString16(string_with_raw_data, false);
703 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); 705 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes));
704 CheckDatabaseConsistency(); 706 CheckDatabaseConsistency();
705 ValuesMap values; 707 DOMStorageValuesMap values;
706 db_->ReadAreaValues(kNamespace1, kOrigin1, &values); 708 db_->ReadAreaValues(kNamespace1, kOrigin1, &values);
707 const unsigned char* data = 709 const unsigned char* data =
708 reinterpret_cast<const unsigned char*>(values[kKey1].string().data()); 710 reinterpret_cast<const unsigned char*>(values[kKey1].string().data());
709 for (int i = 0; i < 10; ++i) 711 for (int i = 0; i < 10; ++i)
710 EXPECT_EQ(raw_data[i], data[i]); 712 EXPECT_EQ(raw_data[i], data[i]);
711 } 713 }
712 714
713 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceConfusion) { 715 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceConfusion) {
714 // Regression test for a bug where a namespace with id 10 prevented deleting 716 // Regression test for a bug where a namespace with id 10 prevented deleting
715 // the namespace with id 1. 717 // the namespace with id 1.
716 718
717 ValuesMap data1; 719 DOMStorageValuesMap data1;
718 data1[kKey1] = kValue1; 720 data1[kKey1] = kValue1;
719 ASSERT_TRUE(db_->CommitAreaChanges("foobar", kOrigin1, false, data1)); 721 ASSERT_TRUE(db_->CommitAreaChanges("foobar", kOrigin1, false, data1));
720 ASSERT_TRUE(db_->CommitAreaChanges("foobarbaz", kOrigin1, false, data1)); 722 ASSERT_TRUE(db_->CommitAreaChanges("foobarbaz", kOrigin1, false, data1));
721 723
722 // Delete the namespace with ID 1. 724 // Delete the namespace with ID 1.
723 EXPECT_TRUE(db_->DeleteNamespace("foobar")); 725 EXPECT_TRUE(db_->DeleteNamespace("foobar"));
724 } 726 }
725 727
726 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIds) { 728 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIds) {
727 ValuesMap data1; 729 DOMStorageValuesMap data1;
728 data1[kKey1] = kValue1; 730 data1[kKey1] = kValue1;
729 data1[kKey2] = kValue2; 731 data1[kKey2] = kValue2;
730 data1[kKey3] = kValue3; 732 data1[kKey3] = kValue3;
731 std::set<std::string> expected_namespace_ids; 733 std::set<std::string> expected_namespace_ids;
732 734
733 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 735 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
734 expected_namespace_ids.insert(kNamespace1); 736 expected_namespace_ids.insert(kNamespace1);
735 CheckNamespaceIds(expected_namespace_ids); 737 CheckNamespaceIds(expected_namespace_ids);
736 738
737 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 739 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
738 expected_namespace_ids.insert(kNamespaceClone); 740 expected_namespace_ids.insert(kNamespaceClone);
739 CheckNamespaceIds(expected_namespace_ids); 741 CheckNamespaceIds(expected_namespace_ids);
740 742
741 ASSERT_TRUE(db_->DeleteNamespace(kNamespace1)); 743 ASSERT_TRUE(db_->DeleteNamespace(kNamespace1));
742 expected_namespace_ids.erase(kNamespace1); 744 expected_namespace_ids.erase(kNamespace1);
743 CheckNamespaceIds(expected_namespace_ids); 745 CheckNamespaceIds(expected_namespace_ids);
744 746
745 CheckDatabaseConsistency(); 747 CheckDatabaseConsistency();
746 } 748 }
747 749
748 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIdsInEmptyDatabase) { 750 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIdsInEmptyDatabase) {
749 std::set<std::string> expected_namespace_ids; 751 std::set<std::string> expected_namespace_ids;
750 CheckNamespaceIds(expected_namespace_ids); 752 CheckNamespaceIds(expected_namespace_ids);
751 } 753 }
752 754
753 TEST_F(SessionStorageDatabaseTest, ReadOriginsInNamespace) { 755 TEST_F(SessionStorageDatabaseTest, ReadOriginsInNamespace) {
754 ValuesMap data1; 756 DOMStorageValuesMap data1;
755 data1[kKey1] = kValue1; 757 data1[kKey1] = kValue1;
756 data1[kKey2] = kValue2; 758 data1[kKey2] = kValue2;
757 data1[kKey3] = kValue3; 759 data1[kKey3] = kValue3;
758 760
759 std::set<GURL> expected_origins1; 761 std::set<GURL> expected_origins1;
760 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 762 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
761 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data1)); 763 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data1));
762 expected_origins1.insert(kOrigin1); 764 expected_origins1.insert(kOrigin1);
763 expected_origins1.insert(kOrigin2); 765 expected_origins1.insert(kOrigin2);
764 CheckOrigins(kNamespace1, expected_origins1); 766 CheckOrigins(kNamespace1, expected_origins1);
765 767
766 std::set<GURL> expected_origins2; 768 std::set<GURL> expected_origins2;
767 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data1)); 769 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data1));
768 expected_origins2.insert(kOrigin2); 770 expected_origins2.insert(kOrigin2);
769 CheckOrigins(kNamespace2, expected_origins2); 771 CheckOrigins(kNamespace2, expected_origins2);
770 772
771 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); 773 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone));
772 CheckOrigins(kNamespaceClone, expected_origins1); 774 CheckOrigins(kNamespaceClone, expected_origins1);
773 775
774 ASSERT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); 776 ASSERT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2));
775 expected_origins1.erase(kOrigin2); 777 expected_origins1.erase(kOrigin2);
776 CheckOrigins(kNamespace1, expected_origins1); 778 CheckOrigins(kNamespace1, expected_origins1);
777 779
778 CheckDatabaseConsistency(); 780 CheckDatabaseConsistency();
779 } 781 }
780 782
781 TEST_F(SessionStorageDatabaseTest, DeleteAllOrigins) { 783 TEST_F(SessionStorageDatabaseTest, DeleteAllOrigins) {
782 // Write data for a namespace, for 2 origins. 784 // Write data for a namespace, for 2 origins.
783 ValuesMap data1; 785 DOMStorageValuesMap data1;
784 data1[kKey1] = kValue1; 786 data1[kKey1] = kValue1;
785 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); 787 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1));
786 ValuesMap data2; 788 DOMStorageValuesMap data2;
787 data2[kKey1] = kValue2; 789 data2[kKey1] = kValue2;
788 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); 790 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2));
789 791
790 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); 792 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1));
791 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); 793 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2));
792 // Check that also the namespace start key was deleted. 794 // Check that also the namespace start key was deleted.
793 CheckDatabaseConsistency(); 795 CheckDatabaseConsistency();
794 } 796 }
795 797
796 798
797 } // namespace dom_storage 799 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698