OLD | NEW |
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 #include "webkit/dom_storage/session_storage_database.h" | 5 #include "webkit/dom_storage/session_storage_database.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 ValuesMap data1; | 458 ValuesMap data1; |
459 data1[kKey1] = kValue1; | 459 data1[kKey1] = kValue1; |
460 data1[kKey2] = kValue2; | 460 data1[kKey2] = kValue2; |
461 data1[kKey3] = kValue3; | 461 data1[kKey3] = kValue3; |
462 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 462 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
463 ValuesMap data2; | 463 ValuesMap data2; |
464 data2[kKey1] = kValue2; | 464 data2[kKey1] = kValue2; |
465 data2[kKey3] = kValue1; | 465 data2[kKey3] = kValue1; |
466 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); | 466 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); |
467 // Make a shallow copy. | 467 // Make a shallow copy. |
468 EXPECT_TRUE(db_->CloneNamespace(1, 5)); | 468 db_->CloneNamespace(1, 5); |
469 // Now both namespaces should have the same data. | 469 // Now both namespaces should have the same data. |
470 CheckDatabaseConsistency(); | 470 CheckDatabaseConsistency(); |
471 CheckAreaData(1, kOrigin1, data1); | 471 CheckAreaData(1, kOrigin1, data1); |
472 CheckAreaData(1, kOrigin2, data2); | 472 CheckAreaData(1, kOrigin2, data2); |
473 CheckAreaData(5, kOrigin1, data1); | 473 CheckAreaData(5, kOrigin1, data1); |
474 CheckAreaData(5, kOrigin2, data2); | 474 CheckAreaData(5, kOrigin2, data2); |
475 // Both the namespaces refer to the same maps. | 475 // Both the namespaces refer to the same maps. |
476 EXPECT_EQ(GetMapForArea(1, kOrigin1), GetMapForArea(5, kOrigin1)); | 476 EXPECT_EQ(GetMapForArea(1, kOrigin1), GetMapForArea(5, kOrigin1)); |
477 EXPECT_EQ(GetMapForArea(1, kOrigin2), GetMapForArea(5, kOrigin2)); | 477 EXPECT_EQ(GetMapForArea(1, kOrigin2), GetMapForArea(5, kOrigin2)); |
478 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(1, kOrigin1))); | 478 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(1, kOrigin1))); |
479 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(1, kOrigin2))); | 479 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(1, kOrigin2))); |
480 } | 480 } |
481 | 481 |
482 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) { | 482 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) { |
483 ValuesMap data1; | 483 ValuesMap data1; |
484 data1[kKey1] = kValue1; | 484 data1[kKey1] = kValue1; |
485 data1[kKey2] = kValue2; | 485 data1[kKey2] = kValue2; |
486 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 486 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
487 EXPECT_TRUE(db_->CloneNamespace(1, 5)); | 487 db_->CloneNamespace(1, 5); |
488 | 488 |
489 // Write data into a shallow copy. | 489 // Write data into a shallow copy. |
490 ValuesMap changes; | 490 ValuesMap changes; |
491 ValuesMap reference; | 491 ValuesMap reference; |
492 changes[kKey1] = kValueNull; | 492 changes[kKey1] = kValueNull; |
493 changes[kKey2] = kValue4; | 493 changes[kKey2] = kValue4; |
494 changes[kKey3] = kValue4; | 494 changes[kKey3] = kValue4; |
495 reference[kKey2] = kValue4; | 495 reference[kKey2] = kValue4; |
496 reference[kKey3] = kValue4; | 496 reference[kKey3] = kValue4; |
497 EXPECT_TRUE(db_->CommitAreaChanges(5, kOrigin1, false, changes)); | 497 EXPECT_TRUE(db_->CommitAreaChanges(5, kOrigin1, false, changes)); |
(...skipping 15 matching lines...) Expand all Loading... |
513 data1[kKey1] = kValue1; | 513 data1[kKey1] = kValue1; |
514 data1[kKey2] = kValue2; | 514 data1[kKey2] = kValue2; |
515 data1[kKey3] = kValue3; | 515 data1[kKey3] = kValue3; |
516 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 516 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
517 ValuesMap data2; | 517 ValuesMap data2; |
518 data2[kKey1] = kValue2; | 518 data2[kKey1] = kValue2; |
519 data2[kKey3] = kValue1; | 519 data2[kKey3] = kValue1; |
520 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); | 520 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); |
521 | 521 |
522 // Make a two shallow copies. | 522 // Make a two shallow copies. |
523 EXPECT_TRUE(db_->CloneNamespace(1, 5)); | 523 db_->CloneNamespace(1, 5); |
524 EXPECT_TRUE(db_->CloneNamespace(1, 6)); | 524 db_->CloneNamespace(1, 6); |
525 | 525 |
526 // Make a shallow copy of a shallow copy. | 526 // Make a shallow copy of a shallow copy. |
527 EXPECT_TRUE(db_->CloneNamespace(6, 7)); | 527 db_->CloneNamespace(6, 7); |
528 | 528 |
529 // Now all namespaces should have the same data. | 529 // Now all namespaces should have the same data. |
530 CheckDatabaseConsistency(); | 530 CheckDatabaseConsistency(); |
531 CheckAreaData(1, kOrigin1, data1); | 531 CheckAreaData(1, kOrigin1, data1); |
532 CheckAreaData(5, kOrigin1, data1); | 532 CheckAreaData(5, kOrigin1, data1); |
533 CheckAreaData(6, kOrigin1, data1); | 533 CheckAreaData(6, kOrigin1, data1); |
534 CheckAreaData(7, kOrigin1, data1); | 534 CheckAreaData(7, kOrigin1, data1); |
535 CheckAreaData(1, kOrigin2, data2); | 535 CheckAreaData(1, kOrigin2, data2); |
536 CheckAreaData(5, kOrigin2, data2); | 536 CheckAreaData(5, kOrigin2, data2); |
537 CheckAreaData(6, kOrigin2, data2); | 537 CheckAreaData(6, kOrigin2, data2); |
(...skipping 10 matching lines...) Expand all Loading... |
548 // Check the ref counts. | 548 // Check the ref counts. |
549 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(1, kOrigin1))); | 549 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(1, kOrigin1))); |
550 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(1, kOrigin2))); | 550 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(1, kOrigin2))); |
551 } | 551 } |
552 | 552 |
553 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) { | 553 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) { |
554 ValuesMap data1; | 554 ValuesMap data1; |
555 data1[kKey1] = kValue1; | 555 data1[kKey1] = kValue1; |
556 data1[kKey2] = kValue2; | 556 data1[kKey2] = kValue2; |
557 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 557 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
558 EXPECT_TRUE(db_->CloneNamespace(1, 5)); | 558 db_->CloneNamespace(1, 5); |
559 | 559 |
560 // Disassoaciate the shallow copy. | 560 // Disassoaciate the shallow copy. |
561 EXPECT_TRUE(db_->DeleteArea(5, kOrigin1)); | 561 db_->DeleteArea(5, kOrigin1); |
562 CheckDatabaseConsistency(); | 562 CheckDatabaseConsistency(); |
563 | 563 |
564 // Now new data can be written to that map. | 564 // Now new data can be written to that map. |
565 ValuesMap reference; | 565 ValuesMap reference; |
566 ValuesMap changes; | 566 ValuesMap changes; |
567 changes[kKey1] = kValueNull; | 567 changes[kKey1] = kValueNull; |
568 changes[kKey2] = kValue4; | 568 changes[kKey2] = kValue4; |
569 changes[kKey3] = kValue4; | 569 changes[kKey3] = kValue4; |
570 reference[kKey2] = kValue4; | 570 reference[kKey2] = kValue4; |
571 reference[kKey3] = kValue4; | 571 reference[kKey3] = kValue4; |
(...skipping 27 matching lines...) Expand all Loading... |
599 data1[kKey1] = kValue1; | 599 data1[kKey1] = kValue1; |
600 data1[kKey2] = kValue2; | 600 data1[kKey2] = kValue2; |
601 data1[kKey3] = kValue3; | 601 data1[kKey3] = kValue3; |
602 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 602 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
603 ValuesMap data2; | 603 ValuesMap data2; |
604 data2[kKey1] = kValue2; | 604 data2[kKey1] = kValue2; |
605 data2[kKey3] = kValue1; | 605 data2[kKey3] = kValue1; |
606 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); | 606 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); |
607 | 607 |
608 // Make a shallow copy and delete the original namespace. | 608 // Make a shallow copy and delete the original namespace. |
609 EXPECT_TRUE(db_->CloneNamespace(1, 5));; | 609 db_->CloneNamespace(1, 5); |
610 EXPECT_TRUE(db_->DeleteNamespace(1)); | 610 EXPECT_TRUE(db_->DeleteNamespace(1)); |
611 | 611 |
612 // The original namespace has no data. | 612 // The original namespace has no data. |
613 CheckDatabaseConsistency(); | 613 CheckDatabaseConsistency(); |
614 CheckAreaData(1, kOrigin1, ValuesMap()); | 614 CheckAreaData(1, kOrigin1, ValuesMap()); |
615 CheckAreaData(1, kOrigin2, ValuesMap()); | 615 CheckAreaData(1, kOrigin2, ValuesMap()); |
616 // But the copy persists. | 616 // But the copy persists. |
617 CheckAreaData(5, kOrigin1, data1); | 617 CheckAreaData(5, kOrigin1, data1); |
618 CheckAreaData(5, kOrigin2, data2); | 618 CheckAreaData(5, kOrigin2, data2); |
619 } | 619 } |
620 | 620 |
621 TEST_F(SessionStorageDatabaseTest, DeleteArea) { | 621 TEST_F(SessionStorageDatabaseTest, DeleteArea) { |
622 // Write data for a namespace, for 2 origins. | 622 // Write data for a namespace, for 2 origins. |
623 ValuesMap data1; | 623 ValuesMap data1; |
624 data1[kKey1] = kValue1; | 624 data1[kKey1] = kValue1; |
625 data1[kKey2] = kValue2; | 625 data1[kKey2] = kValue2; |
626 data1[kKey3] = kValue3; | 626 data1[kKey3] = kValue3; |
627 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 627 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
628 ValuesMap data2; | 628 ValuesMap data2; |
629 data2[kKey1] = kValue2; | 629 data2[kKey1] = kValue2; |
630 data2[kKey3] = kValue1; | 630 data2[kKey3] = kValue1; |
631 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); | 631 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); |
632 | 632 |
633 EXPECT_TRUE(db_->DeleteArea(1, kOrigin2)); | 633 db_->DeleteArea(1, kOrigin2); |
634 CheckDatabaseConsistency(); | 634 CheckDatabaseConsistency(); |
635 // The data for the non-deleted origin persists. | 635 // The data for the non-deleted origin persists. |
636 CheckAreaData(1, kOrigin1, data1); | 636 CheckAreaData(1, kOrigin1, data1); |
637 // The data for the deleted origin is gone. | 637 // The data for the deleted origin is gone. |
638 CheckAreaData(1, kOrigin2, ValuesMap()); | 638 CheckAreaData(1, kOrigin2, ValuesMap()); |
639 } | 639 } |
640 | 640 |
641 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) { | 641 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) { |
642 // Write data for a namespace, for 2 origins. | 642 // Write data for a namespace, for 2 origins. |
643 ValuesMap data1; | 643 ValuesMap data1; |
644 data1[kKey1] = kValue1; | 644 data1[kKey1] = kValue1; |
645 data1[kKey2] = kValue2; | 645 data1[kKey2] = kValue2; |
646 data1[kKey3] = kValue3; | 646 data1[kKey3] = kValue3; |
647 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); | 647 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data1)); |
648 ValuesMap data2; | 648 ValuesMap data2; |
649 data2[kKey1] = kValue2; | 649 data2[kKey1] = kValue2; |
650 data2[kKey3] = kValue1; | 650 data2[kKey3] = kValue1; |
651 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); | 651 ASSERT_TRUE(db_->CommitAreaChanges(1, kOrigin2, false, data2)); |
652 | 652 |
653 // Make a shallow copy and delete an origin from the original namespace. | 653 // Make a shallow copy and delete an origin from the original namespace. |
654 EXPECT_TRUE(db_->CloneNamespace(1, 5)); | 654 db_->CloneNamespace(1, 5); |
655 EXPECT_TRUE(db_->DeleteArea(1, kOrigin1)); | 655 db_->DeleteArea(1, kOrigin1); |
656 CheckDatabaseConsistency(); | 656 CheckDatabaseConsistency(); |
657 | 657 |
658 // The original namespace has data for only the non-deleted origin. | 658 // The original namespace has data for only the non-deleted origin. |
659 CheckAreaData(1, kOrigin1, ValuesMap()); | 659 CheckAreaData(1, kOrigin1, ValuesMap()); |
660 CheckAreaData(1, kOrigin2, data2); | 660 CheckAreaData(1, kOrigin2, data2); |
661 // But the copy persists. | 661 // But the copy persists. |
662 CheckAreaData(5, kOrigin1, data1); | 662 CheckAreaData(5, kOrigin1, data1); |
663 CheckAreaData(5, kOrigin2, data2); | 663 CheckAreaData(5, kOrigin2, data2); |
664 } | 664 } |
665 | 665 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
737 | 737 |
738 // Close the database and recreate it. | 738 // Close the database and recreate it. |
739 ResetDatabase(); | 739 ResetDatabase(); |
740 | 740 |
741 // Create another namespace with id 1. | 741 // Create another namespace with id 1. |
742 ValuesMap data2; | 742 ValuesMap data2; |
743 data2[kKey1] = kValue3; | 743 data2[kKey1] = kValue3; |
744 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); | 744 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); |
745 | 745 |
746 // Make a shallow copy of the newly created namespace. | 746 // Make a shallow copy of the newly created namespace. |
747 EXPECT_TRUE(db_->CloneNamespace(1, 20)); | 747 db_->CloneNamespace(1, 20); |
748 | 748 |
749 // The clone contains values from the newly created namespace. | 749 // The clone contains values from the newly created namespace. |
750 CheckAreaData(20, kOrigin1, data2); | 750 CheckAreaData(20, kOrigin1, data2); |
751 CheckAreaData(1, kOrigin1, data2); | 751 CheckAreaData(1, kOrigin1, data2); |
752 | 752 |
753 // The values for the old namespace 1 are still accessible via id -1. | 753 // The values for the old namespace 1 are still accessible via id -1. |
754 CheckAreaData(-1, kOrigin1, data1); | 754 CheckAreaData(-1, kOrigin1, data1); |
755 | 755 |
756 // Close the database and recreate it. | 756 // Close the database and recreate it. |
757 ResetDatabase(); | 757 ResetDatabase(); |
(...skipping 13 matching lines...) Expand all Loading... |
771 | 771 |
772 // Close the database and recreate it. | 772 // Close the database and recreate it. |
773 ResetDatabase(); | 773 ResetDatabase(); |
774 | 774 |
775 // Create another namespace with id 1. | 775 // Create another namespace with id 1. |
776 ValuesMap data2; | 776 ValuesMap data2; |
777 data2[kKey1] = kValue3; | 777 data2[kKey1] = kValue3; |
778 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); | 778 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); |
779 | 779 |
780 // Make a shallow copy of the newly created namespace. | 780 // Make a shallow copy of the newly created namespace. |
781 EXPECT_TRUE(db_->CloneNamespace(1, 20)); | 781 db_->CloneNamespace(1, 20); |
782 | 782 |
783 // Now the values can be altered and a deep copy will be made. | 783 // Now the values can be altered and a deep copy will be made. |
784 ValuesMap data3; | 784 ValuesMap data3; |
785 data3[kKey1] = kValue2; | 785 data3[kKey1] = kValue2; |
786 EXPECT_TRUE(db_->CommitAreaChanges(20, kOrigin1, false, data3)); | 786 EXPECT_TRUE(db_->CommitAreaChanges(20, kOrigin1, false, data3)); |
787 | 787 |
788 CheckAreaData(20, kOrigin1, data3); | 788 CheckAreaData(20, kOrigin1, data3); |
789 CheckAreaData(1, kOrigin1, data2); | 789 CheckAreaData(1, kOrigin1, data2); |
790 | 790 |
791 // The values for the old namespace 1 are still accessible via id -1. | 791 // The values for the old namespace 1 are still accessible via id -1. |
(...skipping 17 matching lines...) Expand all Loading... |
809 | 809 |
810 // Close the database and recreate it. | 810 // Close the database and recreate it. |
811 ResetDatabase(); | 811 ResetDatabase(); |
812 | 812 |
813 // Create another namespace with id 1. | 813 // Create another namespace with id 1. |
814 ValuesMap data2; | 814 ValuesMap data2; |
815 data2[kKey1] = kValue3; | 815 data2[kKey1] = kValue3; |
816 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); | 816 EXPECT_TRUE(db_->CommitAreaChanges(1, kOrigin1, false, data2)); |
817 | 817 |
818 // Delete kOrigin1 from the newly created namespace. | 818 // Delete kOrigin1 from the newly created namespace. |
819 EXPECT_TRUE(db_->DeleteArea(1, kOrigin1)); | 819 db_->DeleteArea(1, kOrigin1); |
820 | 820 |
821 // Namespace 1 is empty. | 821 // Namespace 1 is empty. |
822 CheckAreaData(1, kOrigin1, ValuesMap()); | 822 CheckAreaData(1, kOrigin1, ValuesMap()); |
823 | 823 |
824 // The values for the old namespace 1 are still accessible via id -1. | 824 // The values for the old namespace 1 are still accessible via id -1. |
825 CheckAreaData(-1, kOrigin1, data1); | 825 CheckAreaData(-1, kOrigin1, data1); |
826 } | 826 } |
827 | 827 |
828 TEST_F(SessionStorageDatabaseTest, NamespaceOffsetDeleteNamespace) { | 828 TEST_F(SessionStorageDatabaseTest, NamespaceOffsetDeleteNamespace) { |
829 // Create a namespace with id 1. | 829 // Create a namespace with id 1. |
(...skipping 14 matching lines...) Expand all Loading... |
844 EXPECT_TRUE(db_->DeleteNamespace(1)); | 844 EXPECT_TRUE(db_->DeleteNamespace(1)); |
845 | 845 |
846 // Namespace 1 is empty. | 846 // Namespace 1 is empty. |
847 CheckAreaData(1, kOrigin1, ValuesMap()); | 847 CheckAreaData(1, kOrigin1, ValuesMap()); |
848 | 848 |
849 // The values for the old namespace 1 are still accessible via id -1. | 849 // The values for the old namespace 1 are still accessible via id -1. |
850 CheckAreaData(-1, kOrigin1, data1); | 850 CheckAreaData(-1, kOrigin1, data1); |
851 } | 851 } |
852 | 852 |
853 } // namespace dom_storage | 853 } // namespace dom_storage |
OLD | NEW |