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 #include "webkit/dom_storage/dom_storage_context.h" | 5 #include "webkit/dom_storage/dom_storage_context.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/guid.h" | 10 #include "base/guid.h" |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 // which is backed by disk. | 163 // which is backed by disk. |
164 // TODO(marja): Purge sessionStorage, too. (Requires changes to the FastClear | 164 // TODO(marja): Purge sessionStorage, too. (Requires changes to the FastClear |
165 // functionality.) | 165 // functionality.) |
166 StorageNamespaceMap::iterator found = | 166 StorageNamespaceMap::iterator found = |
167 namespaces_.find(kLocalStorageNamespaceId); | 167 namespaces_.find(kLocalStorageNamespaceId); |
168 if (found != namespaces_.end()) | 168 if (found != namespaces_.end()) |
169 found->second->PurgeMemory(); | 169 found->second->PurgeMemory(); |
170 } | 170 } |
171 | 171 |
172 void DomStorageContext::Shutdown() { | 172 void DomStorageContext::Shutdown() { |
| 173 LOG(ERROR) << "DomStorageContext::Shutdown"; |
173 is_shutdown_ = true; | 174 is_shutdown_ = true; |
174 StorageNamespaceMap::const_iterator it = namespaces_.begin(); | 175 StorageNamespaceMap::const_iterator it = namespaces_.begin(); |
175 for (; it != namespaces_.end(); ++it) | 176 for (; it != namespaces_.end(); ++it) |
176 it->second->Shutdown(); | 177 it->second->Shutdown(); |
177 | 178 |
178 if (localstorage_directory_.empty() && !session_storage_database_.get()) | 179 if (localstorage_directory_.empty() && !session_storage_database_.get()) { |
| 180 LOG(ERROR) << "No databases"; |
179 return; | 181 return; |
| 182 } |
180 | 183 |
181 // Respect the content policy settings about what to | 184 // Respect the content policy settings about what to |
182 // keep and what to discard. | 185 // keep and what to discard. |
183 if (force_keep_session_state_) | 186 if (force_keep_session_state_) { |
| 187 LOG(ERROR) << "Saving the session state"; |
184 return; // Keep everything. | 188 return; // Keep everything. |
| 189 } |
185 | 190 |
186 bool has_session_only_origins = | 191 bool has_session_only_origins = |
187 special_storage_policy_.get() && | 192 special_storage_policy_.get() && |
188 special_storage_policy_->HasSessionOnlyOrigins(); | 193 special_storage_policy_->HasSessionOnlyOrigins(); |
189 | 194 |
190 if (has_session_only_origins) { | 195 if (has_session_only_origins) { |
| 196 LOG(ERROR) << "There is session only data to clear"; |
191 // We may have to delete something. We continue on the | 197 // We may have to delete something. We continue on the |
192 // commit sequence after area shutdown tasks have cycled | 198 // commit sequence after area shutdown tasks have cycled |
193 // thru that sequence (and closed their database files). | 199 // thru that sequence (and closed their database files). |
194 bool success = task_runner_->PostShutdownBlockingTask( | 200 bool success = task_runner_->PostShutdownBlockingTask( |
195 FROM_HERE, | 201 FROM_HERE, |
196 DomStorageTaskRunner::COMMIT_SEQUENCE, | 202 DomStorageTaskRunner::COMMIT_SEQUENCE, |
197 base::Bind(&DomStorageContext::ClearSessionOnlyOrigins, this)); | 203 base::Bind(&DomStorageContext::ClearSessionOnlyOrigins, this)); |
198 DCHECK(success); | 204 DCHECK(success); |
199 } | 205 } |
200 } | 206 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 CreateSessionNamespace(new_id, new_persistent_id); | 305 CreateSessionNamespace(new_id, new_persistent_id); |
300 } | 306 } |
301 | 307 |
302 void DomStorageContext::ClearSessionOnlyOrigins() { | 308 void DomStorageContext::ClearSessionOnlyOrigins() { |
303 if (!localstorage_directory_.empty()) { | 309 if (!localstorage_directory_.empty()) { |
304 std::vector<LocalStorageUsageInfo> infos; | 310 std::vector<LocalStorageUsageInfo> infos; |
305 const bool kDontIncludeFileInfo = false; | 311 const bool kDontIncludeFileInfo = false; |
306 GetLocalStorageUsage(&infos, kDontIncludeFileInfo); | 312 GetLocalStorageUsage(&infos, kDontIncludeFileInfo); |
307 for (size_t i = 0; i < infos.size(); ++i) { | 313 for (size_t i = 0; i < infos.size(); ++i) { |
308 const GURL& origin = infos[i].origin; | 314 const GURL& origin = infos[i].origin; |
309 if (special_storage_policy_->IsStorageProtected(origin)) | 315 LOG(ERROR) << "Data for origin " << origin; |
| 316 if (special_storage_policy_->IsStorageProtected(origin)) { |
| 317 LOG(ERROR) << "Was protected"; |
310 continue; | 318 continue; |
311 if (!special_storage_policy_->IsStorageSessionOnly(origin)) | 319 } |
| 320 if (!special_storage_policy_->IsStorageSessionOnly(origin)) { |
| 321 LOG(ERROR) << "Not session only"; |
312 continue; | 322 continue; |
| 323 } |
313 | 324 |
| 325 LOG(ERROR) << "Clearing it"; |
314 const bool kNotRecursive = false; | 326 const bool kNotRecursive = false; |
315 FilePath database_file_path = localstorage_directory_.Append( | 327 FilePath database_file_path = localstorage_directory_.Append( |
316 DomStorageArea::DatabaseFileNameFromOrigin(origin)); | 328 DomStorageArea::DatabaseFileNameFromOrigin(origin)); |
317 file_util::Delete(database_file_path, kNotRecursive); | 329 file_util::Delete(database_file_path, kNotRecursive); |
318 file_util::Delete( | 330 file_util::Delete( |
319 DomStorageDatabase::GetJournalFilePath(database_file_path), | 331 DomStorageDatabase::GetJournalFilePath(database_file_path), |
320 kNotRecursive); | 332 kNotRecursive); |
321 } | 333 } |
322 } | 334 } |
323 if (session_storage_database_.get()) { | 335 if (session_storage_database_.get()) { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 if (!deletable_persistent_namespace_ids_.empty()) { | 426 if (!deletable_persistent_namespace_ids_.empty()) { |
415 task_runner_->PostDelayedTask( | 427 task_runner_->PostDelayedTask( |
416 FROM_HERE, base::Bind( | 428 FROM_HERE, base::Bind( |
417 &DomStorageContext::DeleteNextUnusedNamespace, | 429 &DomStorageContext::DeleteNextUnusedNamespace, |
418 this), | 430 this), |
419 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds)); | 431 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds)); |
420 } | 432 } |
421 } | 433 } |
422 | 434 |
423 } // namespace dom_storage | 435 } // namespace dom_storage |
OLD | NEW |