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

Side by Side Diff: webkit/appcache/appcache_storage_impl.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
« no previous file with comments | « webkit/appcache/appcache_service.cc ('k') | webkit/database/database_tracker.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "webkit/appcache/appcache_storage_impl.h" 5 #include "webkit/appcache/appcache_storage_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 database->DeleteFallbackNameSpacesForCache(cache_record.cache_id) && 65 database->DeleteFallbackNameSpacesForCache(cache_record.cache_id) &&
66 database->DeleteOnlineWhiteListForCache(cache_record.cache_id) && 66 database->DeleteOnlineWhiteListForCache(cache_record.cache_id) &&
67 database->InsertDeletableResponseIds(*deletable_response_ids); 67 database->InsertDeletableResponseIds(*deletable_response_ids);
68 } else { 68 } else {
69 NOTREACHED() << "A existing group without a cache is unexpected"; 69 NOTREACHED() << "A existing group without a cache is unexpected";
70 success = database->DeleteGroup(group_id); 70 success = database->DeleteGroup(group_id);
71 } 71 }
72 return success; 72 return success;
73 } 73 }
74 74
75 // Deletes all appcache data (if clear_all_data is true), or session-only 75 // Destroys |database|. If there is appcache data to be deleted
76 // appcache data. Also, schedules the database to be destroyed. 76 // (|save_session_state| is false), deletes all appcache data (if
77 // |clear_all_data| is true), or session-only appcache data (otherwise).
77 void CleanUpOnDatabaseThread( 78 void CleanUpOnDatabaseThread(
78 AppCacheDatabase* database, 79 AppCacheDatabase* database,
79 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy, 80 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy,
80 bool clear_all_appcaches) { 81 bool clear_all_appcaches,
82 bool save_session_state) {
81 scoped_ptr<AppCacheDatabase> database_to_delete(database); 83 scoped_ptr<AppCacheDatabase> database_to_delete(database);
82 84
85 // If saving session state, only delete the database.
86 if (save_session_state)
87 return;
88
83 bool has_session_only_appcaches = 89 bool has_session_only_appcaches =
84 special_storage_policy.get() && 90 special_storage_policy.get() &&
85 special_storage_policy->HasSessionOnlyOrigins(); 91 special_storage_policy->HasSessionOnlyOrigins();
86 92
87 // Clearning only session-only databases, and there are none. 93 // Clearning only session-only databases, and there are none.
88 if (!clear_all_appcaches && !has_session_only_appcaches) 94 if (!clear_all_appcaches && !has_session_only_appcaches)
89 return; 95 return;
90 96
91 std::set<GURL> origins; 97 std::set<GURL> origins;
92 database->FindOriginsWithGroups(&origins); 98 database->FindOriginsWithGroups(&origins);
(...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 std::mem_fun(&DatabaseTask::CancelCompletion)); 1190 std::mem_fun(&DatabaseTask::CancelCompletion));
1185 std::for_each(scheduled_database_tasks_.begin(), 1191 std::for_each(scheduled_database_tasks_.begin(),
1186 scheduled_database_tasks_.end(), 1192 scheduled_database_tasks_.end(),
1187 std::mem_fun(&DatabaseTask::CancelCompletion)); 1193 std::mem_fun(&DatabaseTask::CancelCompletion));
1188 1194
1189 if (database_) { 1195 if (database_) {
1190 db_thread_->PostTask( 1196 db_thread_->PostTask(
1191 FROM_HERE, 1197 FROM_HERE,
1192 base::Bind(&CleanUpOnDatabaseThread, database_, 1198 base::Bind(&CleanUpOnDatabaseThread, database_,
1193 make_scoped_refptr(service_->special_storage_policy()), 1199 make_scoped_refptr(service_->special_storage_policy()),
1194 service()->clear_local_state_on_exit())); 1200 service()->clear_local_state_on_exit(),
1201 service()->save_session_state()));
1195 } 1202 }
1196 } 1203 }
1197 1204
1198 void AppCacheStorageImpl::Initialize(const FilePath& cache_directory, 1205 void AppCacheStorageImpl::Initialize(const FilePath& cache_directory,
1199 base::MessageLoopProxy* db_thread, 1206 base::MessageLoopProxy* db_thread,
1200 base::MessageLoopProxy* cache_thread) { 1207 base::MessageLoopProxy* cache_thread) {
1201 DCHECK(db_thread); 1208 DCHECK(db_thread);
1202 1209
1203 cache_directory_ = cache_directory; 1210 cache_directory_ = cache_directory;
1204 is_incognito_ = cache_directory_.empty(); 1211 is_incognito_ = cache_directory_.empty();
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 Disable(); 1678 Disable();
1672 if (!is_incognito_) { 1679 if (!is_incognito_) {
1673 VLOG(1) << "Deleting existing appcache data and starting over."; 1680 VLOG(1) << "Deleting existing appcache data and starting over.";
1674 db_thread_->PostTask( 1681 db_thread_->PostTask(
1675 FROM_HERE, base::Bind(&DeleteDirectory, cache_directory_)); 1682 FROM_HERE, base::Bind(&DeleteDirectory, cache_directory_));
1676 } 1683 }
1677 } 1684 }
1678 } 1685 }
1679 1686
1680 } // namespace appcache 1687 } // namespace appcache
OLDNEW
« no previous file with comments | « webkit/appcache/appcache_service.cc ('k') | webkit/database/database_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698