| Index: content/renderer/service_worker/service_worker_context_client.cc
|
| diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
|
| index 097d14c961bf45379c780382ce950e34577b3177..b69364f7c462e84f05b68b0d1ebbed85912b8074 100644
|
| --- a/content/renderer/service_worker/service_worker_context_client.cc
|
| +++ b/content/renderer/service_worker/service_worker_context_client.cc
|
| @@ -280,6 +280,8 @@ struct ServiceWorkerContextClient::WorkerContextData {
|
| using PushEventCallbacksMap =
|
| IDMap<std::unique_ptr<const DispatchPushEventCallback>>;
|
| using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
|
| + using FetchResponseReceiverMap =
|
| + IDMap<std::unique_ptr<mojom::ServiceWorkerFetchResponseReceiverPtr>>;
|
| using ExtendableMessageEventCallbacksMap =
|
| IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>;
|
| using NavigationPreloadRequestsMap = IDMap<
|
| @@ -348,6 +350,8 @@ struct ServiceWorkerContextClient::WorkerContextData {
|
| // Pending callbacks for Fetch Events.
|
| FetchEventCallbacksMap fetch_event_callbacks;
|
|
|
| + FetchResponseReceiverMap fetch_response_receivers;
|
| +
|
| // Pending callbacks for Extendable Message Events.
|
| ExtendableMessageEventCallbacksMap message_event_callbacks;
|
|
|
| @@ -864,21 +868,45 @@ void ServiceWorkerContextClient::didHandleInstallEvent(
|
| void ServiceWorkerContextClient::respondToFetchEvent(
|
| int fetch_event_id,
|
| double event_dispatch_time) {
|
| - Send(new ServiceWorkerHostMsg_FetchEventResponse(
|
| - GetRoutingID(), fetch_event_id,
|
| - SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(),
|
| - base::Time::FromDoubleT(event_dispatch_time)));
|
| + mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
|
| + context_->fetch_response_receivers.Lookup(fetch_event_id));
|
| + (*response_receiver)
|
| + ->OnFallback(base::Time::FromDoubleT(event_dispatch_time));
|
| + context_->fetch_response_receivers.Remove(fetch_event_id);
|
| }
|
|
|
| -void ServiceWorkerContextClient::respondToFetchEvent(
|
| +void ServiceWorkerContextClient::respondToFetchEventWithResponse(
|
| int fetch_event_id,
|
| const blink::WebServiceWorkerResponse& web_response,
|
| double event_dispatch_time) {
|
| - Send(new ServiceWorkerHostMsg_FetchEventResponse(
|
| - GetRoutingID(), fetch_event_id,
|
| - SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
|
| - GetServiceWorkerResponseFromWebResponse(web_response),
|
| - base::Time::FromDoubleT(event_dispatch_time)));
|
| + ServiceWorkerResponse response(
|
| + GetServiceWorkerResponseFromWebResponse(web_response));
|
| + mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
|
| + context_->fetch_response_receivers.Lookup(fetch_event_id));
|
| + if (response.blob_uuid.size()) {
|
| + Send(new ServiceWorkerHostMsg_FetchEventResponse(
|
| + GetRoutingID(), fetch_event_id, response,
|
| + base::Time::FromDoubleT(event_dispatch_time)));
|
| + } else {
|
| + (*response_receiver)
|
| + ->OnResponse(response, base::Time::FromDoubleT(event_dispatch_time));
|
| + }
|
| + context_->fetch_response_receivers.Remove(fetch_event_id);
|
| +}
|
| +
|
| +void ServiceWorkerContextClient::respondToFetchEventWithResponseStream(
|
| + int fetch_event_id,
|
| + const blink::WebServiceWorkerResponse& web_response,
|
| + mojo::ScopedDataPipeConsumerHandle data_stream,
|
| + double event_dispatch_time) {
|
| + ServiceWorkerResponse response(
|
| + GetServiceWorkerResponseFromWebResponse(web_response));
|
| + mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
|
| + context_->fetch_response_receivers.Lookup(fetch_event_id));
|
| + (*response_receiver)
|
| + ->OnResponseStream(response, std::move(data_stream),
|
| + base::Time::FromDoubleT(event_dispatch_time));
|
| + context_->fetch_response_receivers.Remove(fetch_event_id);
|
| }
|
|
|
| void ServiceWorkerContextClient::didHandleFetchEvent(
|
| @@ -1327,6 +1355,7 @@ void ServiceWorkerContextClient::DispatchFetchEvent(
|
| int fetch_event_id,
|
| const ServiceWorkerFetchRequest& request,
|
| mojom::FetchEventPreloadHandlePtr preload_handle,
|
| + mojom::ServiceWorkerFetchResponseReceiverPtr response_receiver,
|
| const DispatchFetchEventCallback& callback) {
|
| std::unique_ptr<NavigationPreloadRequest> preload_request =
|
| preload_handle
|
| @@ -1336,6 +1365,10 @@ void ServiceWorkerContextClient::DispatchFetchEvent(
|
| const bool navigation_preload_sent = !!preload_request;
|
| TRACE_EVENT0("ServiceWorker",
|
| "ServiceWorkerContextClient::DispatchFetchEvent");
|
| + context_->fetch_response_receivers.AddWithID(
|
| + base::MakeUnique<mojom::ServiceWorkerFetchResponseReceiverPtr>(
|
| + std::move(response_receiver)),
|
| + fetch_event_id);
|
| context_->fetch_event_callbacks.AddWithID(
|
| base::MakeUnique<FetchCallback>(callback), fetch_event_id);
|
| if (preload_request) {
|
|
|