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

Unified Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2684533002: [WIP] Mojofy respondwith
Patch Set: rebase Created 3 years, 8 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/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) {

Powered by Google App Engine
This is Rietveld 408576698