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 |