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, |