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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..14f5a3077a0a831b696ffc32216fa69398a20bef |
--- /dev/null |
+++ b/content/browser/in_process_webkit/dom_storage_unittest.cc |
@@ -0,0 +1,67 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/file_path.h" |
+#include "base/file_util.h" |
+#include "chrome/test/base/testing_browser_process.h" |
+#include "chrome/test/base/testing_browser_process_test.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "content/browser/in_process_webkit/webkit_context.h" |
+#include "webkit/quota/mock_special_storage_policy.h" |
+ |
+class DOMStorageTest : public TestingBrowserProcessTest { |
+ public: |
+ DOMStorageTest() |
+ : message_loop_(MessageLoop::TYPE_IO), |
+ webkit_thread_(BrowserThread::WEBKIT, &message_loop_) { |
+ } |
+ protected: |
+ MessageLoop message_loop_; |
+ |
+ private: |
+ BrowserThread webkit_thread_; |
+}; |
+ |
+TEST_F(DOMStorageTest, SessionOnly) { |
+ 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); |
+ |
+ TestingProfile profile; |
+ |
+ // Create databases for permanent and session-only origins. |
+ FilePath domstorage_dir = profile.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. |
+ profile.GetWebKitContext()->dom_storage_context()->special_storage_policy_ = |
+ special_storage_policy; |
+ |
+ // Tell the WebKitContext explicitly do clean up the session-only |
+ // data. TestingProfile (unlike ProfileImpl) doesn't do it automatically when |
+ // destructed. The deletion is done immediately since we're on the WEBKIT |
+ // thread (created by the test). |
+ profile.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)); |
+} |