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..b1468442088b086147cee4e82a70e142b0144560 100644 |
--- a/content/browser/service_worker/service_worker_storage.cc |
+++ b/content/browser/service_worker/service_worker_storage.cc |
@@ -536,30 +536,35 @@ 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); |
falken
2015/10/15 05:03:40
kInvalidServiceWorkerResourceId?
probably we want
nhiroki
2015/10/16 09:15:40
Yeah, I'll make a follow-up patch to deprecate kIn
|
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::DidWriteUncommittedResourceIds, |
+ 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)); |
+void ServiceWorkerStorage::DoomUncommittedResource(int64 resource_id) { |
+ DCHECK_NE(kInvalidServiceWorkerResponseId, resource_id); |
+ DoomUncommittedResources(std::set<int64>(&resource_id, &resource_id + 1)); |
+} |
+ |
+void ServiceWorkerStorage::DoomUncommittedResources( |
+ const std::set<int64>& resource_ids) { |
+ PostTaskAndReplyWithResult( |
+ database_task_manager_->GetTaskRunner(), FROM_HERE, |
+ base::Bind(&ServiceWorkerDatabase::PurgeUncommittedResourceIds, |
+ base::Unretained(database_.get()), resource_ids), |
+ base::Bind(&ServiceWorkerStorage::DidPurgeUncommittedResourceIds, |
+ weak_factory_.GetWeakPtr(), resource_ids)); |
} |
void ServiceWorkerStorage::StoreUserData( |
@@ -729,16 +734,10 @@ void ServiceWorkerStorage::NotifyDoneInstallingRegistration( |
ResourceList resources; |
version->script_cache_map()->GetResources(&resources); |
- std::set<int64> ids; |
+ std::set<int64> resource_ids; |
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)); |
+ resource_ids.insert(resource.resource_id); |
+ DoomUncommittedResources(resource_ids); |
} |
} |
@@ -1152,6 +1151,22 @@ void ServiceWorkerStorage::DidDeleteRegistration( |
StartPurgingResources(newly_purgeable_resources); |
} |
+void ServiceWorkerStorage::DidWriteUncommittedResourceIds( |
+ ServiceWorkerDatabase::Status status) { |
+ if (status != ServiceWorkerDatabase::STATUS_OK) |
falken
2015/10/15 05:03:40
Do we have/want UMA for delete and start over freq
nhiroki
2015/10/16 09:15:40
What does "frequency" means? The ratio of DeleteAn
falken
2015/10/19 04:09:35
Yea... I didn't have something specific in mind, j
nhiroki
2015/10/19 09:50:42
We'd like to monitor two things: (1) how many user
|
+ ScheduleDeleteAndStartOver(); |
+} |
+ |
+void ServiceWorkerStorage::DidPurgeUncommittedResourceIds( |
+ const std::set<int64>& resource_ids, |
+ ServiceWorkerDatabase::Status status) { |
+ if (status != ServiceWorkerDatabase::STATUS_OK) { |
+ ScheduleDeleteAndStartOver(); |
+ return; |
+ } |
+ StartPurgingResources(resource_ids); |
+} |
+ |
void ServiceWorkerStorage::DidStoreUserData( |
const StatusCallback& callback, |
ServiceWorkerDatabase::Status status) { |
@@ -1388,10 +1403,18 @@ void ServiceWorkerStorage::DeleteOldDiskCache() { |
} |
void ServiceWorkerStorage::StartPurgingResources( |
- const std::vector<int64>& ids) { |
+ const std::set<int64>& resource_ids) { |
+ DCHECK(has_checked_for_stale_resources_); |
+ for (int64 resource_id : resource_ids) |
+ purgeable_resource_ids_.push_back(resource_id); |
+ ContinuePurgingResources(); |
+} |
+ |
+void ServiceWorkerStorage::StartPurgingResources( |
+ const std::vector<int64>& resource_ids) { |
DCHECK(has_checked_for_stale_resources_); |
- for (const auto& id : ids) |
- purgeable_resource_ids_.push_back(id); |
+ for (int64 resource_id : resource_ids) |
+ purgeable_resource_ids_.push_back(resource_id); |
ContinuePurgingResources(); |
} |