| 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 |