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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/service_worker/service_worker_context_client.h" 5 #include "content/renderer/service_worker/service_worker_context_client.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 using BackgroundFetchedEventCallbacksMap = 273 using BackgroundFetchedEventCallbacksMap =
274 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; 274 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>;
275 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; 275 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>;
276 using NotificationClickEventCallbacksMap = 276 using NotificationClickEventCallbacksMap =
277 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; 277 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>;
278 using NotificationCloseEventCallbacksMap = 278 using NotificationCloseEventCallbacksMap =
279 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; 279 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>;
280 using PushEventCallbacksMap = 280 using PushEventCallbacksMap =
281 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; 281 IDMap<std::unique_ptr<const DispatchPushEventCallback>>;
282 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; 282 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
283 using FetchResponseReceiverMap =
284 IDMap<std::unique_ptr<mojom::ServiceWorkerFetchResponseReceiverPtr>>;
283 using ExtendableMessageEventCallbacksMap = 285 using ExtendableMessageEventCallbacksMap =
284 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; 286 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>;
285 using NavigationPreloadRequestsMap = IDMap< 287 using NavigationPreloadRequestsMap = IDMap<
286 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; 288 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>;
287 289
288 explicit WorkerContextData(ServiceWorkerContextClient* owner) 290 explicit WorkerContextData(ServiceWorkerContextClient* owner)
289 : event_dispatcher_binding(owner), 291 : event_dispatcher_binding(owner),
290 weak_factory(owner), 292 weak_factory(owner),
291 proxy_weak_factory(owner->proxy_) {} 293 proxy_weak_factory(owner->proxy_) {}
292 294
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 343
342 // Pending callbacks for Notification Close Events. 344 // Pending callbacks for Notification Close Events.
343 NotificationCloseEventCallbacksMap notification_close_event_callbacks; 345 NotificationCloseEventCallbacksMap notification_close_event_callbacks;
344 346
345 // Pending callbacks for Push Events. 347 // Pending callbacks for Push Events.
346 PushEventCallbacksMap push_event_callbacks; 348 PushEventCallbacksMap push_event_callbacks;
347 349
348 // Pending callbacks for Fetch Events. 350 // Pending callbacks for Fetch Events.
349 FetchEventCallbacksMap fetch_event_callbacks; 351 FetchEventCallbacksMap fetch_event_callbacks;
350 352
353 FetchResponseReceiverMap fetch_response_receivers;
354
351 // Pending callbacks for Extendable Message Events. 355 // Pending callbacks for Extendable Message Events.
352 ExtendableMessageEventCallbacksMap message_event_callbacks; 356 ExtendableMessageEventCallbacksMap message_event_callbacks;
353 357
354 // Pending navigation preload requests. 358 // Pending navigation preload requests.
355 NavigationPreloadRequestsMap preload_requests; 359 NavigationPreloadRequestsMap preload_requests;
356 360
357 base::ThreadChecker thread_checker; 361 base::ThreadChecker thread_checker;
358 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 362 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
359 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 363 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
360 }; 364 };
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 blink::WebServiceWorkerEventResult result, 861 blink::WebServiceWorkerEventResult result,
858 double event_dispatch_time) { 862 double event_dispatch_time) {
859 Send(new ServiceWorkerHostMsg_InstallEventFinished( 863 Send(new ServiceWorkerHostMsg_InstallEventFinished(
860 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), 864 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(),
861 base::Time::FromDoubleT(event_dispatch_time))); 865 base::Time::FromDoubleT(event_dispatch_time)));
862 } 866 }
863 867
864 void ServiceWorkerContextClient::respondToFetchEvent( 868 void ServiceWorkerContextClient::respondToFetchEvent(
865 int fetch_event_id, 869 int fetch_event_id,
866 double event_dispatch_time) { 870 double event_dispatch_time) {
867 Send(new ServiceWorkerHostMsg_FetchEventResponse( 871 mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
868 GetRoutingID(), fetch_event_id, 872 context_->fetch_response_receivers.Lookup(fetch_event_id));
869 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), 873 (*response_receiver)
870 base::Time::FromDoubleT(event_dispatch_time))); 874 ->OnFallback(base::Time::FromDoubleT(event_dispatch_time));
875 context_->fetch_response_receivers.Remove(fetch_event_id);
871 } 876 }
872 877
873 void ServiceWorkerContextClient::respondToFetchEvent( 878 void ServiceWorkerContextClient::respondToFetchEventWithResponse(
874 int fetch_event_id, 879 int fetch_event_id,
875 const blink::WebServiceWorkerResponse& web_response, 880 const blink::WebServiceWorkerResponse& web_response,
876 double event_dispatch_time) { 881 double event_dispatch_time) {
877 Send(new ServiceWorkerHostMsg_FetchEventResponse( 882 ServiceWorkerResponse response(
878 GetRoutingID(), fetch_event_id, 883 GetServiceWorkerResponseFromWebResponse(web_response));
879 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, 884 mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
880 GetServiceWorkerResponseFromWebResponse(web_response), 885 context_->fetch_response_receivers.Lookup(fetch_event_id));
881 base::Time::FromDoubleT(event_dispatch_time))); 886 if (response.blob_uuid.size()) {
887 Send(new ServiceWorkerHostMsg_FetchEventResponse(
888 GetRoutingID(), fetch_event_id, response,
889 base::Time::FromDoubleT(event_dispatch_time)));
890 } else {
891 (*response_receiver)
892 ->OnResponse(response, base::Time::FromDoubleT(event_dispatch_time));
893 }
894 context_->fetch_response_receivers.Remove(fetch_event_id);
895 }
896
897 void ServiceWorkerContextClient::respondToFetchEventWithResponseStream(
898 int fetch_event_id,
899 const blink::WebServiceWorkerResponse& web_response,
900 mojo::ScopedDataPipeConsumerHandle data_stream,
901 double event_dispatch_time) {
902 ServiceWorkerResponse response(
903 GetServiceWorkerResponseFromWebResponse(web_response));
904 mojom::ServiceWorkerFetchResponseReceiverPtr* response_receiver(
905 context_->fetch_response_receivers.Lookup(fetch_event_id));
906 (*response_receiver)
907 ->OnResponseStream(response, std::move(data_stream),
908 base::Time::FromDoubleT(event_dispatch_time));
909 context_->fetch_response_receivers.Remove(fetch_event_id);
882 } 910 }
883 911
884 void ServiceWorkerContextClient::didHandleFetchEvent( 912 void ServiceWorkerContextClient::didHandleFetchEvent(
885 int fetch_event_id, 913 int fetch_event_id,
886 blink::WebServiceWorkerEventResult result, 914 blink::WebServiceWorkerEventResult result,
887 double event_dispatch_time) { 915 double event_dispatch_time) {
888 const FetchCallback* callback = 916 const FetchCallback* callback =
889 context_->fetch_event_callbacks.Lookup(fetch_event_id); 917 context_->fetch_event_callbacks.Lookup(fetch_event_id);
890 DCHECK(callback); 918 DCHECK(callback);
891 callback->Run(EventResultToStatus(result), 919 callback->Run(EventResultToStatus(result),
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 1348 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
1321 TRACE_EVENT0("ServiceWorker", 1349 TRACE_EVENT0("ServiceWorker",
1322 "ServiceWorkerContextClient::OnInstallEvent"); 1350 "ServiceWorkerContextClient::OnInstallEvent");
1323 proxy_->dispatchInstallEvent(request_id); 1351 proxy_->dispatchInstallEvent(request_id);
1324 } 1352 }
1325 1353
1326 void ServiceWorkerContextClient::DispatchFetchEvent( 1354 void ServiceWorkerContextClient::DispatchFetchEvent(
1327 int fetch_event_id, 1355 int fetch_event_id,
1328 const ServiceWorkerFetchRequest& request, 1356 const ServiceWorkerFetchRequest& request,
1329 mojom::FetchEventPreloadHandlePtr preload_handle, 1357 mojom::FetchEventPreloadHandlePtr preload_handle,
1358 mojom::ServiceWorkerFetchResponseReceiverPtr response_receiver,
1330 const DispatchFetchEventCallback& callback) { 1359 const DispatchFetchEventCallback& callback) {
1331 std::unique_ptr<NavigationPreloadRequest> preload_request = 1360 std::unique_ptr<NavigationPreloadRequest> preload_request =
1332 preload_handle 1361 preload_handle
1333 ? base::MakeUnique<NavigationPreloadRequest>( 1362 ? base::MakeUnique<NavigationPreloadRequest>(
1334 fetch_event_id, request.url, std::move(preload_handle)) 1363 fetch_event_id, request.url, std::move(preload_handle))
1335 : nullptr; 1364 : nullptr;
1336 const bool navigation_preload_sent = !!preload_request; 1365 const bool navigation_preload_sent = !!preload_request;
1337 TRACE_EVENT0("ServiceWorker", 1366 TRACE_EVENT0("ServiceWorker",
1338 "ServiceWorkerContextClient::DispatchFetchEvent"); 1367 "ServiceWorkerContextClient::DispatchFetchEvent");
1368 context_->fetch_response_receivers.AddWithID(
1369 base::MakeUnique<mojom::ServiceWorkerFetchResponseReceiverPtr>(
1370 std::move(response_receiver)),
1371 fetch_event_id);
1339 context_->fetch_event_callbacks.AddWithID( 1372 context_->fetch_event_callbacks.AddWithID(
1340 base::MakeUnique<FetchCallback>(callback), fetch_event_id); 1373 base::MakeUnique<FetchCallback>(callback), fetch_event_id);
1341 if (preload_request) { 1374 if (preload_request) {
1342 context_->preload_requests.AddWithID(std::move(preload_request), 1375 context_->preload_requests.AddWithID(std::move(preload_request),
1343 fetch_event_id); 1376 fetch_event_id);
1344 } 1377 }
1345 1378
1346 blink::WebServiceWorkerRequest web_request; 1379 blink::WebServiceWorkerRequest web_request;
1347 ToWebServiceWorkerRequest(request, &web_request); 1380 ToWebServiceWorkerRequest(request, &web_request);
1348 1381
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1614 } 1647 }
1615 1648
1616 base::WeakPtr<ServiceWorkerContextClient> 1649 base::WeakPtr<ServiceWorkerContextClient>
1617 ServiceWorkerContextClient::GetWeakPtr() { 1650 ServiceWorkerContextClient::GetWeakPtr() {
1618 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1651 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1619 DCHECK(context_); 1652 DCHECK(context_);
1620 return context_->weak_factory.GetWeakPtr(); 1653 return context_->weak_factory.GetWeakPtr();
1621 } 1654 }
1622 1655
1623 } // namespace content 1656 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698