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..f338bec6b812da9855955e48a69f0410d5f16993 100644 |
--- a/webkit/database/database_tracker_unittest.cc |
+++ b/webkit/database/database_tracker_unittest.cc |
@@ -184,7 +184,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 +287,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)); |
@@ -438,7 +438,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 +516,82 @@ class DatabaseTracker_TestHelper_Test { |
crashed_renderer_connections.RemoveAllConnections(); |
test_quota_proxy->SimulateQuotaManagerDestroyed(); |
} |
+ |
+ static void DatabaseTrackerClearLocalStateOnExit() { |
+ 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()); |
+ { |
+ scoped_refptr<DatabaseTracker> tracker( |
+ new DatabaseTracker(temp_dir.path(), false, true, |
+ new TestSpecialStoragePolicy, |
+ NULL, NULL)); |
+ |
+ // Open three new databases. |
+ tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
+ &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( |
+ 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); |
+ |
+ } |
+ |
+ // 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 +615,9 @@ TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
} |
+TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { |
+ // Only works for regular mode. |
+ DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); |
+} |
+ |
} // namespace webkit_database |