OLD | NEW |
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 <map> | 7 #include <map> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 std::vector<blink::WebString> cors_exposed_header_names; | 237 std::vector<blink::WebString> cors_exposed_header_names; |
238 for (const auto& name : response.cors_exposed_header_names) | 238 for (const auto& name : response.cors_exposed_header_names) |
239 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); | 239 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); |
240 | 240 |
241 web_response->SetCorsExposedHeaderNames( | 241 web_response->SetCorsExposedHeaderNames( |
242 blink::WebVector<blink::WebString>(cors_exposed_header_names)); | 242 blink::WebVector<blink::WebString>(cors_exposed_header_names)); |
243 } | 243 } |
244 | 244 |
245 // Use this template in willDestroyWorkerContext to abort all the pending | 245 // Use this template in willDestroyWorkerContext to abort all the pending |
246 // events callbacks. | 246 // events callbacks. |
247 template <typename T> | 247 template <typename T, class... TArgs> |
248 void AbortPendingEventCallbacks(T& callbacks) { | 248 void AbortPendingEventCallbacks(T& callbacks, TArgs... args) { |
249 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { | 249 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { |
250 std::move(*it.GetCurrentValue()) | 250 std::move(*it.GetCurrentValue()) |
251 .Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 251 .Run(SERVICE_WORKER_ERROR_ABORT, args..., base::Time::Now()); |
252 } | 252 } |
253 } | 253 } |
254 | 254 |
255 template <typename Key, typename Callback> | 255 template <typename Key, typename Callback> |
256 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) { | 256 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) { |
257 for (auto& item : callbacks) | 257 for (auto& item : callbacks) |
258 std::move(item.second).Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 258 std::move(item.second).Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
259 } | 259 } |
260 | 260 |
261 } // namespace | 261 } // namespace |
262 | 262 |
263 // Holding data that needs to be bound to the worker context on the | 263 // Holding data that needs to be bound to the worker context on the |
264 // worker thread. | 264 // worker thread. |
265 struct ServiceWorkerContextClient::WorkerContextData { | 265 struct ServiceWorkerContextClient::WorkerContextData { |
266 using SimpleEventCallback = | 266 using SimpleEventCallback = |
267 base::OnceCallback<void(ServiceWorkerStatusCode, base::Time)>; | 267 base::OnceCallback<void(ServiceWorkerStatusCode, base::Time)>; |
268 using ClientsCallbacksMap = | 268 using ClientsCallbacksMap = |
269 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; | 269 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; |
270 using ClaimClientsCallbacksMap = | 270 using ClaimClientsCallbacksMap = |
271 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; | 271 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; |
272 using ClientCallbacksMap = | 272 using ClientCallbacksMap = |
273 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; | 273 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; |
274 using SkipWaitingCallbacksMap = | 274 using SkipWaitingCallbacksMap = |
275 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; | 275 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
| 276 using InstallEventCallbacksMap = |
| 277 IDMap<std::unique_ptr<DispatchInstallEventCallback>>; |
276 using ActivateEventCallbacksMap = | 278 using ActivateEventCallbacksMap = |
277 IDMap<std::unique_ptr<DispatchActivateEventCallback>>; | 279 IDMap<std::unique_ptr<DispatchActivateEventCallback>>; |
278 using BackgroundFetchAbortEventCallbacksMap = | 280 using BackgroundFetchAbortEventCallbacksMap = |
279 IDMap<std::unique_ptr<DispatchBackgroundFetchAbortEventCallback>>; | 281 IDMap<std::unique_ptr<DispatchBackgroundFetchAbortEventCallback>>; |
280 using BackgroundFetchClickEventCallbacksMap = | 282 using BackgroundFetchClickEventCallbacksMap = |
281 IDMap<std::unique_ptr<DispatchBackgroundFetchClickEventCallback>>; | 283 IDMap<std::unique_ptr<DispatchBackgroundFetchClickEventCallback>>; |
282 using BackgroundFetchFailEventCallbacksMap = | 284 using BackgroundFetchFailEventCallbacksMap = |
283 IDMap<std::unique_ptr<DispatchBackgroundFetchFailEventCallback>>; | 285 IDMap<std::unique_ptr<DispatchBackgroundFetchFailEventCallback>>; |
284 using BackgroundFetchedEventCallbacksMap = | 286 using BackgroundFetchedEventCallbacksMap = |
285 IDMap<std::unique_ptr<DispatchBackgroundFetchedEventCallback>>; | 287 IDMap<std::unique_ptr<DispatchBackgroundFetchedEventCallback>>; |
286 using SyncEventCallbacksMap = IDMap<std::unique_ptr<SyncCallback>>; | 288 using SyncEventCallbacksMap = IDMap<std::unique_ptr<SyncCallback>>; |
287 using NotificationClickEventCallbacksMap = | 289 using NotificationClickEventCallbacksMap = |
288 IDMap<std::unique_ptr<DispatchNotificationClickEventCallback>>; | 290 IDMap<std::unique_ptr<DispatchNotificationClickEventCallback>>; |
289 using NotificationCloseEventCallbacksMap = | 291 using NotificationCloseEventCallbacksMap = |
290 IDMap<std::unique_ptr<DispatchNotificationCloseEventCallback>>; | 292 IDMap<std::unique_ptr<DispatchNotificationCloseEventCallback>>; |
291 using PushEventCallbacksMap = | 293 using PushEventCallbacksMap = |
292 IDMap<std::unique_ptr<DispatchPushEventCallback>>; | 294 IDMap<std::unique_ptr<DispatchPushEventCallback>>; |
293 using ExtendableMessageEventCallbacksMap = | 295 using ExtendableMessageEventCallbacksMap = |
294 IDMap<std::unique_ptr<DispatchExtendableMessageEventCallback>>; | 296 IDMap<std::unique_ptr<DispatchExtendableMessageEventCallback>>; |
295 using NavigationPreloadRequestsMap = IDMap< | 297 using NavigationPreloadRequestsMap = IDMap< |
296 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; | 298 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; |
| 299 using InstallEventMethodsMap = |
| 300 std::map<int, mojom::ServiceWorkerInstallEventMethodsAssociatedPtr>; |
297 | 301 |
298 explicit WorkerContextData(ServiceWorkerContextClient* owner) | 302 explicit WorkerContextData(ServiceWorkerContextClient* owner) |
299 : event_dispatcher_binding(owner), | 303 : event_dispatcher_binding(owner), |
300 weak_factory(owner), | 304 weak_factory(owner), |
301 proxy_weak_factory(owner->proxy_) {} | 305 proxy_weak_factory(owner->proxy_) {} |
302 | 306 |
303 ~WorkerContextData() { | 307 ~WorkerContextData() { |
304 DCHECK(thread_checker.CalledOnValidThread()); | 308 DCHECK(thread_checker.CalledOnValidThread()); |
305 } | 309 } |
306 | 310 |
307 mojo::Binding<mojom::ServiceWorkerEventDispatcher> event_dispatcher_binding; | 311 mojo::Binding<mojom::ServiceWorkerEventDispatcher> event_dispatcher_binding; |
308 | 312 |
309 // Pending callbacks for GetClientDocuments(). | 313 // Pending callbacks for GetClientDocuments(). |
310 ClientsCallbacksMap clients_callbacks; | 314 ClientsCallbacksMap clients_callbacks; |
311 | 315 |
312 // Pending callbacks for OpenWindow() and FocusClient(). | 316 // Pending callbacks for OpenWindow() and FocusClient(). |
313 ClientCallbacksMap client_callbacks; | 317 ClientCallbacksMap client_callbacks; |
314 | 318 |
315 // Pending callbacks for SkipWaiting(). | 319 // Pending callbacks for SkipWaiting(). |
316 SkipWaitingCallbacksMap skip_waiting_callbacks; | 320 SkipWaitingCallbacksMap skip_waiting_callbacks; |
317 | 321 |
318 // Pending callbacks for ClaimClients(). | 322 // Pending callbacks for ClaimClients(). |
319 ClaimClientsCallbacksMap claim_clients_callbacks; | 323 ClaimClientsCallbacksMap claim_clients_callbacks; |
320 | 324 |
| 325 // Pending callbacks for Install Events. |
| 326 InstallEventCallbacksMap install_event_callbacks; |
| 327 |
321 // Pending callbacks for Activate Events. | 328 // Pending callbacks for Activate Events. |
322 ActivateEventCallbacksMap activate_event_callbacks; | 329 ActivateEventCallbacksMap activate_event_callbacks; |
323 | 330 |
324 // Pending callbacks for Background Fetch Abort Events. | 331 // Pending callbacks for Background Fetch Abort Events. |
325 BackgroundFetchAbortEventCallbacksMap background_fetch_abort_event_callbacks; | 332 BackgroundFetchAbortEventCallbacksMap background_fetch_abort_event_callbacks; |
326 | 333 |
327 // Pending callbacks for Background Fetch Click Events. | 334 // Pending callbacks for Background Fetch Click Events. |
328 BackgroundFetchClickEventCallbacksMap background_fetch_click_event_callbacks; | 335 BackgroundFetchClickEventCallbacksMap background_fetch_click_event_callbacks; |
329 | 336 |
330 // Pending callbacks for Background Fetch Fail Events. | 337 // Pending callbacks for Background Fetch Fail Events. |
(...skipping 30 matching lines...) Expand all Loading... |
361 std::map<int /* fetch_event_id */, | 368 std::map<int /* fetch_event_id */, |
362 mojom::ServiceWorkerFetchResponseCallbackPtr> | 369 mojom::ServiceWorkerFetchResponseCallbackPtr> |
363 fetch_response_callbacks; | 370 fetch_response_callbacks; |
364 | 371 |
365 // Pending callbacks for Extendable Message Events. | 372 // Pending callbacks for Extendable Message Events. |
366 ExtendableMessageEventCallbacksMap message_event_callbacks; | 373 ExtendableMessageEventCallbacksMap message_event_callbacks; |
367 | 374 |
368 // Pending navigation preload requests. | 375 // Pending navigation preload requests. |
369 NavigationPreloadRequestsMap preload_requests; | 376 NavigationPreloadRequestsMap preload_requests; |
370 | 377 |
| 378 // Maps every install event id with its corresponding |
| 379 // mojom::ServiceWorkerInstallEventMethodsAssociatedPt. |
| 380 InstallEventMethodsMap install_methods_map; |
| 381 |
371 base::ThreadChecker thread_checker; | 382 base::ThreadChecker thread_checker; |
372 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; | 383 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
373 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; | 384 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; |
374 }; | 385 }; |
375 | 386 |
376 class ServiceWorkerContextClient::NavigationPreloadRequest final | 387 class ServiceWorkerContextClient::NavigationPreloadRequest final |
377 : public mojom::URLLoaderClient { | 388 : public mojom::URLLoaderClient { |
378 public: | 389 public: |
379 NavigationPreloadRequest(int fetch_event_id, | 390 NavigationPreloadRequest(int fetch_event_id, |
380 const GURL& url, | 391 const GURL& url, |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 | 567 |
557 ServiceWorkerContextClient::~ServiceWorkerContextClient() {} | 568 ServiceWorkerContextClient::~ServiceWorkerContextClient() {} |
558 | 569 |
559 void ServiceWorkerContextClient::OnMessageReceived( | 570 void ServiceWorkerContextClient::OnMessageReceived( |
560 int thread_id, | 571 int thread_id, |
561 int embedded_worker_id, | 572 int embedded_worker_id, |
562 const IPC::Message& message) { | 573 const IPC::Message& message) { |
563 CHECK_EQ(embedded_worker_id_, embedded_worker_id); | 574 CHECK_EQ(embedded_worker_id_, embedded_worker_id); |
564 bool handled = true; | 575 bool handled = true; |
565 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) | 576 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) |
566 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) | |
567 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) | 577 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) |
568 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) | 578 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) |
569 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, | 579 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, |
570 OnOpenWindowResponse) | 580 OnOpenWindowResponse) |
571 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, | 581 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, |
572 OnOpenWindowError) | 582 OnOpenWindowError) |
573 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, | 583 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, |
574 OnFocusClientResponse) | 584 OnFocusClientResponse) |
575 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NavigateClientResponse, | 585 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NavigateClientResponse, |
576 OnNavigateClientResponse) | 586 OnNavigateClientResponse) |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 } | 729 } |
720 | 730 |
721 void ServiceWorkerContextClient::WillDestroyWorkerContext( | 731 void ServiceWorkerContextClient::WillDestroyWorkerContext( |
722 v8::Local<v8::Context> context) { | 732 v8::Local<v8::Context> context) { |
723 // At this point WillStopCurrentWorkerThread is already called, so | 733 // At this point WillStopCurrentWorkerThread is already called, so |
724 // worker_task_runner_->RunsTasksOnCurrentThread() returns false | 734 // worker_task_runner_->RunsTasksOnCurrentThread() returns false |
725 // (while we're still on the worker thread). | 735 // (while we're still on the worker thread). |
726 proxy_ = NULL; | 736 proxy_ = NULL; |
727 | 737 |
728 // Aborts all the pending events callbacks. | 738 // Aborts all the pending events callbacks. |
| 739 AbortPendingEventCallbacks(context_->install_event_callbacks, |
| 740 false /* has_fetch_handler */); |
729 AbortPendingEventCallbacks(context_->activate_event_callbacks); | 741 AbortPendingEventCallbacks(context_->activate_event_callbacks); |
730 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); | 742 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); |
731 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); | 743 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); |
732 AbortPendingEventCallbacks(context_->background_fetch_fail_event_callbacks); | 744 AbortPendingEventCallbacks(context_->background_fetch_fail_event_callbacks); |
733 AbortPendingEventCallbacks(context_->background_fetched_event_callbacks); | 745 AbortPendingEventCallbacks(context_->background_fetched_event_callbacks); |
734 AbortPendingEventCallbacks(context_->sync_event_callbacks); | 746 AbortPendingEventCallbacks(context_->sync_event_callbacks); |
735 AbortPendingEventCallbacks(context_->notification_click_event_callbacks); | 747 AbortPendingEventCallbacks(context_->notification_click_event_callbacks); |
736 AbortPendingEventCallbacks(context_->notification_close_event_callbacks); | 748 AbortPendingEventCallbacks(context_->notification_close_event_callbacks); |
737 AbortPendingEventCallbacks(context_->push_event_callbacks); | 749 AbortPendingEventCallbacks(context_->push_event_callbacks); |
738 AbortPendingEventCallbacks(context_->fetch_event_callbacks); | 750 AbortPendingEventCallbacks(context_->fetch_event_callbacks); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 DispatchExtendableMessageEventCallback* callback = | 903 DispatchExtendableMessageEventCallback* callback = |
892 context_->message_event_callbacks.Lookup(request_id); | 904 context_->message_event_callbacks.Lookup(request_id); |
893 DCHECK(callback); | 905 DCHECK(callback); |
894 DCHECK(*callback); | 906 DCHECK(*callback); |
895 std::move(*callback).Run(EventResultToStatus(result), | 907 std::move(*callback).Run(EventResultToStatus(result), |
896 base::Time::FromDoubleT(event_dispatch_time)); | 908 base::Time::FromDoubleT(event_dispatch_time)); |
897 context_->message_event_callbacks.Remove(request_id); | 909 context_->message_event_callbacks.Remove(request_id); |
898 } | 910 } |
899 | 911 |
900 void ServiceWorkerContextClient::DidHandleInstallEvent( | 912 void ServiceWorkerContextClient::DidHandleInstallEvent( |
901 int request_id, | 913 int event_id, |
902 blink::WebServiceWorkerEventResult result, | 914 blink::WebServiceWorkerEventResult result, |
903 double event_dispatch_time) { | 915 double event_dispatch_time) { |
904 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 916 DispatchInstallEventCallback* callback = |
905 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), | 917 context_->install_event_callbacks.Lookup(event_id); |
906 base::Time::FromDoubleT(event_dispatch_time))); | 918 DCHECK(callback); |
| 919 DCHECK(*callback); |
| 920 std::move(*callback).Run(EventResultToStatus(result), |
| 921 proxy_->HasFetchEventHandler(), |
| 922 base::Time::FromDoubleT(event_dispatch_time)); |
| 923 context_->install_event_callbacks.Remove(event_id); |
| 924 context_->install_methods_map.erase(event_id); |
907 } | 925 } |
908 | 926 |
909 void ServiceWorkerContextClient::RespondToFetchEventWithNoResponse( | 927 void ServiceWorkerContextClient::RespondToFetchEventWithNoResponse( |
910 int fetch_event_id, | 928 int fetch_event_id, |
911 double event_dispatch_time) { | 929 double event_dispatch_time) { |
912 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = | 930 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
913 context_->fetch_response_callbacks[fetch_event_id]; | 931 context_->fetch_response_callbacks[fetch_event_id]; |
914 DCHECK(response_callback.is_bound()); | 932 DCHECK(response_callback.is_bound()); |
915 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time)); | 933 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time)); |
916 context_->fetch_response_callbacks.erase(fetch_event_id); | 934 context_->fetch_response_callbacks.erase(fetch_event_id); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1119 } | 1137 } |
1120 | 1138 |
1121 void ServiceWorkerContextClient::Claim( | 1139 void ServiceWorkerContextClient::Claim( |
1122 std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks> callbacks) { | 1140 std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks> callbacks) { |
1123 DCHECK(callbacks); | 1141 DCHECK(callbacks); |
1124 int request_id = context_->claim_clients_callbacks.Add(std::move(callbacks)); | 1142 int request_id = context_->claim_clients_callbacks.Add(std::move(callbacks)); |
1125 Send(new ServiceWorkerHostMsg_ClaimClients(GetRoutingID(), request_id)); | 1143 Send(new ServiceWorkerHostMsg_ClaimClients(GetRoutingID(), request_id)); |
1126 } | 1144 } |
1127 | 1145 |
1128 void ServiceWorkerContextClient::RegisterForeignFetchScopes( | 1146 void ServiceWorkerContextClient::RegisterForeignFetchScopes( |
| 1147 int install_event_id, |
1129 const blink::WebVector<blink::WebURL>& sub_scopes, | 1148 const blink::WebVector<blink::WebURL>& sub_scopes, |
1130 const blink::WebVector<blink::WebSecurityOrigin>& origins) { | 1149 const blink::WebVector<blink::WebSecurityOrigin>& origins) { |
1131 Send(new ServiceWorkerHostMsg_RegisterForeignFetchScopes( | 1150 DCHECK(context_->install_methods_map[install_event_id].is_bound()); |
1132 GetRoutingID(), std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()), | 1151 context_->install_methods_map[install_event_id]->RegisterForeignFetchScopes( |
1133 std::vector<url::Origin>(origins.begin(), origins.end()))); | 1152 std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()), |
| 1153 std::vector<url::Origin>(origins.begin(), origins.end())); |
1134 } | 1154 } |
1135 | 1155 |
1136 void ServiceWorkerContextClient::DispatchSyncEvent( | 1156 void ServiceWorkerContextClient::DispatchSyncEvent( |
1137 const std::string& tag, | 1157 const std::string& tag, |
1138 blink::mojom::BackgroundSyncEventLastChance last_chance, | 1158 blink::mojom::BackgroundSyncEventLastChance last_chance, |
1139 DispatchSyncEventCallback callback) { | 1159 DispatchSyncEventCallback callback) { |
1140 TRACE_EVENT0("ServiceWorker", | 1160 TRACE_EVENT0("ServiceWorker", |
1141 "ServiceWorkerContextClient::DispatchSyncEvent"); | 1161 "ServiceWorkerContextClient::DispatchSyncEvent"); |
1142 int request_id = context_->sync_event_callbacks.Add( | 1162 int request_id = context_->sync_event_callbacks.Add( |
1143 base::MakeUnique<SyncCallback>(std::move(callback))); | 1163 base::MakeUnique<SyncCallback>(std::move(callback))); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 fetches.size()); | 1295 fetches.size()); |
1276 for (size_t i = 0; i < fetches.size(); ++i) { | 1296 for (size_t i = 0; i < fetches.size(); ++i) { |
1277 ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); | 1297 ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); |
1278 ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); | 1298 ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); |
1279 } | 1299 } |
1280 | 1300 |
1281 proxy_->DispatchBackgroundFetchedEvent( | 1301 proxy_->DispatchBackgroundFetchedEvent( |
1282 request_id, blink::WebString::FromUTF8(tag), web_fetches); | 1302 request_id, blink::WebString::FromUTF8(tag), web_fetches); |
1283 } | 1303 } |
1284 | 1304 |
| 1305 void ServiceWorkerContextClient::DispatchInstallEvent( |
| 1306 mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo client, |
| 1307 DispatchInstallEventCallback callback) { |
| 1308 TRACE_EVENT0("ServiceWorker", |
| 1309 "ServiceWorkerContextClient::DispatchInstallEvent"); |
| 1310 |
| 1311 int event_id = context_->install_event_callbacks.Add( |
| 1312 base::MakeUnique<DispatchInstallEventCallback>(std::move(callback))); |
| 1313 |
| 1314 DCHECK(!context_->install_methods_map.count(event_id)); |
| 1315 mojom::ServiceWorkerInstallEventMethodsAssociatedPtr install_methods; |
| 1316 install_methods.Bind(std::move(client)); |
| 1317 context_->install_methods_map[event_id] = std::move(install_methods); |
| 1318 |
| 1319 proxy_->DispatchInstallEvent(event_id); |
| 1320 } |
| 1321 |
1285 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( | 1322 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
1286 mojom::ExtendableMessageEventPtr event, | 1323 mojom::ExtendableMessageEventPtr event, |
1287 DispatchExtendableMessageEventCallback callback) { | 1324 DispatchExtendableMessageEventCallback callback) { |
1288 TRACE_EVENT0("ServiceWorker", | 1325 TRACE_EVENT0("ServiceWorker", |
1289 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); | 1326 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); |
1290 int request_id = context_->message_event_callbacks.Add( | 1327 int request_id = context_->message_event_callbacks.Add( |
1291 base::MakeUnique<DispatchExtendableMessageEventCallback>( | 1328 base::MakeUnique<DispatchExtendableMessageEventCallback>( |
1292 std::move(callback))); | 1329 std::move(callback))); |
1293 | 1330 |
1294 blink::WebMessagePortChannelArray ports = | 1331 blink::WebMessagePortChannelArray ports = |
(...skipping 16 matching lines...) Expand all Loading... |
1311 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 1348 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
1312 sender_.get(), main_thread_task_runner_.get()); | 1349 sender_.get(), main_thread_task_runner_.get()); |
1313 scoped_refptr<WebServiceWorkerImpl> worker = | 1350 scoped_refptr<WebServiceWorkerImpl> worker = |
1314 dispatcher->GetOrCreateServiceWorker(std::move(handle)); | 1351 dispatcher->GetOrCreateServiceWorker(std::move(handle)); |
1315 proxy_->DispatchExtendableMessageEvent( | 1352 proxy_->DispatchExtendableMessageEvent( |
1316 request_id, blink::WebString::FromUTF16(event->message), | 1353 request_id, blink::WebString::FromUTF16(event->message), |
1317 event->source_origin, std::move(ports), | 1354 event->source_origin, std::move(ports), |
1318 WebServiceWorkerImpl::CreateHandle(worker)); | 1355 WebServiceWorkerImpl::CreateHandle(worker)); |
1319 } | 1356 } |
1320 | 1357 |
1321 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | |
1322 TRACE_EVENT0("ServiceWorker", | |
1323 "ServiceWorkerContextClient::OnInstallEvent"); | |
1324 proxy_->DispatchInstallEvent(request_id); | |
1325 } | |
1326 | |
1327 void ServiceWorkerContextClient::DispatchFetchEvent( | 1358 void ServiceWorkerContextClient::DispatchFetchEvent( |
1328 int fetch_event_id, | 1359 int fetch_event_id, |
1329 const ServiceWorkerFetchRequest& request, | 1360 const ServiceWorkerFetchRequest& request, |
1330 mojom::FetchEventPreloadHandlePtr preload_handle, | 1361 mojom::FetchEventPreloadHandlePtr preload_handle, |
1331 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, | 1362 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, |
1332 DispatchFetchEventCallback callback) { | 1363 DispatchFetchEventCallback callback) { |
1333 std::unique_ptr<NavigationPreloadRequest> preload_request = | 1364 std::unique_ptr<NavigationPreloadRequest> preload_request = |
1334 preload_handle | 1365 preload_handle |
1335 ? base::MakeUnique<NavigationPreloadRequest>( | 1366 ? base::MakeUnique<NavigationPreloadRequest>( |
1336 fetch_event_id, request.url, std::move(preload_handle)) | 1367 fetch_event_id, request.url, std::move(preload_handle)) |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1620 } | 1651 } |
1621 | 1652 |
1622 base::WeakPtr<ServiceWorkerContextClient> | 1653 base::WeakPtr<ServiceWorkerContextClient> |
1623 ServiceWorkerContextClient::GetWeakPtr() { | 1654 ServiceWorkerContextClient::GetWeakPtr() { |
1624 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1655 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
1625 DCHECK(context_); | 1656 DCHECK(context_); |
1626 return context_->weak_factory.GetWeakPtr(); | 1657 return context_->weak_factory.GetWeakPtr(); |
1627 } | 1658 } |
1628 | 1659 |
1629 } // namespace content | 1660 } // namespace content |
OLD | NEW |