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

Side by Side Diff: webkit/dom_storage/dom_storage_context.h

Issue 9963107: Persist sessionStorage on disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review. Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_ 5 #ifndef WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_
6 #define WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_ 6 #define WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set>
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/atomic_sequence_num.h" 13 #include "base/atomic_sequence_num.h"
13 #include "base/basictypes.h" 14 #include "base/basictypes.h"
14 #include "base/file_path.h" 15 #include "base/file_path.h"
15 #include "base/gtest_prod_util.h" 16 #include "base/gtest_prod_util.h"
16 #include "base/memory/ref_counted.h" 17 #include "base/memory/ref_counted.h"
17 #include "base/observer_list.h" 18 #include "base/observer_list.h"
18 #include "base/time.h" 19 #include "base/time.h"
19 #include "googleurl/src/gurl.h" 20 #include "googleurl/src/gurl.h"
20 21
21 class FilePath; 22 class FilePath;
22 class NullableString16; 23 class NullableString16;
23 24
24 namespace base { 25 namespace base {
25 class Time; 26 class Time;
26 } 27 }
27 28
28 namespace quota { 29 namespace quota {
29 class SpecialStoragePolicy; 30 class SpecialStoragePolicy;
30 } 31 }
31 32
32 namespace dom_storage { 33 namespace dom_storage {
33 34
34 class DomStorageArea; 35 class DomStorageArea;
35 class DomStorageNamespace; 36 class DomStorageNamespace;
36 class DomStorageSession; 37 class DomStorageSession;
37 class DomStorageTaskRunner; 38 class DomStorageTaskRunner;
39 class SessionStorageDatabase;
38 40
39 // The Context is the root of an object containment hierachy for 41 // The Context is the root of an object containment hierachy for
40 // Namespaces and Areas related to the owning profile. 42 // Namespaces and Areas related to the owning profile.
41 // One instance is allocated in the main process for each profile, 43 // One instance is allocated in the main process for each profile,
42 // instance methods should be called serially in the background as 44 // instance methods should be called serially in the background as
43 // determined by the task_runner. Specifcally not on chrome's non-blocking 45 // determined by the task_runner. Specifcally not on chrome's non-blocking
44 // IO thread since these methods can result in blocking file io. 46 // IO thread since these methods can result in blocking file io.
45 // 47 //
46 // In general terms, the DomStorage object relationships are... 48 // In general terms, the DomStorage object relationships are...
47 // Contexts (per-profile) own Namespaces which own Areas which share Maps. 49 // Contexts (per-profile) own Namespaces which own Areas which share Maps.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 const GURL& page_url); 146 const GURL& page_url);
145 void NotifyAreaCleared( 147 void NotifyAreaCleared(
146 const DomStorageArea* area, 148 const DomStorageArea* area,
147 const GURL& page_url); 149 const GURL& page_url);
148 150
149 // May be called on any thread. 151 // May be called on any thread.
150 int64 AllocateSessionId() { 152 int64 AllocateSessionId() {
151 return session_id_sequence_.GetNext(); 153 return session_id_sequence_.GetNext();
152 } 154 }
153 155
156 std::string AllocatePersistentSessionId();
157
154 // Must be called on the background thread. 158 // Must be called on the background thread.
155 void CreateSessionNamespace(int64 namespace_id); 159 void CreateSessionNamespace(int64 namespace_id,
160 const std::string& persistent_namespace_id);
156 void DeleteSessionNamespace(int64 namespace_id); 161 void DeleteSessionNamespace(int64 namespace_id);
157 void CloneSessionNamespace(int64 existing_id, int64 new_id); 162 void CloneSessionNamespace(int64 existing_id, int64 new_id,
163 const std::string& new_persistent_id);
164
165 void DoomSessionStorage(const std::string& persistent_namespace_id);
158 166
159 private: 167 private:
160 friend class DomStorageContextTest; 168 friend class DomStorageContextTest;
161 FRIEND_TEST_ALL_PREFIXES(DomStorageContextTest, Basics); 169 FRIEND_TEST_ALL_PREFIXES(DomStorageContextTest, Basics);
162 friend class base::RefCountedThreadSafe<DomStorageContext>; 170 friend class base::RefCountedThreadSafe<DomStorageContext>;
163 typedef std::map<int64, scoped_refptr<DomStorageNamespace> > 171 typedef std::map<int64, scoped_refptr<DomStorageNamespace> >
164 StorageNamespaceMap; 172 StorageNamespaceMap;
165 173
166 ~DomStorageContext(); 174 ~DomStorageContext();
167 175
168 void ClearSessionOnlyOrigins(); 176 void ClearSessionOnlyOrigins();
169 177
178 void DeleteLeftoverDataInCommitSequence();
179
170 // Collection of namespaces keyed by id. 180 // Collection of namespaces keyed by id.
171 StorageNamespaceMap namespaces_; 181 StorageNamespaceMap namespaces_;
172 182
173 // Where localstorage data is stored, maybe empty for the incognito use case. 183 // Where localstorage data is stored, maybe empty for the incognito use case.
174 FilePath localstorage_directory_; 184 FilePath localstorage_directory_;
175 185
176 // Where sessionstorage data is stored, maybe empty for the incognito use 186 // Where sessionstorage data is stored, maybe empty for the incognito use
177 // case. Always empty until the file-backed session storage feature is 187 // case. Always empty until the file-backed session storage feature is
178 // implemented. 188 // implemented.
179 FilePath sessionstorage_directory_; 189 FilePath sessionstorage_directory_;
180 190
181 // Used to schedule sequenced background tasks. 191 // Used to schedule sequenced background tasks.
182 scoped_refptr<DomStorageTaskRunner> task_runner_; 192 scoped_refptr<DomStorageTaskRunner> task_runner_;
183 193
184 // List of objects observing local storage events. 194 // List of objects observing local storage events.
185 ObserverList<EventObserver> event_observers_; 195 ObserverList<EventObserver> event_observers_;
186 196
187 // We use a 32 bit identifier for per tab storage sessions. 197 // We use a 32 bit identifier for per tab storage sessions.
188 // At a tab per second, this range is large enough for 68 years. 198 // At a tab per second, this range is large enough for 68 years.
189 base::AtomicSequenceNumber session_id_sequence_; 199 base::AtomicSequenceNumber session_id_sequence_;
190 200
191 bool is_shutdown_; 201 bool is_shutdown_;
192 bool force_keep_session_state_; 202 bool force_keep_session_state_;
193 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_; 203 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_;
204 scoped_refptr<SessionStorageDatabase> session_storage_database_;
205
206 // Persistent namespace IDs for sessionStorages which won't be needed for
207 // session restore.
208 std::set<std::string> doomed_persistent_session_ids_;
209
210 // Persistent namespace IDs to protect from leftover data deletion (they will
211 // be needed for session restore).
212 std::set<std::string> protected_persistent_session_ids_;
194 }; 213 };
195 214
196 } // namespace dom_storage 215 } // namespace dom_storage
197 216
198 #endif // WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_ 217 #endif // WEBKIT_DOM_STORAGE_DOM_STORAGE_CONTEXT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698