Chromium Code Reviews| 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, |