| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 class DatabaseTracker_TestHelper_Test { | 195 class DatabaseTracker_TestHelper_Test { |
| 196 public: | 196 public: |
| 197 static void TestDeleteOpenDatabase(bool incognito_mode) { | 197 static void TestDeleteOpenDatabase(bool incognito_mode) { |
| 198 // Initialize the tracker database. | 198 // Initialize the tracker database. |
| 199 base::ScopedTempDir temp_dir; | 199 base::ScopedTempDir temp_dir; |
| 200 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 200 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 201 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 201 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 202 new MockSpecialStoragePolicy; | 202 new MockSpecialStoragePolicy; |
| 203 special_storage_policy->AddProtected(GURL(kOrigin2Url)); | 203 special_storage_policy->AddProtected(GURL(kOrigin2Url)); |
| 204 scoped_refptr<DatabaseTracker> tracker( | 204 scoped_refptr<DatabaseTracker> tracker( |
| 205 new DatabaseTracker(temp_dir.path(), | 205 new DatabaseTracker(temp_dir.GetPath(), incognito_mode, |
| 206 incognito_mode, | 206 special_storage_policy.get(), NULL, NULL)); |
| 207 special_storage_policy.get(), | |
| 208 NULL, | |
| 209 NULL)); | |
| 210 | 207 |
| 211 // Create and open three databases. | 208 // Create and open three databases. |
| 212 int64_t database_size = 0; | 209 int64_t database_size = 0; |
| 213 const std::string kOrigin1 = | 210 const std::string kOrigin1 = |
| 214 storage::GetIdentifierFromOrigin(GURL(kOrigin1Url)); | 211 storage::GetIdentifierFromOrigin(GURL(kOrigin1Url)); |
| 215 const std::string kOrigin2 = | 212 const std::string kOrigin2 = |
| 216 storage::GetIdentifierFromOrigin(GURL(kOrigin2Url)); | 213 storage::GetIdentifierFromOrigin(GURL(kOrigin2Url)); |
| 217 const base::string16 kDB1 = ASCIIToUTF16("db1"); | 214 const base::string16 kDB1 = ASCIIToUTF16("db1"); |
| 218 const base::string16 kDB2 = ASCIIToUTF16("db2"); | 215 const base::string16 kDB2 = ASCIIToUTF16("db2"); |
| 219 const base::string16 kDB3 = ASCIIToUTF16("db3"); | 216 const base::string16 kDB3 = ASCIIToUTF16("db3"); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 } | 300 } |
| 304 | 301 |
| 305 static void TestDatabaseTracker(bool incognito_mode) { | 302 static void TestDatabaseTracker(bool incognito_mode) { |
| 306 // Initialize the tracker database. | 303 // Initialize the tracker database. |
| 307 base::ScopedTempDir temp_dir; | 304 base::ScopedTempDir temp_dir; |
| 308 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 305 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 309 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 306 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 310 new MockSpecialStoragePolicy; | 307 new MockSpecialStoragePolicy; |
| 311 special_storage_policy->AddProtected(GURL(kOrigin2Url)); | 308 special_storage_policy->AddProtected(GURL(kOrigin2Url)); |
| 312 scoped_refptr<DatabaseTracker> tracker( | 309 scoped_refptr<DatabaseTracker> tracker( |
| 313 new DatabaseTracker(temp_dir.path(), | 310 new DatabaseTracker(temp_dir.GetPath(), incognito_mode, |
| 314 incognito_mode, | 311 special_storage_policy.get(), NULL, NULL)); |
| 315 special_storage_policy.get(), | |
| 316 NULL, | |
| 317 NULL)); | |
| 318 | 312 |
| 319 // Add two observers. | 313 // Add two observers. |
| 320 TestObserver observer1; | 314 TestObserver observer1; |
| 321 TestObserver observer2; | 315 TestObserver observer2; |
| 322 tracker->AddObserver(&observer1); | 316 tracker->AddObserver(&observer1); |
| 323 tracker->AddObserver(&observer2); | 317 tracker->AddObserver(&observer2); |
| 324 | 318 |
| 325 // Open three new databases. | 319 // Open three new databases. |
| 326 int64_t database_size = 0; | 320 int64_t database_size = 0; |
| 327 const std::string kOrigin1 = | 321 const std::string kOrigin1 = |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 const base::string16 kName = ASCIIToUTF16("name"); | 450 const base::string16 kName = ASCIIToUTF16("name"); |
| 457 const base::string16 kDescription = ASCIIToUTF16("description"); | 451 const base::string16 kDescription = ASCIIToUTF16("description"); |
| 458 | 452 |
| 459 base::ScopedTempDir temp_dir; | 453 base::ScopedTempDir temp_dir; |
| 460 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 454 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 461 | 455 |
| 462 // Initialize the tracker with a QuotaManagerProxy | 456 // Initialize the tracker with a QuotaManagerProxy |
| 463 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( | 457 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( |
| 464 new TestQuotaManagerProxy); | 458 new TestQuotaManagerProxy); |
| 465 scoped_refptr<DatabaseTracker> tracker( | 459 scoped_refptr<DatabaseTracker> tracker( |
| 466 new DatabaseTracker(temp_dir.path(), | 460 new DatabaseTracker(temp_dir.GetPath(), false /* incognito */, NULL, |
| 467 false /* incognito */, | 461 test_quota_proxy.get(), NULL)); |
| 468 NULL, | |
| 469 test_quota_proxy.get(), | |
| 470 NULL)); | |
| 471 EXPECT_TRUE(test_quota_proxy->registered_client_); | 462 EXPECT_TRUE(test_quota_proxy->registered_client_); |
| 472 | 463 |
| 473 // Create a database and modify it a couple of times, close it, | 464 // Create a database and modify it a couple of times, close it, |
| 474 // then delete it. Observe the tracker notifies accordingly. | 465 // then delete it. Observe the tracker notifies accordingly. |
| 475 | 466 |
| 476 int64_t database_size = 0; | 467 int64_t database_size = 0; |
| 477 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 468 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, |
| 478 &database_size); | 469 &database_size); |
| 479 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 470 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 480 test_quota_proxy->reset(); | 471 test_quota_proxy->reset(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 561 base::MessageLoop message_loop; | 552 base::MessageLoop message_loop; |
| 562 base::ScopedTempDir temp_dir; | 553 base::ScopedTempDir temp_dir; |
| 563 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 554 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 564 base::FilePath origin1_db_dir; | 555 base::FilePath origin1_db_dir; |
| 565 base::FilePath origin2_db_dir; | 556 base::FilePath origin2_db_dir; |
| 566 { | 557 { |
| 567 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 558 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 568 new MockSpecialStoragePolicy; | 559 new MockSpecialStoragePolicy; |
| 569 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); | 560 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
| 570 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( | 561 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 571 temp_dir.path(), false, special_storage_policy.get(), NULL, | 562 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, |
| 572 base::ThreadTaskRunnerHandle::Get().get())); | 563 base::ThreadTaskRunnerHandle::Get().get())); |
| 573 | 564 |
| 574 // Open two new databases. | 565 // Open two new databases. |
| 575 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 566 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 576 &database_size); | 567 &database_size); |
| 577 EXPECT_EQ(0, database_size); | 568 EXPECT_EQ(0, database_size); |
| 578 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 569 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 579 &database_size); | 570 &database_size); |
| 580 EXPECT_EQ(0, database_size); | 571 EXPECT_EQ(0, database_size); |
| 581 | 572 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 598 | 589 |
| 599 // Close all databases. | 590 // Close all databases. |
| 600 tracker->DatabaseClosed(kOrigin1, kDB1); | 591 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 601 tracker->DatabaseClosed(kOrigin2, kDB2); | 592 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 602 | 593 |
| 603 tracker->Shutdown(); | 594 tracker->Shutdown(); |
| 604 } | 595 } |
| 605 | 596 |
| 606 // At this point, the database tracker should be gone. Create a new one. | 597 // At this point, the database tracker should be gone. Create a new one. |
| 607 scoped_refptr<DatabaseTracker> tracker( | 598 scoped_refptr<DatabaseTracker> tracker( |
| 608 new DatabaseTracker(temp_dir.path(), false, NULL, NULL, NULL)); | 599 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); |
| 609 | 600 |
| 610 // Get all data for all origins. | 601 // Get all data for all origins. |
| 611 std::vector<OriginInfo> origins_info; | 602 std::vector<OriginInfo> origins_info; |
| 612 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 603 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 613 // kOrigin1 was not session-only, so it survived. kOrigin2 was session-only | 604 // kOrigin1 was not session-only, so it survived. kOrigin2 was session-only |
| 614 // and it got deleted. | 605 // and it got deleted. |
| 615 EXPECT_EQ(size_t(1), origins_info.size()); | 606 EXPECT_EQ(size_t(1), origins_info.size()); |
| 616 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); | 607 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); |
| 617 EXPECT_TRUE( | 608 EXPECT_TRUE( |
| 618 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); | 609 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 638 base::MessageLoop message_loop; | 629 base::MessageLoop message_loop; |
| 639 base::ScopedTempDir temp_dir; | 630 base::ScopedTempDir temp_dir; |
| 640 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 631 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 641 base::FilePath origin1_db_dir; | 632 base::FilePath origin1_db_dir; |
| 642 base::FilePath origin2_db_dir; | 633 base::FilePath origin2_db_dir; |
| 643 { | 634 { |
| 644 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 635 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 645 new MockSpecialStoragePolicy; | 636 new MockSpecialStoragePolicy; |
| 646 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); | 637 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
| 647 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( | 638 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 648 temp_dir.path(), false, special_storage_policy.get(), NULL, | 639 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, |
| 649 base::ThreadTaskRunnerHandle::Get().get())); | 640 base::ThreadTaskRunnerHandle::Get().get())); |
| 650 tracker->SetForceKeepSessionState(); | 641 tracker->SetForceKeepSessionState(); |
| 651 | 642 |
| 652 // Open two new databases. | 643 // Open two new databases. |
| 653 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 644 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 654 &database_size); | 645 &database_size); |
| 655 EXPECT_EQ(0, database_size); | 646 EXPECT_EQ(0, database_size); |
| 656 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 647 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 657 &database_size); | 648 &database_size); |
| 658 EXPECT_EQ(0, database_size); | 649 EXPECT_EQ(0, database_size); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 676 | 667 |
| 677 // Close all databases. | 668 // Close all databases. |
| 678 tracker->DatabaseClosed(kOrigin1, kDB1); | 669 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 679 tracker->DatabaseClosed(kOrigin2, kDB2); | 670 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 680 | 671 |
| 681 tracker->Shutdown(); | 672 tracker->Shutdown(); |
| 682 } | 673 } |
| 683 | 674 |
| 684 // At this point, the database tracker should be gone. Create a new one. | 675 // At this point, the database tracker should be gone. Create a new one. |
| 685 scoped_refptr<DatabaseTracker> tracker( | 676 scoped_refptr<DatabaseTracker> tracker( |
| 686 new DatabaseTracker(temp_dir.path(), false, NULL, NULL, NULL)); | 677 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); |
| 687 | 678 |
| 688 // Get all data for all origins. | 679 // Get all data for all origins. |
| 689 std::vector<OriginInfo> origins_info; | 680 std::vector<OriginInfo> origins_info; |
| 690 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 681 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 691 // No origins were deleted. | 682 // No origins were deleted. |
| 692 EXPECT_EQ(size_t(2), origins_info.size()); | 683 EXPECT_EQ(size_t(2), origins_info.size()); |
| 693 EXPECT_TRUE( | 684 EXPECT_TRUE( |
| 694 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); | 685 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| 695 EXPECT_TRUE( | 686 EXPECT_TRUE( |
| 696 base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); | 687 base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| 697 | 688 |
| 698 EXPECT_TRUE(base::PathExists(origin1_db_dir)); | 689 EXPECT_TRUE(base::PathExists(origin1_db_dir)); |
| 699 EXPECT_TRUE(base::PathExists(origin2_db_dir)); | 690 EXPECT_TRUE(base::PathExists(origin2_db_dir)); |
| 700 } | 691 } |
| 701 | 692 |
| 702 static void EmptyDatabaseNameIsValid() { | 693 static void EmptyDatabaseNameIsValid() { |
| 703 const GURL kOrigin(kOrigin1Url); | 694 const GURL kOrigin(kOrigin1Url); |
| 704 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); | 695 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); |
| 705 const base::string16 kEmptyName; | 696 const base::string16 kEmptyName; |
| 706 const base::string16 kDescription(ASCIIToUTF16("description")); | 697 const base::string16 kDescription(ASCIIToUTF16("description")); |
| 707 const base::string16 kChangedDescription( | 698 const base::string16 kChangedDescription( |
| 708 ASCIIToUTF16("changed_description")); | 699 ASCIIToUTF16("changed_description")); |
| 709 | 700 |
| 710 // Initialize a tracker database, no need to put it on disk. | 701 // Initialize a tracker database, no need to put it on disk. |
| 711 const bool kUseInMemoryTrackerDatabase = true; | 702 const bool kUseInMemoryTrackerDatabase = true; |
| 712 base::ScopedTempDir temp_dir; | 703 base::ScopedTempDir temp_dir; |
| 713 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 704 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 714 scoped_refptr<DatabaseTracker> tracker( | 705 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 715 new DatabaseTracker(temp_dir.path(), kUseInMemoryTrackerDatabase, | 706 temp_dir.GetPath(), kUseInMemoryTrackerDatabase, NULL, NULL, NULL)); |
| 716 NULL, NULL, NULL)); | |
| 717 | 707 |
| 718 // Starts off with no databases. | 708 // Starts off with no databases. |
| 719 std::vector<OriginInfo> infos; | 709 std::vector<OriginInfo> infos; |
| 720 EXPECT_TRUE(tracker->GetAllOriginsInfo(&infos)); | 710 EXPECT_TRUE(tracker->GetAllOriginsInfo(&infos)); |
| 721 EXPECT_TRUE(infos.empty()); | 711 EXPECT_TRUE(infos.empty()); |
| 722 | 712 |
| 723 // Create a db with an empty name. | 713 // Create a db with an empty name. |
| 724 int64_t database_size = -1; | 714 int64_t database_size = -1; |
| 725 tracker->DatabaseOpened(kOriginId, kEmptyName, kDescription, 0, | 715 tracker->DatabaseOpened(kOriginId, kEmptyName, kDescription, 0, |
| 726 &database_size); | 716 &database_size); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 750 static void HandleSqliteError() { | 740 static void HandleSqliteError() { |
| 751 const GURL kOrigin(kOrigin1Url); | 741 const GURL kOrigin(kOrigin1Url); |
| 752 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); | 742 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); |
| 753 const base::string16 kName(ASCIIToUTF16("name")); | 743 const base::string16 kName(ASCIIToUTF16("name")); |
| 754 const base::string16 kDescription(ASCIIToUTF16("description")); | 744 const base::string16 kDescription(ASCIIToUTF16("description")); |
| 755 | 745 |
| 756 // Initialize a tracker database, no need to put it on disk. | 746 // Initialize a tracker database, no need to put it on disk. |
| 757 const bool kUseInMemoryTrackerDatabase = true; | 747 const bool kUseInMemoryTrackerDatabase = true; |
| 758 base::ScopedTempDir temp_dir; | 748 base::ScopedTempDir temp_dir; |
| 759 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 749 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 760 scoped_refptr<DatabaseTracker> tracker( | 750 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 761 new DatabaseTracker(temp_dir.path(), kUseInMemoryTrackerDatabase, | 751 temp_dir.GetPath(), kUseInMemoryTrackerDatabase, NULL, NULL, NULL)); |
| 762 NULL, NULL, NULL)); | |
| 763 | 752 |
| 764 // Setup to observe OnScheduledForDelete notifications. | 753 // Setup to observe OnScheduledForDelete notifications. |
| 765 TestObserver observer(false, true); | 754 TestObserver observer(false, true); |
| 766 tracker->AddObserver(&observer); | 755 tracker->AddObserver(&observer); |
| 767 | 756 |
| 768 // Verify does no harm when there is no such database. | 757 // Verify does no harm when there is no such database. |
| 769 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); | 758 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); |
| 770 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); | 759 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); |
| 771 EXPECT_FALSE(observer.DidReceiveNewNotification()); | 760 EXPECT_FALSE(observer.DidReceiveNewNotification()); |
| 772 | 761 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 | 846 |
| 858 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { | 847 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { |
| 859 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); | 848 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); |
| 860 } | 849 } |
| 861 | 850 |
| 862 TEST(DatabaseTrackerTest, HandleSqliteError) { | 851 TEST(DatabaseTrackerTest, HandleSqliteError) { |
| 863 DatabaseTracker_TestHelper_Test::HandleSqliteError(); | 852 DatabaseTracker_TestHelper_Test::HandleSqliteError(); |
| 864 } | 853 } |
| 865 | 854 |
| 866 } // namespace content | 855 } // namespace content |
| OLD | NEW |