OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #include "chrome/browser/in_process_webkit/dom_storage_context.h" | 5 #include "chrome/browser/in_process_webkit/dom_storage_context.h" |
6 | 6 |
7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "chrome/browser/chrome_thread.h" | 9 #include "chrome/browser/chrome_thread.h" |
10 #include "chrome/browser/in_process_webkit/dom_storage_area.h" | 10 #include "chrome/browser/in_process_webkit/dom_storage_area.h" |
11 #include "chrome/browser/in_process_webkit/dom_storage_namespace.h" | 11 #include "chrome/browser/in_process_webkit/dom_storage_namespace.h" |
12 #include "chrome/browser/in_process_webkit/webkit_context.h" | 12 #include "chrome/browser/in_process_webkit/webkit_context.h" |
13 #include "chrome/common/dom_storage_common.h" | 13 #include "chrome/common/dom_storage_common.h" |
| 14 #include "webkit/glue/glue_util.h" |
14 | 15 |
15 static const char* kLocalStorageDirectory = "Local Storage"; | 16 const FilePath::CharType DOMStorageContext::kLocalStorageDirectory[] = |
| 17 FILE_PATH_LITERAL("Local Storage"); |
| 18 |
| 19 const FilePath::CharType DOMStorageContext::kLocalStorageExtension[] = |
| 20 FILE_PATH_LITERAL(".localstorage"); |
| 21 |
| 22 static const FilePath::CharType kLocalStorageOldPath[] = |
| 23 FILE_PATH_LITERAL("localStorage"); |
16 | 24 |
17 // TODO(jorlow): Remove after Chrome 4 ships. | 25 // TODO(jorlow): Remove after Chrome 4 ships. |
18 static void MigrateLocalStorageDirectory(const FilePath& data_path) { | 26 static void MigrateLocalStorageDirectory(const FilePath& data_path) { |
19 FilePath new_path = data_path.AppendASCII(kLocalStorageDirectory); | 27 FilePath new_path = data_path.Append( |
20 FilePath old_path = data_path.AppendASCII("localStorage"); | 28 DOMStorageContext::kLocalStorageDirectory); |
| 29 FilePath old_path = data_path.Append(kLocalStorageOldPath); |
21 if (!file_util::DirectoryExists(new_path) && | 30 if (!file_util::DirectoryExists(new_path) && |
22 file_util::DirectoryExists(old_path)) { | 31 file_util::DirectoryExists(old_path)) { |
23 file_util::Move(old_path, new_path); | 32 file_util::Move(old_path, new_path); |
24 } | 33 } |
25 } | 34 } |
26 | 35 |
27 DOMStorageContext::DOMStorageContext(WebKitContext* webkit_context) | 36 DOMStorageContext::DOMStorageContext(WebKitContext* webkit_context) |
28 : last_storage_area_id_(0), | 37 : last_storage_area_id_(0), |
29 last_session_storage_namespace_id_on_ui_thread_(kLocalStorageNamespaceId), | 38 last_session_storage_namespace_id_on_ui_thread_(kLocalStorageNamespaceId), |
30 last_session_storage_namespace_id_on_io_thread_(kLocalStorageNamespaceId), | 39 last_session_storage_namespace_id_on_io_thread_(kLocalStorageNamespaceId), |
(...skipping 21 matching lines...) Expand all Loading... |
52 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); | 61 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
53 DOMStorageNamespace* storage_namespace = GetStorageNamespace( | 62 DOMStorageNamespace* storage_namespace = GetStorageNamespace( |
54 kLocalStorageNamespaceId); | 63 kLocalStorageNamespaceId); |
55 if (storage_namespace) | 64 if (storage_namespace) |
56 return storage_namespace; | 65 return storage_namespace; |
57 | 66 |
58 FilePath data_path = webkit_context_->data_path(); | 67 FilePath data_path = webkit_context_->data_path(); |
59 FilePath dir_path; | 68 FilePath dir_path; |
60 if (!data_path.empty()) { | 69 if (!data_path.empty()) { |
61 MigrateLocalStorageDirectory(data_path); | 70 MigrateLocalStorageDirectory(data_path); |
62 dir_path = data_path.AppendASCII(kLocalStorageDirectory); | 71 dir_path = data_path.Append(kLocalStorageDirectory); |
63 } | 72 } |
64 return DOMStorageNamespace::CreateLocalStorageNamespace(this, dir_path); | 73 return DOMStorageNamespace::CreateLocalStorageNamespace(this, dir_path); |
65 } | 74 } |
66 | 75 |
67 DOMStorageNamespace* DOMStorageContext::NewSessionStorage() { | 76 DOMStorageNamespace* DOMStorageContext::NewSessionStorage() { |
68 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); | 77 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
69 return DOMStorageNamespace::CreateSessionStorageNamespace(this); | 78 return DOMStorageNamespace::CreateSessionStorageNamespace(this); |
70 } | 79 } |
71 | 80 |
72 int64 DOMStorageContext::AllocateStorageAreaId() { | 81 int64 DOMStorageContext::AllocateStorageAreaId() { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 if (local_storage) | 177 if (local_storage) |
169 local_storage->PurgeMemory(); | 178 local_storage->PurgeMemory(); |
170 } | 179 } |
171 | 180 |
172 void DOMStorageContext::DeleteDataModifiedSince(const base::Time& cutoff) { | 181 void DOMStorageContext::DeleteDataModifiedSince(const base::Time& cutoff) { |
173 // Make sure that we don't delete a database that's currently being accessed | 182 // Make sure that we don't delete a database that's currently being accessed |
174 // by unloading all of the databases temporarily. | 183 // by unloading all of the databases temporarily. |
175 PurgeMemory(); | 184 PurgeMemory(); |
176 | 185 |
177 file_util::FileEnumerator file_enumerator( | 186 file_util::FileEnumerator file_enumerator( |
178 webkit_context_->data_path().AppendASCII(kLocalStorageDirectory), false, | 187 webkit_context_->data_path().Append(kLocalStorageDirectory), false, |
179 file_util::FileEnumerator::FILES); | 188 file_util::FileEnumerator::FILES); |
180 for (FilePath path = file_enumerator.Next(); !path.value().empty(); | 189 for (FilePath path = file_enumerator.Next(); !path.value().empty(); |
181 path = file_enumerator.Next()) { | 190 path = file_enumerator.Next()) { |
182 file_util::FileEnumerator::FindInfo find_info; | 191 file_util::FileEnumerator::FindInfo find_info; |
183 file_enumerator.GetFindInfo(&find_info); | 192 file_enumerator.GetFindInfo(&find_info); |
184 if (file_util::HasFileBeenModifiedSince(find_info, cutoff)) | 193 if (file_util::HasFileBeenModifiedSince(find_info, cutoff)) |
185 file_util::Delete(path, false); | 194 file_util::Delete(path, false); |
186 } | 195 } |
187 } | 196 } |
188 | 197 |
| 198 void DOMStorageContext::DeleteLocalStorageFile(const FilePath& file_path) { |
| 199 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
| 200 |
| 201 // Make sure that we don't delete a database that's currently being accessed |
| 202 // by unloading all of the databases temporarily. |
| 203 // TODO(bulach): both this method and DeleteDataModifiedSince could purge |
| 204 // only the memory used by the specific file instead of all memory at once. |
| 205 // See http://code.google.com/p/chromium/issues/detail?id=32000 |
| 206 PurgeMemory(); |
| 207 file_util::Delete(file_path, false); |
| 208 } |
| 209 |
| 210 void DOMStorageContext::DeleteAllLocalStorageFiles() { |
| 211 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
| 212 |
| 213 // Make sure that we don't delete a database that's currently being accessed |
| 214 // by unloading all of the databases temporarily. |
| 215 PurgeMemory(); |
| 216 |
| 217 file_util::FileEnumerator file_enumerator( |
| 218 webkit_context_->data_path().Append(kLocalStorageDirectory), false, |
| 219 file_util::FileEnumerator::FILES); |
| 220 for (FilePath file_path = file_enumerator.Next(); !file_path.empty(); |
| 221 file_path = file_enumerator.Next()) { |
| 222 if (file_path.Extension() == kLocalStorageExtension) |
| 223 file_util::Delete(file_path, false); |
| 224 } |
| 225 } |
| 226 |
189 void DOMStorageContext::CompleteCloningSessionStorage( | 227 void DOMStorageContext::CompleteCloningSessionStorage( |
190 DOMStorageContext* context, int64 existing_id, int64 clone_id) { | 228 DOMStorageContext* context, int64 existing_id, int64 clone_id) { |
191 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); | 229 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
192 DOMStorageNamespace* existing_namespace = | 230 DOMStorageNamespace* existing_namespace = |
193 context->GetStorageNamespace(existing_id); | 231 context->GetStorageNamespace(existing_id); |
194 // If nothing exists, then there's nothing to clone. | 232 // If nothing exists, then there's nothing to clone. |
195 if (existing_namespace) | 233 if (existing_namespace) |
196 existing_namespace->Copy(clone_id); | 234 existing_namespace->Copy(clone_id); |
197 } | 235 } |
OLD | NEW |