Chromium Code Reviews| Index: webkit/database/database_tracker_unittest.cc |
| diff --git a/webkit/database/database_tracker_unittest.cc b/webkit/database/database_tracker_unittest.cc |
| index f10a8ce2bb7bb5e9ead5c670cf07de5958120c52..7ae4389fa48642e9797311ec253b7c970153ada4 100644 |
| --- a/webkit/database/database_tracker_unittest.cc |
| +++ b/webkit/database/database_tracker_unittest.cc |
| @@ -6,6 +6,8 @@ |
| #include "base/file_util.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/scoped_temp_dir.h" |
| +#include "base/test/thread_test_helper.h" |
| +#include "base/threading/thread.h" |
| #include "base/time.h" |
| #include "base/utf_string_conversions.h" |
| #include "net/base/net_errors.h" |
| @@ -184,7 +186,7 @@ class DatabaseTracker_TestHelper_Test { |
| ScopedTempDir temp_dir; |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| scoped_refptr<DatabaseTracker> tracker( |
| - new DatabaseTracker(temp_dir.path(), incognito_mode, |
| + new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
| new TestSpecialStoragePolicy, |
| NULL, NULL)); |
| @@ -287,7 +289,7 @@ class DatabaseTracker_TestHelper_Test { |
| ScopedTempDir temp_dir; |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| scoped_refptr<DatabaseTracker> tracker( |
| - new DatabaseTracker(temp_dir.path(), incognito_mode, |
| + new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
| new TestSpecialStoragePolicy, |
| NULL, NULL)); |
| @@ -407,14 +409,14 @@ class DatabaseTracker_TestHelper_Test { |
| // Trying to delete an origin with databases in use should fail |
| tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| &database_size); |
| - EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1)); |
| + EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1, false)); |
| origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| EXPECT_TRUE(origin1_info); |
| EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); |
| tracker->DatabaseClosed(kOrigin1, kDB1); |
| // Delete an origin that doesn't have any database in use |
| - EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1)); |
| + EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1, false)); |
| origins_info.clear(); |
| EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| EXPECT_EQ(size_t(1), origins_info.size()); |
| @@ -438,7 +440,7 @@ class DatabaseTracker_TestHelper_Test { |
| scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( |
| new TestQuotaManagerProxy); |
| scoped_refptr<DatabaseTracker> tracker( |
| - new DatabaseTracker(temp_dir.path(), false /* incognito */, |
| + new DatabaseTracker(temp_dir.path(), false /* incognito */, false, |
| NULL, test_quota_proxy, NULL)); |
| EXPECT_TRUE(test_quota_proxy->registered_client_); |
| @@ -516,6 +518,91 @@ class DatabaseTracker_TestHelper_Test { |
| crashed_renderer_connections.RemoveAllConnections(); |
| test_quota_proxy->SimulateQuotaManagerDestroyed(); |
| } |
| + |
| + static void DatabaseTrackerClearLocalStateOnExit() { |
|
michaeln
2011/07/01 03:02:34
Can you alter the test such that a file is held op
jochen (gone - plz use gerrit)
2011/07/06 09:24:53
Done.
|
| + int64 database_size = 0; |
| + const string16 kOrigin1 = |
| + DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| + const string16 kOrigin2 = |
| + DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| + const string16 kDB1 = ASCIIToUTF16("db1"); |
| + const string16 kDB2 = ASCIIToUTF16("db2"); |
| + const string16 kDB3 = ASCIIToUTF16("db3"); |
| + const string16 kDescription = ASCIIToUTF16("database_description"); |
| + |
| + // Initialize the tracker database. |
| + ScopedTempDir temp_dir; |
| + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| + base::Thread thread("Database tracker thread"); |
| + ASSERT_TRUE(thread.Start()); |
| + { |
| + scoped_refptr<DatabaseTracker> tracker( |
| + new DatabaseTracker(temp_dir.path(), false, true, |
| + new TestSpecialStoragePolicy, |
| + NULL, thread.message_loop_proxy())); |
| + |
| + // Open three new databases. |
| + tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
|
michaeln
2011/07/01 03:02:34
Having these methods be called on something other
jochen (gone - plz use gerrit)
2011/07/06 09:24:53
Done.
|
| + &database_size); |
| + EXPECT_EQ(0, database_size); |
| + tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| + &database_size); |
| + EXPECT_EQ(0, database_size); |
| + tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, |
| + &database_size); |
| + EXPECT_EQ(0, database_size); |
| + |
| + // Write some data to each file. |
| + EXPECT_TRUE( |
| + file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| + FilePath::FromWStringHack(UTF16ToWide( |
|
michaeln
2011/07/01 03:02:34
Let's avoid adding more usages of FromWStringHack.
jochen (gone - plz use gerrit)
2011/07/06 09:24:53
Done.
|
| + tracker->GetOriginDirectory(kOrigin1)))))); |
| + EXPECT_TRUE( |
| + file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| + FilePath::FromWStringHack(UTF16ToWide( |
| + tracker->GetOriginDirectory(kOrigin2)))))); |
| + EXPECT_EQ(1, file_util::WriteFile( |
| + tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| + EXPECT_EQ(2, file_util::WriteFile( |
| + tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); |
| + EXPECT_EQ(4, file_util::WriteFile( |
| + tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); |
| + tracker->DatabaseModified(kOrigin1, kDB1); |
| + tracker->DatabaseModified(kOrigin2, kDB2); |
| + tracker->DatabaseModified(kOrigin1, kDB3); |
| + |
| + // Close all databases. |
| + tracker->DatabaseClosed(kOrigin1, kDB1); |
| + tracker->DatabaseClosed(kOrigin2, kDB2); |
| + tracker->DatabaseClosed(kOrigin1, kDB3); |
| + |
| + tracker->Shutdown(); |
| + |
| + // Synchronize with the database tracker thread to ensure that the |
| + // shutdown tasks have completed. |
| + scoped_refptr<base::ThreadTestHelper> sync = |
| + new base::ThreadTestHelper(thread.message_loop_proxy()); |
| + ASSERT_TRUE(sync->Run()); |
| + } |
| + |
| + // At this point, the database tracker should be gone. Create a new one. |
| + scoped_refptr<DatabaseTracker> tracker( |
| + new DatabaseTracker(temp_dir.path(), false, false, |
| + new TestSpecialStoragePolicy, |
| + NULL, NULL)); |
| + |
| + // Get all data for all origins. |
| + std::vector<OriginInfo> origins_info; |
| + EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| + EXPECT_EQ(size_t(1), origins_info.size()); |
| + EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); |
| + EXPECT_FALSE( |
| + file_util::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| + EXPECT_TRUE( |
| + file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| + EXPECT_FALSE( |
| + file_util::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB3))); |
| + } |
| }; |
| TEST(DatabaseTrackerTest, DeleteOpenDatabase) { |
| @@ -539,4 +626,9 @@ TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
| DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
| } |
| +TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { |
| + // Only works for regular mode. |
| + DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); |
| +} |
| + |
| } // namespace webkit_database |