| 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 |