Index: webkit/database/database_tracker_unittest.cc |
diff --git a/webkit/database/database_tracker_unittest.cc b/webkit/database/database_tracker_unittest.cc |
index e46e16b046a07da04d7a4d6c18ad786f29a9db73..4d4923dd75bfb441cc8cccf5b0ec08e3478c715e 100644 |
--- a/webkit/database/database_tracker_unittest.cc |
+++ b/webkit/database/database_tracker_unittest.cc |
@@ -687,6 +687,83 @@ class DatabaseTracker_TestHelper_Test { |
EXPECT_FALSE(file_util::PathExists(origin2_db_dir)); |
} |
+ static void DatabaseTrackerSaveSessionState() { |
+ 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 kDescription = ASCIIToUTF16("database_description"); |
+ |
+ // Initialize the tracker database. |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ FilePath origin1_db_dir; |
+ FilePath origin2_db_dir; |
+ { |
+ scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = |
+ new quota::MockSpecialStoragePolicy; |
+ special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
+ scoped_refptr<DatabaseTracker> tracker( |
+ new DatabaseTracker( |
+ temp_dir.path(), false, true /*clear_local_state_on_exit*/, |
+ special_storage_policy, NULL, |
+ base::MessageLoopProxy::current())); |
+ tracker->SaveSessionState(); |
+ |
+ // Open two 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); |
+ |
+ // Write some data to each file. |
+ FilePath db_file; |
+ db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); |
+ EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); |
+ EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); |
+ |
+ db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); |
+ EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); |
+ EXPECT_TRUE(EnsureFileOfSize(db_file, 2)); |
+ |
+ // Store the origin database directories as long as they still exist. |
+ origin1_db_dir = tracker->GetFullDBFilePath(kOrigin1, kDB1).DirName(); |
+ origin2_db_dir = tracker->GetFullDBFilePath(kOrigin2, kDB2).DirName(); |
+ |
+ tracker->DatabaseModified(kOrigin1, kDB1); |
+ tracker->DatabaseModified(kOrigin2, kDB2); |
+ |
+ // Close all databases. |
+ tracker->DatabaseClosed(kOrigin1, kDB1); |
+ tracker->DatabaseClosed(kOrigin2, kDB2); |
+ |
+ tracker->Shutdown(); |
+ } |
+ |
+ // At this point, the database tracker should be gone. Create a new one. |
+ scoped_refptr<DatabaseTracker> tracker( |
+ new DatabaseTracker(temp_dir.path(), false, false, |
+ NULL, NULL, NULL)); |
+ |
+ // Get all data for all origins. |
+ std::vector<OriginInfo> origins_info; |
+ EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
+ // No origins were deleted. |
+ EXPECT_EQ(size_t(2), origins_info.size()); |
+ EXPECT_TRUE( |
+ file_util::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
+ EXPECT_TRUE( |
+ file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
+ |
+ EXPECT_TRUE(file_util::PathExists(origin1_db_dir)); |
+ EXPECT_TRUE(file_util::PathExists(origin2_db_dir)); |
+ } |
+ |
static void EmptyDatabaseNameIsValid() { |
const GURL kOrigin(kOrigin1Url); |
const string16 kOriginId = DatabaseUtil::GetOriginIdentifier(kOrigin); |
@@ -766,6 +843,11 @@ TEST(DatabaseTrackerTest, DatabaseTrackerClearSessionOnlyDatabasesOnExit) { |
DatabaseTrackerClearSessionOnlyDatabasesOnExit(); |
} |
+TEST(DatabaseTrackerTest, DatabaseTrackerSaveSessionState) { |
+ // Only works for regular mode. |
+ DatabaseTracker_TestHelper_Test::DatabaseTrackerSaveSessionState(); |
+} |
+ |
TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { |
DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); |
} |