Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1956)

Unified Diff: content/browser/service_worker/service_worker_version.cc

Issue 2034663002: ServiceWorker: Keep the worker alive until FetchEvent.waitUntil settles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698