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

Side by Side Diff: content/browser/in_process_webkit/dom_storage_unittest.cc

Issue 8820009: Appcache, local storage, indexed db, databases: skip exit-time deletion when restarting. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review. Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "content/browser/browser_thread_impl.h" 7 #include "content/browser/browser_thread_impl.h"
8 #include "content/browser/in_process_webkit/webkit_context.h" 8 #include "content/browser/in_process_webkit/webkit_context.h"
9 #include "content/test/test_browser_context.h" 9 #include "content/test/test_browser_context.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 15 matching lines...) Expand all
26 private: 26 private:
27 BrowserThreadImpl webkit_thread_; 27 BrowserThreadImpl webkit_thread_;
28 }; 28 };
29 29
30 TEST_F(DOMStorageTest, SessionOnly) { 30 TEST_F(DOMStorageTest, SessionOnly) {
31 GURL session_only_origin("http://www.sessiononly.com"); 31 GURL session_only_origin("http://www.sessiononly.com");
32 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy = 32 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy =
33 new quota::MockSpecialStoragePolicy; 33 new quota::MockSpecialStoragePolicy;
34 special_storage_policy->AddSessionOnly(session_only_origin); 34 special_storage_policy->AddSessionOnly(session_only_origin);
35 35
36 // A scope for deleting TestBrowserContext early enough. 36 TestBrowserContext browser_context;
37 {
38 TestBrowserContext browser_context;
39 37
40 // Create databases for permanent and session-only origins. 38 // Create databases for permanent and session-only origins.
41 FilePath domstorage_dir = browser_context.GetPath().Append( 39 FilePath domstorage_dir = browser_context.GetPath().Append(
42 DOMStorageContext::kLocalStorageDirectory); 40 DOMStorageContext::kLocalStorageDirectory);
43 FilePath::StringType session_only_database( 41 FilePath::StringType session_only_database(
44 FILE_PATH_LITERAL("http_www.sessiononly.com_0")); 42 FILE_PATH_LITERAL("http_www.sessiononly.com_0"));
45 FilePath::StringType permanent_database( 43 FilePath::StringType permanent_database(
46 FILE_PATH_LITERAL("http_www.permanent.com_0")); 44 FILE_PATH_LITERAL("http_www.permanent.com_0"));
47 session_only_database.append(DOMStorageContext::kLocalStorageExtension); 45 session_only_database.append(DOMStorageContext::kLocalStorageExtension);
48 permanent_database.append(DOMStorageContext::kLocalStorageExtension); 46 permanent_database.append(DOMStorageContext::kLocalStorageExtension);
49 FilePath session_only_database_path = 47 FilePath session_only_database_path =
50 domstorage_dir.Append(session_only_database); 48 domstorage_dir.Append(session_only_database);
51 FilePath permanent_database_path = 49 FilePath permanent_database_path =
52 domstorage_dir.Append(permanent_database); 50 domstorage_dir.Append(permanent_database);
53 51
54 ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir)); 52 ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir));
55 53
56 ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1)); 54 ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1));
57 ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1)); 55 ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1));
58 56
59 // Inject MockSpecialStoragePolicy into DOMStorageContext. 57 // Inject MockSpecialStoragePolicy into DOMStorageContext.
60 browser_context.GetWebKitContext()->dom_storage_context()-> 58 browser_context.GetWebKitContext()->dom_storage_context()->
61 special_storage_policy_ = special_storage_policy; 59 special_storage_policy_ = special_storage_policy;
62 60
63 // Tell the WebKitContext explicitly do clean up the session-only 61 // Delete the WebKitContext before destroying TestBrowserContext. This way the
64 // data. TestBrowserContext doesn't do it automatically 62 // temporary data directory stays alive long enough to conduct the test.
65 // when destructed. The deletion is done immediately since we're on the 63 browser_context.webkit_context_ = NULL;
66 // WEBKIT thread (created by the test).
67 browser_context.GetWebKitContext()->DeleteSessionOnlyData();
68
69 // Expected result: the database file for the permanent storage remains but
70 // the database for the session only storage was deleted.
71 EXPECT_FALSE(file_util::PathExists(session_only_database_path));
72 EXPECT_TRUE(file_util::PathExists(permanent_database_path));
73 }
74 // Run the message loop to ensure that DOMStorageContext gets destroyed. 64 // Run the message loop to ensure that DOMStorageContext gets destroyed.
75 message_loop_.RunAllPending(); 65 message_loop_.RunAllPending();
66
67 // Expected result: the database file for the permanent storage remains but
68 // the database for the session only storage was deleted.
69 EXPECT_FALSE(file_util::PathExists(session_only_database_path));
70 EXPECT_TRUE(file_util::PathExists(permanent_database_path));
76 } 71 }
72
73 TEST_F(DOMStorageTest, SaveSessionState) {
74 GURL session_only_origin("http://www.sessiononly.com");
75 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy =
76 new quota::MockSpecialStoragePolicy;
77 special_storage_policy->AddSessionOnly(session_only_origin);
78
79 TestBrowserContext browser_context;
80
81 // Create databases for permanent and session-only origins.
82 FilePath domstorage_dir = browser_context.GetPath().Append(
83 DOMStorageContext::kLocalStorageDirectory);
84 FilePath::StringType session_only_database(
85 FILE_PATH_LITERAL("http_www.sessiononly.com_0"));
86 FilePath::StringType permanent_database(
87 FILE_PATH_LITERAL("http_www.permanent.com_0"));
88 session_only_database.append(DOMStorageContext::kLocalStorageExtension);
89 permanent_database.append(DOMStorageContext::kLocalStorageExtension);
90 FilePath session_only_database_path =
91 domstorage_dir.Append(session_only_database);
92 FilePath permanent_database_path =
93 domstorage_dir.Append(permanent_database);
94
95 ASSERT_TRUE(file_util::CreateDirectory(domstorage_dir));
96
97 ASSERT_EQ(1, file_util::WriteFile(session_only_database_path, ".", 1));
98 ASSERT_EQ(1, file_util::WriteFile(permanent_database_path, ".", 1));
99
100 // Inject MockSpecialStoragePolicy into DOMStorageContext.
101 DOMStorageContext* dom_storage_context =
102 browser_context.GetWebKitContext()->dom_storage_context();
103 dom_storage_context->special_storage_policy_ = special_storage_policy;
104
105 dom_storage_context->set_clear_local_state_on_exit_(true);
106
107 // Save session state. This should bypass the destruction-time deletion.
108 dom_storage_context->SaveSessionState();
109
110 // Delete the WebKitContext before destroying TestBrowserContext. This way the
111 // temporary data directory stays alive long enough to conduct the test.
112 browser_context.webkit_context_ = NULL;
113 // Run the message loop to ensure that DOMStorageContext gets destroyed.
114 message_loop_.RunAllPending();
115
116 // Expected result: no database files were deleted because of
117 // SaveSessionState.
118 EXPECT_TRUE(file_util::PathExists(session_only_database_path));
119 EXPECT_TRUE(file_util::PathExists(permanent_database_path));
120 }
OLDNEW
« no previous file with comments | « content/browser/in_process_webkit/dom_storage_context.cc ('k') | content/browser/in_process_webkit/indexed_db_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698