OLD | NEW |
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 CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ |
6 #define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ | 6 #define CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 // all contained Areas, the shallow copies refer to the same refcounted Map, | 58 // all contained Areas, the shallow copies refer to the same refcounted Map, |
59 // and does a deep copy-on-write if needed. | 59 // and does a deep copy-on-write if needed. |
60 // | 60 // |
61 // Classes intended to be used by an embedder are DOMStorageContextImpl, | 61 // Classes intended to be used by an embedder are DOMStorageContextImpl, |
62 // DOMStorageHost, and DOMStorageSession. The other classes are for | 62 // DOMStorageHost, and DOMStorageSession. The other classes are for |
63 // internal consumption. | 63 // internal consumption. |
64 class CONTENT_EXPORT DOMStorageContextImpl | 64 class CONTENT_EXPORT DOMStorageContextImpl |
65 : public base::RefCountedThreadSafe<DOMStorageContextImpl>, | 65 : public base::RefCountedThreadSafe<DOMStorageContextImpl>, |
66 public base::trace_event::MemoryDumpProvider { | 66 public base::trace_event::MemoryDumpProvider { |
67 public: | 67 public: |
| 68 typedef std::map<int64_t, scoped_refptr<DOMStorageNamespace>> |
| 69 StorageNamespaceMap; |
| 70 |
68 // An interface for observing Local and Session Storage events on the | 71 // An interface for observing Local and Session Storage events on the |
69 // background thread. | 72 // background thread. |
70 class EventObserver { | 73 class EventObserver { |
71 public: | 74 public: |
72 // |old_value| may be null on initial insert. | 75 // |old_value| may be null on initial insert. |
73 virtual void OnDOMStorageItemSet( | 76 virtual void OnDOMStorageItemSet( |
74 const DOMStorageArea* area, | 77 const DOMStorageArea* area, |
75 const base::string16& key, | 78 const base::string16& key, |
76 const base::string16& new_value, | 79 const base::string16& new_value, |
77 const base::NullableString16& old_value, | 80 const base::NullableString16& old_value, |
78 const GURL& page_url) = 0; | 81 const GURL& page_url) = 0; |
79 virtual void OnDOMStorageItemRemoved( | 82 virtual void OnDOMStorageItemRemoved( |
80 const DOMStorageArea* area, | 83 const DOMStorageArea* area, |
81 const base::string16& key, | 84 const base::string16& key, |
82 const base::string16& old_value, | 85 const base::string16& old_value, |
83 const GURL& page_url) = 0; | 86 const GURL& page_url) = 0; |
84 virtual void OnDOMStorageAreaCleared( | 87 virtual void OnDOMStorageAreaCleared( |
85 const DOMStorageArea* area, | 88 const DOMStorageArea* area, |
86 const GURL& page_url) = 0; | 89 const GURL& page_url) = 0; |
87 | 90 |
88 protected: | 91 protected: |
89 virtual ~EventObserver() {} | 92 virtual ~EventObserver() {} |
90 }; | 93 }; |
91 | 94 |
| 95 // Option for PurgeMemory. |
| 96 enum PurgeOption { |
| 97 // Determines if purging is required based on the usage and the platform. |
| 98 PURGE_IF_NEEDED, |
| 99 |
| 100 // Purge unopened areas only. |
| 101 PURGE_UNOPENED, |
| 102 |
| 103 // Purge aggressively, i.e. discard cache even for areas that have |
| 104 // non-zero open count. |
| 105 PURGE_AGGRESSIVE, |
| 106 }; |
| 107 |
92 // |localstorage_directory| and |sessionstorage_directory| may be empty | 108 // |localstorage_directory| and |sessionstorage_directory| may be empty |
93 // for incognito browser contexts. | 109 // for incognito browser contexts. |
94 DOMStorageContextImpl(const base::FilePath& localstorage_directory, | 110 DOMStorageContextImpl(const base::FilePath& localstorage_directory, |
95 const base::FilePath& sessionstorage_directory, | 111 const base::FilePath& sessionstorage_directory, |
96 storage::SpecialStoragePolicy* special_storage_policy, | 112 storage::SpecialStoragePolicy* special_storage_policy, |
97 DOMStorageTaskRunner* task_runner); | 113 DOMStorageTaskRunner* task_runner); |
98 | 114 |
99 // Returns the directory path for localStorage, or an empty directory, if | 115 // Returns the directory path for localStorage, or an empty directory, if |
100 // there is no backing on disk. | 116 // there is no backing on disk. |
101 const base::FilePath& localstorage_directory() { | 117 const base::FilePath& localstorage_directory() { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 | 184 |
169 // Starts backing sessionStorage on disk. This function must be called right | 185 // Starts backing sessionStorage on disk. This function must be called right |
170 // after DOMStorageContextImpl is created, before it's used. | 186 // after DOMStorageContextImpl is created, before it's used. |
171 void SetSaveSessionStorageOnDisk(); | 187 void SetSaveSessionStorageOnDisk(); |
172 | 188 |
173 // Deletes all namespaces which don't have an associated DOMStorageNamespace | 189 // Deletes all namespaces which don't have an associated DOMStorageNamespace |
174 // alive. This function is used for deleting possible leftover data after an | 190 // alive. This function is used for deleting possible leftover data after an |
175 // unclean exit. | 191 // unclean exit. |
176 void StartScavengingUnusedSessionStorage(); | 192 void StartScavengingUnusedSessionStorage(); |
177 | 193 |
| 194 // Frees up memory when possible. Purges caches and schedules commits |
| 195 // depending on the given |purge_option|. |
| 196 void PurgeMemory(PurgeOption purge_option); |
| 197 |
178 // base::trace_event::MemoryDumpProvider implementation. | 198 // base::trace_event::MemoryDumpProvider implementation. |
179 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, | 199 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, |
180 base::trace_event::ProcessMemoryDump* pmd) override; | 200 base::trace_event::ProcessMemoryDump* pmd) override; |
181 | 201 |
182 private: | 202 private: |
183 friend class DOMStorageContextImplTest; | 203 friend class DOMStorageContextImplTest; |
184 FRIEND_TEST_ALL_PREFIXES(DOMStorageContextImplTest, Basics); | 204 FRIEND_TEST_ALL_PREFIXES(DOMStorageContextImplTest, Basics); |
185 friend class base::RefCountedThreadSafe<DOMStorageContextImpl>; | 205 friend class base::RefCountedThreadSafe<DOMStorageContextImpl>; |
186 typedef std::map<int64_t, scoped_refptr<DOMStorageNamespace>> | |
187 StorageNamespaceMap; | |
188 | 206 |
189 ~DOMStorageContextImpl() override; | 207 ~DOMStorageContextImpl() override; |
190 | 208 |
191 void ClearSessionOnlyOrigins(); | 209 void ClearSessionOnlyOrigins(); |
192 | 210 |
193 // For scavenging unused sessionStorages. | 211 // For scavenging unused sessionStorages. |
194 void FindUnusedNamespaces(); | 212 void FindUnusedNamespaces(); |
195 void FindUnusedNamespacesInCommitSequence( | 213 void FindUnusedNamespacesInCommitSequence( |
196 const std::set<std::string>& namespace_ids_in_use, | 214 const std::set<std::string>& namespace_ids_in_use, |
197 const std::set<std::string>& protected_persistent_session_ids); | 215 const std::set<std::string>& protected_persistent_session_ids); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 bool scavenging_started_; | 249 bool scavenging_started_; |
232 std::vector<std::string> deletable_persistent_namespace_ids_; | 250 std::vector<std::string> deletable_persistent_namespace_ids_; |
233 | 251 |
234 // Persistent namespace IDs to protect from gradual deletion (they will | 252 // Persistent namespace IDs to protect from gradual deletion (they will |
235 // be needed for session restore). | 253 // be needed for session restore). |
236 std::set<std::string> protected_persistent_session_ids_; | 254 std::set<std::string> protected_persistent_session_ids_; |
237 | 255 |
238 // Mapping between persistent namespace IDs and namespace IDs for | 256 // Mapping between persistent namespace IDs and namespace IDs for |
239 // sessionStorage. | 257 // sessionStorage. |
240 std::map<std::string, int64_t> persistent_namespace_id_to_namespace_id_; | 258 std::map<std::string, int64_t> persistent_namespace_id_to_namespace_id_; |
| 259 |
| 260 // For cleaning up unused databases more aggressively. |
| 261 bool is_low_end_device_; |
241 }; | 262 }; |
242 | 263 |
243 } // namespace content | 264 } // namespace content |
244 | 265 |
245 #endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ | 266 #endif // CONTENT_BROWSER_DOM_STORAGE_DOM_STORAGE_CONTEXT_IMPL_H_ |
OLD | NEW |