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

Unified Diff: content/browser/service_worker/service_worker_storage.cc

Issue 1393783002: ServiceWorker: Schedule DeleteAndStartOver when failing to store resource ids (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_storage.cc
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc
index 8f0bba109dae3c7d4fdea1490d3f7c09c6e9eebb..9f95279ffe58bbad8b03fd49c3d340670ad1754e 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -536,30 +536,31 @@ ServiceWorkerStorage::CreateResponseMetadataWriter(int64 response_id) {
new ServiceWorkerResponseMetadataWriter(response_id, disk_cache()));
}
-void ServiceWorkerStorage::StoreUncommittedResponseId(int64 id) {
- DCHECK_NE(kInvalidServiceWorkerResponseId, id);
+void ServiceWorkerStorage::StoreUncommittedResourceId(int64 resource_id) {
+ DCHECK_NE(kInvalidServiceWorkerResponseId, resource_id);
DCHECK_EQ(INITIALIZED, state_);
if (!has_checked_for_stale_resources_)
DeleteStaleResources();
- database_task_manager_->GetTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(base::IgnoreResult(
- &ServiceWorkerDatabase::WriteUncommittedResourceIds),
- base::Unretained(database_.get()),
- std::set<int64>(&id, &id + 1)));
+ PostTaskAndReplyWithResult(
+ database_task_manager_->GetTaskRunner(), FROM_HERE,
+ base::Bind(&ServiceWorkerDatabase::WriteUncommittedResourceIds,
+ base::Unretained(database_.get()),
+ std::set<int64>(&resource_id, &resource_id + 1)),
+ base::Bind(&ServiceWorkerStorage::DidAccessDatabase,
+ weak_factory_.GetWeakPtr()));
}
-void ServiceWorkerStorage::DoomUncommittedResponse(int64 id) {
- DCHECK_NE(kInvalidServiceWorkerResponseId, id);
- database_task_manager_->GetTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(base::IgnoreResult(
- &ServiceWorkerDatabase::PurgeUncommittedResourceIds),
- base::Unretained(database_.get()),
- std::set<int64>(&id, &id + 1)));
- StartPurgingResources(std::vector<int64>(1, id));
nhiroki 2015/10/07 06:10:27 |id| should not be stored in the diskcache yet, so
+void ServiceWorkerStorage::ClearUncommittedResourceId(int64 resource_id) {
+ DCHECK_NE(kInvalidServiceWorkerResponseId, resource_id);
+ PostTaskAndReplyWithResult(
+ database_task_manager_->GetTaskRunner(), FROM_HERE,
+ base::Bind(&ServiceWorkerDatabase::ClearUncommittedResourceIds,
+ base::Unretained(database_.get()),
+ std::set<int64>(&resource_id, &resource_id + 1)),
+ base::Bind(&ServiceWorkerStorage::DidAccessDatabase,
+ weak_factory_.GetWeakPtr()));
}
void ServiceWorkerStorage::StoreUserData(
@@ -733,12 +734,13 @@ void ServiceWorkerStorage::NotifyDoneInstallingRegistration(
for (const auto& resource : resources)
ids.insert(resource.resource_id);
- database_task_manager_->GetTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(base::IgnoreResult(
- &ServiceWorkerDatabase::PurgeUncommittedResourceIds),
- base::Unretained(database_.get()),
- ids));
+ PostTaskAndReplyWithResult(
+ database_task_manager_->GetTaskRunner(), FROM_HERE,
+ base::Bind(
+ &ServiceWorkerDatabase::MoveResourceIdsFromUncommittedToPurgeable,
+ base::Unretained(database_.get()), ids),
+ base::Bind(&ServiceWorkerStorage::DidAccessDatabase,
+ weak_factory_.GetWeakPtr()));
}
}
@@ -1152,6 +1154,12 @@ void ServiceWorkerStorage::DidDeleteRegistration(
StartPurgingResources(newly_purgeable_resources);
}
+void ServiceWorkerStorage::DidAccessDatabase(
+ ServiceWorkerDatabase::Status status) {
+ if (status != ServiceWorkerDatabase::STATUS_OK)
+ ScheduleDeleteAndStartOver();
+}
+
void ServiceWorkerStorage::DidStoreUserData(
const StatusCallback& callback,
ServiceWorkerDatabase::Status status) {
@@ -1502,7 +1510,7 @@ void ServiceWorkerStorage::CollectStaleResourcesFromDB(
return;
}
- status = database->PurgeUncommittedResourceIds(ids);
+ status = database->MoveResourceIdsFromUncommittedToPurgeable(ids);
if (status != ServiceWorkerDatabase::STATUS_OK) {
original_task_runner->PostTask(
FROM_HERE,

Powered by Google App Engine
This is Rietveld 408576698