| 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 <memory> | 8 #include <memory> |
| 8 #include <utility> | 9 #include <utility> |
| 9 | 10 |
| 10 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 11 #include "base/logging.h" | 12 #include "base/logging.h" |
| 12 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 13 #include "base/metrics/histogram_macros.h" | 14 #include "base/metrics/histogram_macros.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 15 #include "base/threading/thread_checker.h" | 16 #include "base/threading/thread_checker.h" |
| 16 #include "base/threading/thread_local.h" | 17 #include "base/threading/thread_local.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 // Service workers are only available in secure contexts, so all requests | 104 // Service workers are only available in secure contexts, so all requests |
| 104 // are initiated in a secure context. | 105 // are initiated in a secure context. |
| 105 extra_data->set_initiated_in_secure_context(true); | 106 extra_data->set_initiated_in_secure_context(true); |
| 106 request.SetExtraData(extra_data.release()); | 107 request.SetExtraData(extra_data.release()); |
| 107 } | 108 } |
| 108 | 109 |
| 109 private: | 110 private: |
| 110 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; | 111 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; |
| 111 }; | 112 }; |
| 112 | 113 |
| 114 class StreamHandleListener |
| 115 : public blink::WebServiceWorkerStreamHandle::Listener { |
| 116 public: |
| 117 StreamHandleListener( |
| 118 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr) |
| 119 : callback_ptr_(std::move(callback_ptr)) {} |
| 120 |
| 121 ~StreamHandleListener() override {} |
| 122 |
| 123 void OnAborted() override { callback_ptr_->OnAborted(); } |
| 124 void OnCompleted() override { callback_ptr_->OnCompleted(); } |
| 125 |
| 126 private: |
| 127 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr_; |
| 128 }; |
| 129 |
| 113 ServiceWorkerStatusCode EventResultToStatus( | 130 ServiceWorkerStatusCode EventResultToStatus( |
| 114 blink::WebServiceWorkerEventResult result) { | 131 blink::WebServiceWorkerEventResult result) { |
| 115 switch (result) { | 132 switch (result) { |
| 116 case blink::kWebServiceWorkerEventResultCompleted: | 133 case blink::kWebServiceWorkerEventResultCompleted: |
| 117 return SERVICE_WORKER_OK; | 134 return SERVICE_WORKER_OK; |
| 118 case blink::kWebServiceWorkerEventResultRejected: | 135 case blink::kWebServiceWorkerEventResultRejected: |
| 119 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; | 136 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; |
| 120 } | 137 } |
| 121 NOTREACHED() << "Got invalid result: " << result; | 138 NOTREACHED() << "Got invalid result: " << result; |
| 122 return SERVICE_WORKER_ERROR_FAILED; | 139 return SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); | 229 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); |
| 213 web_response->SetResponseType(response.response_type); | 230 web_response->SetResponseType(response.response_type); |
| 214 for (const auto& pair : response.headers) { | 231 for (const auto& pair : response.headers) { |
| 215 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), | 232 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), |
| 216 blink::WebString::FromUTF8(pair.second)); | 233 blink::WebString::FromUTF8(pair.second)); |
| 217 } | 234 } |
| 218 if (!response.blob_uuid.empty()) { | 235 if (!response.blob_uuid.empty()) { |
| 219 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), | 236 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), |
| 220 response.blob_size); | 237 response.blob_size); |
| 221 } | 238 } |
| 222 web_response->SetStreamURL(blink::WebURL(response.stream_url)); | |
| 223 web_response->SetError(response.error); | 239 web_response->SetError(response.error); |
| 224 web_response->SetResponseTime(response.response_time.ToInternalValue()); | 240 web_response->SetResponseTime(response.response_time.ToInternalValue()); |
| 225 if (response.is_in_cache_storage) { | 241 if (response.is_in_cache_storage) { |
| 226 web_response->SetCacheStorageCacheName( | 242 web_response->SetCacheStorageCacheName( |
| 227 blink::WebString::FromUTF8(response.cache_storage_cache_name)); | 243 blink::WebString::FromUTF8(response.cache_storage_cache_name)); |
| 228 } | 244 } |
| 229 | 245 |
| 230 std::vector<blink::WebString> cors_exposed_header_names; | 246 std::vector<blink::WebString> cors_exposed_header_names; |
| 231 for (const auto& name : response.cors_exposed_header_names) | 247 for (const auto& name : response.cors_exposed_header_names) |
| 232 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); | 248 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); |
| 233 | 249 |
| 234 web_response->SetCorsExposedHeaderNames( | 250 web_response->SetCorsExposedHeaderNames( |
| 235 blink::WebVector<blink::WebString>(cors_exposed_header_names)); | 251 blink::WebVector<blink::WebString>(cors_exposed_header_names)); |
| 236 } | 252 } |
| 237 | 253 |
| 238 // Use this template in willDestroyWorkerContext to abort all the pending | 254 // Use this template in willDestroyWorkerContext to abort all the pending |
| 239 // events callbacks. | 255 // events callbacks. |
| 240 template <typename T> | 256 template <typename T> |
| 241 void AbortPendingEventCallbacks(T& callbacks) { | 257 void AbortPendingEventCallbacks(T& callbacks) { |
| 242 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { | 258 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { |
| 243 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 259 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 244 } | 260 } |
| 245 } | 261 } |
| 246 | 262 |
| 263 template <typename Key, typename Callback> |
| 264 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) { |
| 265 for (const auto& it : callbacks) |
| 266 it.second.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 267 } |
| 268 |
| 247 } // namespace | 269 } // namespace |
| 248 | 270 |
| 249 // Holding data that needs to be bound to the worker context on the | 271 // Holding data that needs to be bound to the worker context on the |
| 250 // worker thread. | 272 // worker thread. |
| 251 struct ServiceWorkerContextClient::WorkerContextData { | 273 struct ServiceWorkerContextClient::WorkerContextData { |
| 274 using SimpleEventCallback = |
| 275 base::Callback<void(ServiceWorkerStatusCode, base::Time)>; |
| 252 using ClientsCallbacksMap = | 276 using ClientsCallbacksMap = |
| 253 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; | 277 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; |
| 254 using ClaimClientsCallbacksMap = | 278 using ClaimClientsCallbacksMap = |
| 255 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; | 279 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; |
| 256 using ClientCallbacksMap = | 280 using ClientCallbacksMap = |
| 257 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; | 281 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; |
| 258 using SkipWaitingCallbacksMap = | 282 using SkipWaitingCallbacksMap = |
| 259 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; | 283 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
| 260 using ActivateEventCallbacksMap = | 284 using ActivateEventCallbacksMap = |
| 261 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; | 285 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
| 262 using BackgroundFetchAbortEventCallbacksMap = | 286 using BackgroundFetchAbortEventCallbacksMap = |
| 263 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; | 287 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; |
| 264 using BackgroundFetchClickEventCallbacksMap = | 288 using BackgroundFetchClickEventCallbacksMap = |
| 265 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; | 289 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; |
| 266 using BackgroundFetchFailEventCallbacksMap = | 290 using BackgroundFetchFailEventCallbacksMap = |
| 267 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; | 291 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; |
| 268 using BackgroundFetchedEventCallbacksMap = | 292 using BackgroundFetchedEventCallbacksMap = |
| 269 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; | 293 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; |
| 270 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; | 294 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
| 271 using NotificationClickEventCallbacksMap = | 295 using NotificationClickEventCallbacksMap = |
| 272 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; | 296 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; |
| 273 using NotificationCloseEventCallbacksMap = | 297 using NotificationCloseEventCallbacksMap = |
| 274 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; | 298 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; |
| 275 using PushEventCallbacksMap = | 299 using PushEventCallbacksMap = |
| 276 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; | 300 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; |
| 277 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; | |
| 278 using ExtendableMessageEventCallbacksMap = | 301 using ExtendableMessageEventCallbacksMap = |
| 279 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; | 302 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; |
| 280 using NavigationPreloadRequestsMap = IDMap< | 303 using NavigationPreloadRequestsMap = IDMap< |
| 281 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; | 304 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; |
| 282 | 305 |
| 283 explicit WorkerContextData(ServiceWorkerContextClient* owner) | 306 explicit WorkerContextData(ServiceWorkerContextClient* owner) |
| 284 : event_dispatcher_binding(owner), | 307 : event_dispatcher_binding(owner), |
| 285 weak_factory(owner), | 308 weak_factory(owner), |
| 286 proxy_weak_factory(owner->proxy_) {} | 309 proxy_weak_factory(owner->proxy_) {} |
| 287 | 310 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 // Pending callbacks for Notification Click Events. | 357 // Pending callbacks for Notification Click Events. |
| 335 NotificationClickEventCallbacksMap notification_click_event_callbacks; | 358 NotificationClickEventCallbacksMap notification_click_event_callbacks; |
| 336 | 359 |
| 337 // Pending callbacks for Notification Close Events. | 360 // Pending callbacks for Notification Close Events. |
| 338 NotificationCloseEventCallbacksMap notification_close_event_callbacks; | 361 NotificationCloseEventCallbacksMap notification_close_event_callbacks; |
| 339 | 362 |
| 340 // Pending callbacks for Push Events. | 363 // Pending callbacks for Push Events. |
| 341 PushEventCallbacksMap push_event_callbacks; | 364 PushEventCallbacksMap push_event_callbacks; |
| 342 | 365 |
| 343 // Pending callbacks for Fetch Events. | 366 // Pending callbacks for Fetch Events. |
| 344 FetchEventCallbacksMap fetch_event_callbacks; | 367 std::map<int /* fetch_event_id */, SimpleEventCallback> fetch_event_callbacks; |
| 368 |
| 369 // Pending callbacks for respondWith on each fetch event. |
| 370 std::map<int /* fetch_event_id */, |
| 371 mojom::ServiceWorkerFetchResponseCallbackPtr> |
| 372 fetch_response_callbacks; |
| 345 | 373 |
| 346 // Pending callbacks for Extendable Message Events. | 374 // Pending callbacks for Extendable Message Events. |
| 347 ExtendableMessageEventCallbacksMap message_event_callbacks; | 375 ExtendableMessageEventCallbacksMap message_event_callbacks; |
| 348 | 376 |
| 349 // Pending navigation preload requests. | 377 // Pending navigation preload requests. |
| 350 NavigationPreloadRequestsMap preload_requests; | 378 NavigationPreloadRequestsMap preload_requests; |
| 351 | 379 |
| 352 base::ThreadChecker thread_checker; | 380 base::ThreadChecker thread_checker; |
| 353 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; | 381 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
| 354 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; | 382 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 blink::WebServiceWorkerEventResult result, | 879 blink::WebServiceWorkerEventResult result, |
| 852 double event_dispatch_time) { | 880 double event_dispatch_time) { |
| 853 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 881 Send(new ServiceWorkerHostMsg_InstallEventFinished( |
| 854 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), | 882 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), |
| 855 base::Time::FromDoubleT(event_dispatch_time))); | 883 base::Time::FromDoubleT(event_dispatch_time))); |
| 856 } | 884 } |
| 857 | 885 |
| 858 void ServiceWorkerContextClient::RespondToFetchEvent( | 886 void ServiceWorkerContextClient::RespondToFetchEvent( |
| 859 int fetch_event_id, | 887 int fetch_event_id, |
| 860 double event_dispatch_time) { | 888 double event_dispatch_time) { |
| 861 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 889 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 862 GetRoutingID(), fetch_event_id, | 890 context_->fetch_response_callbacks[fetch_event_id]; |
| 863 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), | 891 DCHECK(response_callback.is_bound()); |
| 864 base::Time::FromDoubleT(event_dispatch_time))); | 892 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time)); |
| 893 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 865 } | 894 } |
| 866 | 895 |
| 867 void ServiceWorkerContextClient::RespondToFetchEvent( | 896 void ServiceWorkerContextClient::RespondToFetchEventWithResponse( |
| 868 int fetch_event_id, | 897 int fetch_event_id, |
| 869 const blink::WebServiceWorkerResponse& web_response, | 898 const blink::WebServiceWorkerResponse& web_response, |
| 870 double event_dispatch_time) { | 899 double event_dispatch_time) { |
| 871 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 900 ServiceWorkerResponse response( |
| 872 GetRoutingID(), fetch_event_id, | 901 GetServiceWorkerResponseFromWebResponse(web_response)); |
| 873 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 902 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 874 GetServiceWorkerResponseFromWebResponse(web_response), | 903 context_->fetch_response_callbacks[fetch_event_id]; |
| 875 base::Time::FromDoubleT(event_dispatch_time))); | 904 if (response.blob_uuid.size()) { |
| 905 // Send the legacy IPC due to the ordering issue between respondWith and |
| 906 // blob. |
| 907 // TODO(shimazu): mojofy this IPC after blob starts using sync IPC for |
| 908 // creation or is mojofied: https://crbug.com/611935. |
| 909 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 910 GetRoutingID(), fetch_event_id, response, |
| 911 base::Time::FromDoubleT(event_dispatch_time))); |
| 912 } else { |
| 913 response_callback->OnResponse(response, |
| 914 base::Time::FromDoubleT(event_dispatch_time)); |
| 915 } |
| 916 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 917 } |
| 918 |
| 919 void ServiceWorkerContextClient::RespondToFetchEventWithResponseStream( |
| 920 int fetch_event_id, |
| 921 const blink::WebServiceWorkerResponse& web_response, |
| 922 blink::WebServiceWorkerStreamHandle* web_stream_handle, |
| 923 double event_dispatch_time) { |
| 924 ServiceWorkerResponse response( |
| 925 GetServiceWorkerResponseFromWebResponse(web_response)); |
| 926 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 927 context_->fetch_response_callbacks[fetch_event_id]; |
| 928 blink::mojom::ServiceWorkerStreamHandlePtr stream_handle = |
| 929 blink::mojom::ServiceWorkerStreamHandle::New(); |
| 930 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr; |
| 931 stream_handle->callback_request = mojo::MakeRequest(&callback_ptr); |
| 932 stream_handle->stream = web_stream_handle->DrainStreamDataPipe(); |
| 933 |
| 934 web_stream_handle->SetListener( |
| 935 base::MakeUnique<StreamHandleListener>(std::move(callback_ptr))); |
| 936 |
| 937 response_callback->OnResponseStream( |
| 938 response, std::move(stream_handle), |
| 939 base::Time::FromDoubleT(event_dispatch_time)); |
| 940 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 876 } | 941 } |
| 877 | 942 |
| 878 void ServiceWorkerContextClient::DidHandleFetchEvent( | 943 void ServiceWorkerContextClient::DidHandleFetchEvent( |
| 879 int fetch_event_id, | 944 int fetch_event_id, |
| 880 blink::WebServiceWorkerEventResult result, | 945 blink::WebServiceWorkerEventResult result, |
| 881 double event_dispatch_time) { | 946 double event_dispatch_time) { |
| 882 const FetchCallback* callback = | 947 const WorkerContextData::SimpleEventCallback& callback = |
| 883 context_->fetch_event_callbacks.Lookup(fetch_event_id); | 948 context_->fetch_event_callbacks[fetch_event_id]; |
| 884 DCHECK(callback); | 949 DCHECK(callback); |
| 885 callback->Run(EventResultToStatus(result), | 950 callback.Run(EventResultToStatus(result), |
| 886 base::Time::FromDoubleT(event_dispatch_time)); | 951 base::Time::FromDoubleT(event_dispatch_time)); |
| 887 context_->fetch_event_callbacks.Remove(fetch_event_id); | 952 context_->fetch_event_callbacks.erase(fetch_event_id); |
| 888 } | 953 } |
| 889 | 954 |
| 890 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( | 955 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( |
| 891 int request_id, | 956 int request_id, |
| 892 blink::WebServiceWorkerEventResult result, | 957 blink::WebServiceWorkerEventResult result, |
| 893 double event_dispatch_time) { | 958 double event_dispatch_time) { |
| 894 const DispatchNotificationClickEventCallback* callback = | 959 const DispatchNotificationClickEventCallback* callback = |
| 895 context_->notification_click_event_callbacks.Lookup(request_id); | 960 context_->notification_click_event_callbacks.Lookup(request_id); |
| 896 DCHECK(callback); | 961 DCHECK(callback); |
| 897 | 962 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1227 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 1292 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 1228 TRACE_EVENT0("ServiceWorker", | 1293 TRACE_EVENT0("ServiceWorker", |
| 1229 "ServiceWorkerContextClient::OnInstallEvent"); | 1294 "ServiceWorkerContextClient::OnInstallEvent"); |
| 1230 proxy_->DispatchInstallEvent(request_id); | 1295 proxy_->DispatchInstallEvent(request_id); |
| 1231 } | 1296 } |
| 1232 | 1297 |
| 1233 void ServiceWorkerContextClient::DispatchFetchEvent( | 1298 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 1234 int fetch_event_id, | 1299 int fetch_event_id, |
| 1235 const ServiceWorkerFetchRequest& request, | 1300 const ServiceWorkerFetchRequest& request, |
| 1236 mojom::FetchEventPreloadHandlePtr preload_handle, | 1301 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 1302 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, |
| 1237 const DispatchFetchEventCallback& callback) { | 1303 const DispatchFetchEventCallback& callback) { |
| 1238 std::unique_ptr<NavigationPreloadRequest> preload_request = | 1304 std::unique_ptr<NavigationPreloadRequest> preload_request = |
| 1239 preload_handle | 1305 preload_handle |
| 1240 ? base::MakeUnique<NavigationPreloadRequest>( | 1306 ? base::MakeUnique<NavigationPreloadRequest>( |
| 1241 fetch_event_id, request.url, std::move(preload_handle)) | 1307 fetch_event_id, request.url, std::move(preload_handle)) |
| 1242 : nullptr; | 1308 : nullptr; |
| 1243 const bool navigation_preload_sent = !!preload_request; | 1309 const bool navigation_preload_sent = !!preload_request; |
| 1244 TRACE_EVENT0("ServiceWorker", | 1310 TRACE_EVENT0("ServiceWorker", |
| 1245 "ServiceWorkerContextClient::DispatchFetchEvent"); | 1311 "ServiceWorkerContextClient::DispatchFetchEvent"); |
| 1246 context_->fetch_event_callbacks.AddWithID( | 1312 context_->fetch_response_callbacks.insert( |
| 1247 base::MakeUnique<FetchCallback>(callback), fetch_event_id); | 1313 std::make_pair(fetch_event_id, std::move(response_callback))); |
| 1314 context_->fetch_event_callbacks.insert( |
| 1315 std::make_pair(fetch_event_id, std::move(callback))); |
| 1248 if (preload_request) { | 1316 if (preload_request) { |
| 1249 context_->preload_requests.AddWithID(std::move(preload_request), | 1317 context_->preload_requests.AddWithID(std::move(preload_request), |
| 1250 fetch_event_id); | 1318 fetch_event_id); |
| 1251 } | 1319 } |
| 1252 | 1320 |
| 1253 blink::WebServiceWorkerRequest web_request; | 1321 blink::WebServiceWorkerRequest web_request; |
| 1254 ToWebServiceWorkerRequest(request, &web_request); | 1322 ToWebServiceWorkerRequest(request, &web_request); |
| 1255 | 1323 |
| 1256 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { | 1324 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { |
| 1257 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); | 1325 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 } | 1589 } |
| 1522 | 1590 |
| 1523 base::WeakPtr<ServiceWorkerContextClient> | 1591 base::WeakPtr<ServiceWorkerContextClient> |
| 1524 ServiceWorkerContextClient::GetWeakPtr() { | 1592 ServiceWorkerContextClient::GetWeakPtr() { |
| 1525 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1593 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1526 DCHECK(context_); | 1594 DCHECK(context_); |
| 1527 return context_->weak_factory.GetWeakPtr(); | 1595 return context_->weak_factory.GetWeakPtr(); |
| 1528 } | 1596 } |
| 1529 | 1597 |
| 1530 } // namespace content | 1598 } // namespace content |
| OLD | NEW |