Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(821)

Unified Diff: webkit/database/database_tracker_unittest.cc

Issue 7234014: Move code to clear web databases on shutdown to the database tracker (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698