| Index: content/browser/in_process_webkit/dom_storage_unittest.cc
|
| diff --git a/content/browser/in_process_webkit/dom_storage_unittest.cc b/content/browser/in_process_webkit/dom_storage_unittest.cc
|
| index 593c3b3519f25ef977a588e7a723a978ef72191b..6684995fc2f76abd294991872f997127174f549f 100644
|
| --- a/content/browser/in_process_webkit/dom_storage_unittest.cc
|
| +++ b/content/browser/in_process_webkit/dom_storage_unittest.cc
|
| @@ -33,44 +33,88 @@ TEST_F(DOMStorageTest, SessionOnly) {
|
| new quota::MockSpecialStoragePolicy;
|
| special_storage_policy->AddSessionOnly(session_only_origin);
|
|
|
| - // A scope for deleting TestBrowserContext early enough.
|
| - {
|
| - TestBrowserContext browser_context;
|
| -
|
| - // Create databases for permanent and session-only origins.
|
| - FilePath domstorage_dir = browser_context.GetPath().Append(
|
| - DOMStorageContext::kLocalStorageDirectory);
|
| - FilePath::StringType session_only_database(
|
| - FILE_PATH_LITERAL("http_www.sessiononly.com_0"));
|
| - FilePath::StringType permanent_database(
|
| - FILE_PATH_LITERAL("http_www.permanent.com_0"));
|
| - session_only_database.append(DOMStorageContext::kLocalStorageExtension);
|
| - permanent_database.append(DOMStorageContext::kLocalStorageExtension);
|
| - FilePath session_only_database_path =
|
| - domstorage_dir.Append(session_only_database);
|
| - FilePath permanent_database_path =
|
| - domstorage_dir.Append(permanent_database);
|
| -
|
| - ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir));
|
| -
|
| - ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1));
|
| - ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1));
|
| -
|
| - // Inject MockSpecialStoragePolicy into DOMStorageContext.
|
| - browser_context.GetWebKitContext()->dom_storage_context()->
|
| - special_storage_policy_ = special_storage_policy;
|
| -
|
| - // Tell the WebKitContext explicitly do clean up the session-only
|
| - // data. TestBrowserContext doesn't do it automatically
|
| - // when destructed. The deletion is done immediately since we're on the
|
| - // WEBKIT thread (created by the test).
|
| - browser_context.GetWebKitContext()->DeleteSessionOnlyData();
|
| -
|
| - // Expected result: the database file for the permanent storage remains but
|
| - // the database for the session only storage was deleted.
|
| - EXPECT_FALSE(file_util::PathExists(session_only_database_path));
|
| - EXPECT_TRUE(file_util::PathExists(permanent_database_path));
|
| - }
|
| + TestBrowserContext browser_context;
|
| +
|
| + // Create databases for permanent and session-only origins.
|
| + FilePath domstorage_dir = browser_context.GetPath().Append(
|
| + DOMStorageContext::kLocalStorageDirectory);
|
| + FilePath::StringType session_only_database(
|
| + FILE_PATH_LITERAL("http_www.sessiononly.com_0"));
|
| + FilePath::StringType permanent_database(
|
| + FILE_PATH_LITERAL("http_www.permanent.com_0"));
|
| + session_only_database.append(DOMStorageContext::kLocalStorageExtension);
|
| + permanent_database.append(DOMStorageContext::kLocalStorageExtension);
|
| + FilePath session_only_database_path =
|
| + domstorage_dir.Append(session_only_database);
|
| + FilePath permanent_database_path =
|
| + domstorage_dir.Append(permanent_database);
|
| +
|
| + ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir));
|
| +
|
| + ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1));
|
| + ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1));
|
| +
|
| + // Inject MockSpecialStoragePolicy into DOMStorageContext.
|
| + browser_context.GetWebKitContext()->dom_storage_context()->
|
| + special_storage_policy_ = special_storage_policy;
|
| +
|
| + // Delete the WebKitContext before destroying TestBrowserContext. This way the
|
| + // temporary data directory stays alive long enough to conduct the test.
|
| + browser_context.webkit_context_ = NULL;
|
| + // Run the message loop to ensure that DOMStorageContext gets destroyed.
|
| + message_loop_.RunAllPending();
|
| +
|
| + // Expected result: the database file for the permanent storage remains but
|
| + // the database for the session only storage was deleted.
|
| + EXPECT_FALSE(file_util::PathExists(session_only_database_path));
|
| + EXPECT_TRUE(file_util::PathExists(permanent_database_path));
|
| +}
|
| +
|
| +TEST_F(DOMStorageTest, SaveSessionState) {
|
| + GURL session_only_origin("http://www.sessiononly.com");
|
| + scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy =
|
| + new quota::MockSpecialStoragePolicy;
|
| + special_storage_policy->AddSessionOnly(session_only_origin);
|
| +
|
| + TestBrowserContext browser_context;
|
| +
|
| + // Create databases for permanent and session-only origins.
|
| + FilePath domstorage_dir = browser_context.GetPath().Append(
|
| + DOMStorageContext::kLocalStorageDirectory);
|
| + FilePath::StringType session_only_database(
|
| + FILE_PATH_LITERAL("http_www.sessiononly.com_0"));
|
| + FilePath::StringType permanent_database(
|
| + FILE_PATH_LITERAL("http_www.permanent.com_0"));
|
| + session_only_database.append(DOMStorageContext::kLocalStorageExtension);
|
| + permanent_database.append(DOMStorageContext::kLocalStorageExtension);
|
| + FilePath session_only_database_path =
|
| + domstorage_dir.Append(session_only_database);
|
| + FilePath permanent_database_path =
|
| + domstorage_dir.Append(permanent_database);
|
| +
|
| + ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir));
|
| +
|
| + ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1));
|
| + ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1));
|
| +
|
| + // Inject MockSpecialStoragePolicy into DOMStorageContext.
|
| + DOMStorageContext* dom_storage_context =
|
| + browser_context.GetWebKitContext()->dom_storage_context();
|
| + dom_storage_context->special_storage_policy_ = special_storage_policy;
|
| +
|
| + dom_storage_context->set_clear_local_state_on_exit_(true);
|
| +
|
| + // Save session state. This should bypass the destruction-time deletion.
|
| + dom_storage_context->SaveSessionState();
|
| +
|
| + // Delete the WebKitContext before destroying TestBrowserContext. This way the
|
| + // temporary data directory stays alive long enough to conduct the test.
|
| + browser_context.webkit_context_ = NULL;
|
| // Run the message loop to ensure that DOMStorageContext gets destroyed.
|
| message_loop_.RunAllPending();
|
| +
|
| + // Expected result: no database files were deleted because of
|
| + // SaveSessionState.
|
| + EXPECT_TRUE(file_util::PathExists(session_only_database_path));
|
| + EXPECT_TRUE(file_util::PathExists(permanent_database_path));
|
| }
|
|
|