| 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 175fa6188a31bf2d604f56db0bdc5aacbea1c6f0..6619b31a6fa68d955494fdb544fa033e84e8719f 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -566,6 +566,49 @@ void ServiceWorkerVersion::RunAfterStartWorker(
|
| error_callback, task));
|
| }
|
|
|
| +void ServiceWorkerVersion::DispatchFetchEvent(
|
| + int response_request_id,
|
| + int finish_request_id,
|
| + const ServiceWorkerFetchRequest& fetch_request,
|
| + const FetchResponseCallback& response_callback) {
|
| + ServiceWorkerMsg_FetchEvent message(response_request_id, finish_request_id,
|
| + fetch_request);
|
| +
|
| + DCHECK_EQ(RUNNING, running_status());
|
| + PendingRequest<StatusCallback>* response_request =
|
| + custom_requests_.Lookup(response_request_id);
|
| + PendingRequest<StatusCallback>* finish_request =
|
| + custom_requests_.Lookup(finish_request_id);
|
| + DCHECK(response_request) << "Invalid request id for response request";
|
| + DCHECK(!response_request->listener)
|
| + << "Request already dispatched an IPC for response request";
|
| + DCHECK(finish_request) << "Invalid request id for finish request";
|
| + DCHECK(!finish_request->listener)
|
| + << "Request already dispatched an IPC for finish request";
|
| +
|
| + ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message);
|
| + if (status != SERVICE_WORKER_OK) {
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(response_request->callback, status));
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(finish_request->callback, status));
|
| + custom_requests_.Remove(response_request_id);
|
| + custom_requests_.Remove(finish_request_id);
|
| + return;
|
| + }
|
| +
|
| + response_request->listener.reset(
|
| + new EventResponseHandler<ServiceWorkerHostMsg_FetchEventResponse,
|
| + FetchResponseCallback>(
|
| + embedded_worker()->AsWeakPtr(), response_request_id,
|
| + response_callback));
|
| + finish_request->listener.reset(
|
| + new EventResponseHandler<ServiceWorkerHostMsg_FetchEventFinished,
|
| + WebStatusCallback>(
|
| + embedded_worker()->AsWeakPtr(), finish_request_id,
|
| + base::Bind(&ServiceWorkerVersion::OnSimpleEventResponse, this)));
|
| +}
|
| +
|
| void ServiceWorkerVersion::AddControllee(
|
| ServiceWorkerProviderHost* provider_host) {
|
| const std::string& uuid = provider_host->client_uuid();
|
|
|