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

Side by Side Diff: webkit/appcache/appcache_storage_impl.cc

Issue 7210006: AppCaches which belong to hosted apps are not protected from deletion (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Test beautification. Created 9 years, 5 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) 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 <set> 7 #include <set>
8 8
9 #include "app/sql/connection.h" 9 #include "app/sql/connection.h"
10 #include "app/sql/transaction.h" 10 #include "app/sql/transaction.h"
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 last_deletable_response_rowid_(0), 1072 last_deletable_response_rowid_(0),
1073 ALLOW_THIS_IN_INITIALIZER_LIST(doom_callback_( 1073 ALLOW_THIS_IN_INITIALIZER_LIST(doom_callback_(
1074 this, &AppCacheStorageImpl::OnDeletedOneResponse)), 1074 this, &AppCacheStorageImpl::OnDeletedOneResponse)),
1075 ALLOW_THIS_IN_INITIALIZER_LIST(init_callback_( 1075 ALLOW_THIS_IN_INITIALIZER_LIST(init_callback_(
1076 this, &AppCacheStorageImpl::OnDiskCacheInitialized)), 1076 this, &AppCacheStorageImpl::OnDiskCacheInitialized)),
1077 database_(NULL), is_disabled_(false), 1077 database_(NULL), is_disabled_(false),
1078 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { 1078 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
1079 } 1079 }
1080 1080
1081 AppCacheStorageImpl::~AppCacheStorageImpl() { 1081 AppCacheStorageImpl::~AppCacheStorageImpl() {
1082 STLDeleteElements(&pending_simple_tasks_); 1082 STLDeleteElements(&pending_simple_tasks_);
michaeln 2011/07/14 00:42:34 I this this CL can be simplified a lot by posting
marja(google) 2011/07/14 10:31:59 Done.
1083 1083
1084 std::for_each(pending_quota_queries_.begin(), 1084 std::for_each(pending_quota_queries_.begin(),
1085 pending_quota_queries_.end(), 1085 pending_quota_queries_.end(),
1086 std::mem_fun(&DatabaseTask::CancelCompletion)); 1086 std::mem_fun(&DatabaseTask::CancelCompletion));
1087 std::for_each(scheduled_database_tasks_.begin(), 1087 std::for_each(scheduled_database_tasks_.begin(),
1088 scheduled_database_tasks_.end(), 1088 scheduled_database_tasks_.end(),
1089 std::mem_fun(&DatabaseTask::CancelCompletion)); 1089 std::mem_fun(&DatabaseTask::CancelCompletion));
1090 1090
1091 if (database_) 1091 if (database_)
1092 AppCacheThread::DeleteSoon(AppCacheThread::db(), FROM_HERE, database_); 1092 AppCacheThread::DeleteSoon(AppCacheThread::db(), FROM_HERE, database_);
(...skipping 27 matching lines...) Expand all
1120 task->Schedule(); 1120 task->Schedule();
1121 } 1121 }
1122 1122
1123 void AppCacheStorageImpl::GetAllInfo(Delegate* delegate) { 1123 void AppCacheStorageImpl::GetAllInfo(Delegate* delegate) {
1124 DCHECK(delegate); 1124 DCHECK(delegate);
1125 scoped_refptr<GetAllInfoTask> task(new GetAllInfoTask(this)); 1125 scoped_refptr<GetAllInfoTask> task(new GetAllInfoTask(this));
1126 task->AddDelegate(GetOrCreateDelegateReference(delegate)); 1126 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1127 task->Schedule(); 1127 task->Schedule();
1128 } 1128 }
1129 1129
1130 void AppCacheStorageImpl::SyncGetAllInfo(Delegate* delegate) {
1131 DCHECK(delegate);
1132 scoped_refptr<GetAllInfoTask> task(new GetAllInfoTask(this));
1133 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1134 task->Run();
1135 task->RunCompleted();
1136 }
1137
1130 void AppCacheStorageImpl::LoadCache(int64 id, Delegate* delegate) { 1138 void AppCacheStorageImpl::LoadCache(int64 id, Delegate* delegate) {
1131 DCHECK(delegate); 1139 DCHECK(delegate);
1132 if (is_disabled_) { 1140 if (is_disabled_) {
1133 delegate->OnCacheLoaded(NULL, id); 1141 delegate->OnCacheLoaded(NULL, id);
1134 return; 1142 return;
1135 } 1143 }
1136 1144
1137 AppCache* cache = working_set_.GetCache(id); 1145 AppCache* cache = working_set_.GetCache(id);
1138 if (cache) { 1146 if (cache) {
1139 delegate->OnCacheLoaded(cache, id); 1147 delegate->OnCacheLoaded(cache, id);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 delegate->OnGroupLoaded(group, manifest_url); 1195 delegate->OnGroupLoaded(group, manifest_url);
1188 return; 1196 return;
1189 } 1197 }
1190 1198
1191 task = new GroupLoadTask(manifest_url, this); 1199 task = new GroupLoadTask(manifest_url, this);
1192 task->AddDelegate(GetOrCreateDelegateReference(delegate)); 1200 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1193 task->Schedule(); 1201 task->Schedule();
1194 pending_group_loads_[manifest_url] = task.get(); 1202 pending_group_loads_[manifest_url] = task.get();
1195 } 1203 }
1196 1204
1205 void AppCacheStorageImpl::SyncLoadOrCreateGroup(
1206 const GURL& manifest_url, Delegate* delegate) {
1207 DCHECK(delegate);
1208 if (is_disabled_) {
1209 delegate->OnGroupLoaded(NULL, manifest_url);
1210 return;
1211 }
1212
1213 AppCacheGroup* group = working_set_.GetGroup(manifest_url);
1214 if (group) {
1215 delegate->OnGroupLoaded(group, manifest_url);
1216 scoped_refptr<DatabaseTask> update_task(
1217 new UpdateGroupLastAccessTimeTask(
1218 this, group, base::Time::Now()));
1219 update_task->Run();
1220 update_task->RunCompleted();
1221 return;
1222 }
1223
1224 if (usage_map_.find(manifest_url.GetOrigin()) == usage_map_.end()) {
1225 // No need to query the database, return a new group immediately.
1226 scoped_refptr<AppCacheGroup> group(new AppCacheGroup(
1227 service_, manifest_url, NewGroupId()));
1228 delegate->OnGroupLoaded(group, manifest_url);
1229 return;
1230 }
1231
1232 scoped_refptr<GroupLoadTask> task = new GroupLoadTask(manifest_url, this);
1233 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1234 task->Run();
1235 task->RunCompleted();
1236 }
1237
1197 void AppCacheStorageImpl::StoreGroupAndNewestCache( 1238 void AppCacheStorageImpl::StoreGroupAndNewestCache(
1198 AppCacheGroup* group, AppCache* newest_cache, Delegate* delegate) { 1239 AppCacheGroup* group, AppCache* newest_cache, Delegate* delegate) {
1199 // TODO(michaeln): distinguish between a simple update of an existing 1240 // TODO(michaeln): distinguish between a simple update of an existing
1200 // cache that just adds new master entry(s), and the insertion of a 1241 // cache that just adds new master entry(s), and the insertion of a
1201 // whole new cache. The StoreGroupAndCacheTask as written will handle 1242 // whole new cache. The StoreGroupAndCacheTask as written will handle
1202 // the simple update case in a very heavy weight way (delete all and 1243 // the simple update case in a very heavy weight way (delete all and
1203 // the reinsert all over again). 1244 // the reinsert all over again).
1204 DCHECK(group && delegate && newest_cache); 1245 DCHECK(group && delegate && newest_cache);
1205 scoped_refptr<StoreGroupAndCacheTask> task( 1246 scoped_refptr<StoreGroupAndCacheTask> task(
1206 new StoreGroupAndCacheTask(this, group, newest_cache)); 1247 new StoreGroupAndCacheTask(this, group, newest_cache));
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 1407
1367 void AppCacheStorageImpl::MakeGroupObsolete( 1408 void AppCacheStorageImpl::MakeGroupObsolete(
1368 AppCacheGroup* group, Delegate* delegate) { 1409 AppCacheGroup* group, Delegate* delegate) {
1369 DCHECK(group && delegate); 1410 DCHECK(group && delegate);
1370 scoped_refptr<MakeGroupObsoleteTask> task( 1411 scoped_refptr<MakeGroupObsoleteTask> task(
1371 new MakeGroupObsoleteTask(this, group)); 1412 new MakeGroupObsoleteTask(this, group));
1372 task->AddDelegate(GetOrCreateDelegateReference(delegate)); 1413 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1373 task->Schedule(); 1414 task->Schedule();
1374 } 1415 }
1375 1416
1417 void AppCacheStorageImpl::SyncMakeGroupObsolete(
1418 AppCacheGroup* group, Delegate* delegate) {
1419 DCHECK(group && delegate);
1420 scoped_refptr<MakeGroupObsoleteTask> task(
1421 new MakeGroupObsoleteTask(this, group));
1422 task->AddDelegate(GetOrCreateDelegateReference(delegate));
1423 task->Run();
1424 task->RunCompleted();
1425 }
1426
1376 AppCacheResponseReader* AppCacheStorageImpl::CreateResponseReader( 1427 AppCacheResponseReader* AppCacheStorageImpl::CreateResponseReader(
1377 const GURL& manifest_url, int64 response_id) { 1428 const GURL& manifest_url, int64 response_id) {
1378 return new AppCacheResponseReader(response_id, disk_cache()); 1429 return new AppCacheResponseReader(response_id, disk_cache());
1379 } 1430 }
1380 1431
1381 AppCacheResponseWriter* AppCacheStorageImpl::CreateResponseWriter( 1432 AppCacheResponseWriter* AppCacheStorageImpl::CreateResponseWriter(
1382 const GURL& manifest_url) { 1433 const GURL& manifest_url) {
1383 return new AppCacheResponseWriter(NewResponseId(), disk_cache()); 1434 return new AppCacheResponseWriter(NewResponseId(), disk_cache());
1384 } 1435 }
1385 1436
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 Disable(); 1622 Disable();
1572 if (!is_incognito_) { 1623 if (!is_incognito_) {
1573 VLOG(1) << "Deleting existing appcache data and starting over."; 1624 VLOG(1) << "Deleting existing appcache data and starting over.";
1574 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE, 1625 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE,
1575 NewRunnableFunction(DeleteDirectory, cache_directory_)); 1626 NewRunnableFunction(DeleteDirectory, cache_directory_));
1576 } 1627 }
1577 } 1628 }
1578 } 1629 }
1579 1630
1580 } // namespace appcache 1631 } // namespace appcache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698