Chromium Code Reviews| Index: content/browser/service_worker/service_worker_version.cc |
| diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc |
| index 337e676375282f1ea3cf4ccee6738d735cd5aef8..6051f70eb9e84f36b5242a08ddf03391b110f115 100644 |
| --- a/content/browser/service_worker/service_worker_version.cc |
| +++ b/content/browser/service_worker/service_worker_version.cc |
| @@ -564,6 +564,20 @@ int ServiceWorkerVersion::StartRequestWithCustomTimeout( |
| return request_id; |
| } |
| +bool ServiceWorkerVersion::StartExternalRequest( |
| + const std::string& request_uuid) { |
| + // It's possible that the renderer is lying or the version started stopping |
| + // right around the time of the IPC. |
| + if (running_status() != EmbeddedWorkerStatus::RUNNING) |
| + return false; |
| + |
|
michaeln
2016/10/06 19:22:31
where does external_request_uuid_to_request_id_[uu
lazyboy
2016/10/07 06:00:57
It's supposed to be here, but I don't see it in th
|
| + ignore_result( |
| + StartRequest(ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST, |
| + base::Bind(&ServiceWorkerVersion::CleanUpExternalRequest, |
| + this, request_uuid))); |
| + return true; |
| +} |
| + |
| bool ServiceWorkerVersion::FinishRequest(int request_id, |
| bool was_handled, |
| base::Time dispatch_event_time) { |
| @@ -589,6 +603,27 @@ bool ServiceWorkerVersion::FinishRequest(int request_id, |
| return true; |
| } |
| +bool ServiceWorkerVersion::FinishExternalRequest( |
| + const std::string& request_uuid) { |
| + // It's possible that the renderer is lying or the version started stopping |
| + // right around the time of the IPC. |
| + if (running_status() != EmbeddedWorkerStatus::RUNNING) |
| + return false; |
| + |
| + RequestUUIDToRequestIDMap::iterator iter = |
| + external_request_uuid_to_request_id_.find(request_uuid); |
| + if (iter != external_request_uuid_to_request_id_.end()) { |
| + int request_id = iter->second; |
| + external_request_uuid_to_request_id_.erase(iter); |
| + return FinishRequest(request_id, true, base::Time::Now()); |
| + } |
| + |
| + // It is possible that the request was cancelled or timed out before and we |
| + // won't find it in |external_request_uuid_to_request_id_|. |
| + // Return true so we don't kill the process. |
| + return true; |
| +} |
| + |
| void ServiceWorkerVersion::RunAfterStartWorker( |
| ServiceWorkerMetrics::EventType purpose, |
| const base::Closure& task, |
| @@ -1801,4 +1836,12 @@ void ServiceWorkerVersion::FinishStartWorker(ServiceWorkerStatusCode status) { |
| RunCallbacks(this, &start_callbacks_, status); |
| } |
| +void ServiceWorkerVersion::CleanUpExternalRequest( |
| + const std::string& request_uuid, |
| + ServiceWorkerStatusCode status) { |
| + if (status == SERVICE_WORKER_OK) |
| + return; |
| + external_request_uuid_to_request_id_.erase(request_uuid); |
| +} |
| + |
| } // namespace content |