| 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 "base/file_path.h" | 5 #include "base/file_path.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/message_loop_proxy.h" | 8 #include "base/message_loop_proxy.h" |
| 9 #include "base/platform_file.h" | 9 #include "base/platform_file.h" |
| 10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 crashed_renderer_connections.AddConnection(kOriginId, kName); | 521 crashed_renderer_connections.AddConnection(kOriginId, kName); |
| 522 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 522 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 523 tracker->CloseDatabases(crashed_renderer_connections); | 523 tracker->CloseDatabases(crashed_renderer_connections); |
| 524 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 524 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 525 | 525 |
| 526 // Cleanup. | 526 // Cleanup. |
| 527 crashed_renderer_connections.RemoveAllConnections(); | 527 crashed_renderer_connections.RemoveAllConnections(); |
| 528 test_quota_proxy->SimulateQuotaManagerDestroyed(); | 528 test_quota_proxy->SimulateQuotaManagerDestroyed(); |
| 529 } | 529 } |
| 530 | 530 |
| 531 static void DatabaseTrackerClearLocalStateOnExit() { | |
| 532 int64 database_size = 0; | |
| 533 const string16 kOrigin1 = | |
| 534 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | |
| 535 const string16 kOrigin2 = | |
| 536 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | |
| 537 const string16 kDB1 = ASCIIToUTF16("db1"); | |
| 538 const string16 kDB2 = ASCIIToUTF16("db2"); | |
| 539 const string16 kDB3 = ASCIIToUTF16("db3"); | |
| 540 const string16 kDescription = ASCIIToUTF16("database_description"); | |
| 541 | |
| 542 // Initialize the tracker database. | |
| 543 ScopedTempDir temp_dir; | |
| 544 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| 545 FilePath origin1_db_dir; | |
| 546 { | |
| 547 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = | |
| 548 new quota::MockSpecialStoragePolicy; | |
| 549 special_storage_policy->AddProtected(GURL(kOrigin2Url)); | |
| 550 scoped_refptr<DatabaseTracker> tracker( | |
| 551 new DatabaseTracker( | |
| 552 temp_dir.path(), false, | |
| 553 special_storage_policy, NULL, | |
| 554 base::MessageLoopProxy::current())); | |
| 555 tracker->SetClearLocalStateOnExit(true); | |
| 556 | |
| 557 // Open three new databases. | |
| 558 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | |
| 559 &database_size); | |
| 560 EXPECT_EQ(0, database_size); | |
| 561 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | |
| 562 &database_size); | |
| 563 EXPECT_EQ(0, database_size); | |
| 564 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | |
| 565 &database_size); | |
| 566 EXPECT_EQ(0, database_size); | |
| 567 | |
| 568 // Write some data to each file. | |
| 569 FilePath db_file; | |
| 570 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); | |
| 571 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | |
| 572 EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); | |
| 573 | |
| 574 db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); | |
| 575 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | |
| 576 EXPECT_TRUE(EnsureFileOfSize(db_file, 2)); | |
| 577 | |
| 578 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB3); | |
| 579 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | |
| 580 EXPECT_TRUE(EnsureFileOfSize(db_file, 3)); | |
| 581 | |
| 582 // Store the origin database directory as long as it still exists. | |
| 583 origin1_db_dir = tracker->GetFullDBFilePath(kOrigin1, kDB3).DirName(); | |
| 584 | |
| 585 tracker->DatabaseModified(kOrigin1, kDB1); | |
| 586 tracker->DatabaseModified(kOrigin2, kDB2); | |
| 587 tracker->DatabaseModified(kOrigin1, kDB3); | |
| 588 | |
| 589 // Close all databases but one database. | |
| 590 tracker->DatabaseClosed(kOrigin1, kDB1); | |
| 591 tracker->DatabaseClosed(kOrigin2, kDB2); | |
| 592 | |
| 593 // Keep an open file handle to the last database. | |
| 594 base::PlatformFile file_handle = base::CreatePlatformFile( | |
| 595 tracker->GetFullDBFilePath(kOrigin1, kDB3), | |
| 596 base::PLATFORM_FILE_READ | | |
| 597 base::PLATFORM_FILE_WRITE | | |
| 598 base::PLATFORM_FILE_EXCLUSIVE_READ | | |
| 599 base::PLATFORM_FILE_EXCLUSIVE_WRITE | | |
| 600 base::PLATFORM_FILE_OPEN_ALWAYS | | |
| 601 base::PLATFORM_FILE_SHARE_DELETE, | |
| 602 NULL, NULL); | |
| 603 | |
| 604 tracker->Shutdown(); | |
| 605 | |
| 606 base::ClosePlatformFile(file_handle); | |
| 607 tracker->DatabaseClosed(kOrigin1, kDB3); | |
| 608 } | |
| 609 | |
| 610 // At this point, the database tracker should be gone. Create a new one. | |
| 611 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = | |
| 612 new quota::MockSpecialStoragePolicy; | |
| 613 special_storage_policy->AddProtected(GURL(kOrigin2Url)); | |
| 614 scoped_refptr<DatabaseTracker> tracker( | |
| 615 new DatabaseTracker(temp_dir.path(), false, | |
| 616 special_storage_policy, NULL, NULL)); | |
| 617 | |
| 618 // Get all data for all origins. | |
| 619 std::vector<OriginInfo> origins_info; | |
| 620 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | |
| 621 EXPECT_EQ(size_t(1), origins_info.size()); | |
| 622 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); | |
| 623 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB1)); | |
| 624 EXPECT_TRUE( | |
| 625 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); | |
| 626 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB3)); | |
| 627 | |
| 628 // The origin directory should be gone as well. | |
| 629 EXPECT_FALSE(file_util::PathExists(origin1_db_dir)); | |
| 630 } | |
| 631 | |
| 632 static void DatabaseTrackerClearSessionOnlyDatabasesOnExit() { | 531 static void DatabaseTrackerClearSessionOnlyDatabasesOnExit() { |
| 633 int64 database_size = 0; | 532 int64 database_size = 0; |
| 634 const string16 kOrigin1 = | 533 const string16 kOrigin1 = |
| 635 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | 534 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| 636 const string16 kOrigin2 = | 535 const string16 kOrigin2 = |
| 637 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | 536 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| 638 const string16 kDB1 = ASCIIToUTF16("db1"); | 537 const string16 kDB1 = ASCIIToUTF16("db1"); |
| 639 const string16 kDB2 = ASCIIToUTF16("db2"); | 538 const string16 kDB2 = ASCIIToUTF16("db2"); |
| 640 const string16 kDescription = ASCIIToUTF16("database_description"); | 539 const string16 kDescription = ASCIIToUTF16("database_description"); |
| 641 | 540 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 FilePath origin1_db_dir; | 621 FilePath origin1_db_dir; |
| 723 FilePath origin2_db_dir; | 622 FilePath origin2_db_dir; |
| 724 { | 623 { |
| 725 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = | 624 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = |
| 726 new quota::MockSpecialStoragePolicy; | 625 new quota::MockSpecialStoragePolicy; |
| 727 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); | 626 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
| 728 scoped_refptr<DatabaseTracker> tracker( | 627 scoped_refptr<DatabaseTracker> tracker( |
| 729 new DatabaseTracker( | 628 new DatabaseTracker( |
| 730 temp_dir.path(), false, special_storage_policy, NULL, | 629 temp_dir.path(), false, special_storage_policy, NULL, |
| 731 base::MessageLoopProxy::current())); | 630 base::MessageLoopProxy::current())); |
| 732 tracker->SetClearLocalStateOnExit(true); | |
| 733 tracker->SaveSessionState(); | 631 tracker->SaveSessionState(); |
| 734 | 632 |
| 735 // Open two new databases. | 633 // Open two new databases. |
| 736 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 634 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 737 &database_size); | 635 &database_size); |
| 738 EXPECT_EQ(0, database_size); | 636 EXPECT_EQ(0, database_size); |
| 739 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 637 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 740 &database_size); | 638 &database_size); |
| 741 EXPECT_EQ(0, database_size); | 639 EXPECT_EQ(0, database_size); |
| 742 | 640 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 | 816 |
| 919 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { | 817 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { |
| 920 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); | 818 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); |
| 921 } | 819 } |
| 922 | 820 |
| 923 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { | 821 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
| 924 // There is no difference in behavior between incognito and not. | 822 // There is no difference in behavior between incognito and not. |
| 925 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); | 823 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
| 926 } | 824 } |
| 927 | 825 |
| 928 TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { | |
| 929 // Only works for regular mode. | |
| 930 DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); | |
| 931 } | |
| 932 | |
| 933 TEST(DatabaseTrackerTest, DatabaseTrackerClearSessionOnlyDatabasesOnExit) { | 826 TEST(DatabaseTrackerTest, DatabaseTrackerClearSessionOnlyDatabasesOnExit) { |
| 934 // Only works for regular mode. | 827 // Only works for regular mode. |
| 935 DatabaseTracker_TestHelper_Test:: | 828 DatabaseTracker_TestHelper_Test:: |
| 936 DatabaseTrackerClearSessionOnlyDatabasesOnExit(); | 829 DatabaseTrackerClearSessionOnlyDatabasesOnExit(); |
| 937 } | 830 } |
| 938 | 831 |
| 939 TEST(DatabaseTrackerTest, DatabaseTrackerSaveSessionState) { | 832 TEST(DatabaseTrackerTest, DatabaseTrackerSaveSessionState) { |
| 940 // Only works for regular mode. | 833 // Only works for regular mode. |
| 941 DatabaseTracker_TestHelper_Test::DatabaseTrackerSaveSessionState(); | 834 DatabaseTracker_TestHelper_Test::DatabaseTrackerSaveSessionState(); |
| 942 } | 835 } |
| 943 | 836 |
| 944 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { | 837 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { |
| 945 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); | 838 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); |
| 946 } | 839 } |
| 947 | 840 |
| 948 TEST(DatabaseTrackerTest, HandleSqliteError) { | 841 TEST(DatabaseTrackerTest, HandleSqliteError) { |
| 949 DatabaseTracker_TestHelper_Test::HandleSqliteError(); | 842 DatabaseTracker_TestHelper_Test::HandleSqliteError(); |
| 950 } | 843 } |
| 951 | 844 |
| 952 } // namespace webkit_database | 845 } // namespace webkit_database |
| OLD | NEW |