| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 // Service workers are only available in secure contexts, so all requests | 95 // Service workers are only available in secure contexts, so all requests |
| 95 // are initiated in a secure context. | 96 // are initiated in a secure context. |
| 96 extra_data->set_initiated_in_secure_context(true); | 97 extra_data->set_initiated_in_secure_context(true); |
| 97 request.SetExtraData(extra_data.release()); | 98 request.SetExtraData(extra_data.release()); |
| 98 } | 99 } |
| 99 | 100 |
| 100 private: | 101 private: |
| 101 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; | 102 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; |
| 102 }; | 103 }; |
| 103 | 104 |
| 105 class StreamHandleListener |
| 106 : public blink::WebServiceWorkerStreamHandle::Listener { |
| 107 public: |
| 108 StreamHandleListener( |
| 109 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr) |
| 110 : callback_ptr_(std::move(callback_ptr)) {} |
| 111 |
| 112 ~StreamHandleListener() override {} |
| 113 |
| 114 void OnAborted() override { callback_ptr_->OnAborted(); } |
| 115 void OnCompleted() override { callback_ptr_->OnCompleted(); } |
| 116 |
| 117 private: |
| 118 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr_; |
| 119 }; |
| 120 |
| 104 ServiceWorkerStatusCode EventResultToStatus( | 121 ServiceWorkerStatusCode EventResultToStatus( |
| 105 blink::WebServiceWorkerEventResult result) { | 122 blink::WebServiceWorkerEventResult result) { |
| 106 switch (result) { | 123 switch (result) { |
| 107 case blink::kWebServiceWorkerEventResultCompleted: | 124 case blink::kWebServiceWorkerEventResultCompleted: |
| 108 return SERVICE_WORKER_OK; | 125 return SERVICE_WORKER_OK; |
| 109 case blink::kWebServiceWorkerEventResultRejected: | 126 case blink::kWebServiceWorkerEventResultRejected: |
| 110 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; | 127 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; |
| 111 } | 128 } |
| 112 NOTREACHED() << "Got invalid result: " << result; | 129 NOTREACHED() << "Got invalid result: " << result; |
| 113 return SERVICE_WORKER_ERROR_FAILED; | 130 return SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); | 220 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); |
| 204 web_response->SetResponseType(response.response_type); | 221 web_response->SetResponseType(response.response_type); |
| 205 for (const auto& pair : response.headers) { | 222 for (const auto& pair : response.headers) { |
| 206 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), | 223 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), |
| 207 blink::WebString::FromUTF8(pair.second)); | 224 blink::WebString::FromUTF8(pair.second)); |
| 208 } | 225 } |
| 209 if (!response.blob_uuid.empty()) { | 226 if (!response.blob_uuid.empty()) { |
| 210 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), | 227 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), |
| 211 response.blob_size); | 228 response.blob_size); |
| 212 } | 229 } |
| 213 web_response->SetStreamURL(blink::WebURL(response.stream_url)); | |
| 214 web_response->SetError(response.error); | 230 web_response->SetError(response.error); |
| 215 web_response->SetResponseTime(response.response_time.ToInternalValue()); | 231 web_response->SetResponseTime(response.response_time.ToInternalValue()); |
| 216 if (response.is_in_cache_storage) { | 232 if (response.is_in_cache_storage) { |
| 217 web_response->SetCacheStorageCacheName( | 233 web_response->SetCacheStorageCacheName( |
| 218 blink::WebString::FromUTF8(response.cache_storage_cache_name)); | 234 blink::WebString::FromUTF8(response.cache_storage_cache_name)); |
| 219 } | 235 } |
| 220 | 236 |
| 221 std::vector<blink::WebString> cors_exposed_header_names; | 237 std::vector<blink::WebString> cors_exposed_header_names; |
| 222 for (const auto& name : response.cors_exposed_header_names) | 238 for (const auto& name : response.cors_exposed_header_names) |
| 223 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); | 239 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); |
| 224 | 240 |
| 225 web_response->SetCorsExposedHeaderNames( | 241 web_response->SetCorsExposedHeaderNames( |
| 226 blink::WebVector<blink::WebString>(cors_exposed_header_names)); | 242 blink::WebVector<blink::WebString>(cors_exposed_header_names)); |
| 227 } | 243 } |
| 228 | 244 |
| 229 // Use this template in willDestroyWorkerContext to abort all the pending | 245 // Use this template in willDestroyWorkerContext to abort all the pending |
| 230 // events callbacks. | 246 // events callbacks. |
| 231 template <typename T> | 247 template <typename T> |
| 232 void AbortPendingEventCallbacks(T& callbacks) { | 248 void AbortPendingEventCallbacks(T& callbacks) { |
| 233 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { | 249 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { |
| 234 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 250 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 235 } | 251 } |
| 236 } | 252 } |
| 237 | 253 |
| 254 template <typename Key, typename Callback> |
| 255 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) { |
| 256 for (const auto& it : callbacks) |
| 257 it.second.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 258 } |
| 259 |
| 238 } // namespace | 260 } // namespace |
| 239 | 261 |
| 240 // Holding data that needs to be bound to the worker context on the | 262 // Holding data that needs to be bound to the worker context on the |
| 241 // worker thread. | 263 // worker thread. |
| 242 struct ServiceWorkerContextClient::WorkerContextData { | 264 struct ServiceWorkerContextClient::WorkerContextData { |
| 265 using SimpleEventCallback = |
| 266 base::Callback<void(ServiceWorkerStatusCode, base::Time)>; |
| 243 using ClientsCallbacksMap = | 267 using ClientsCallbacksMap = |
| 244 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; | 268 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; |
| 245 using ClaimClientsCallbacksMap = | 269 using ClaimClientsCallbacksMap = |
| 246 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; | 270 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; |
| 247 using ClientCallbacksMap = | 271 using ClientCallbacksMap = |
| 248 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; | 272 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; |
| 249 using SkipWaitingCallbacksMap = | 273 using SkipWaitingCallbacksMap = |
| 250 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; | 274 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
| 251 using ActivateEventCallbacksMap = | 275 using ActivateEventCallbacksMap = |
| 252 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; | 276 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
| 253 using BackgroundFetchAbortEventCallbacksMap = | 277 using BackgroundFetchAbortEventCallbacksMap = |
| 254 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; | 278 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; |
| 255 using BackgroundFetchClickEventCallbacksMap = | 279 using BackgroundFetchClickEventCallbacksMap = |
| 256 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; | 280 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; |
| 257 using BackgroundFetchFailEventCallbacksMap = | 281 using BackgroundFetchFailEventCallbacksMap = |
| 258 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; | 282 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; |
| 259 using BackgroundFetchedEventCallbacksMap = | 283 using BackgroundFetchedEventCallbacksMap = |
| 260 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; | 284 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; |
| 261 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; | 285 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
| 262 using NotificationClickEventCallbacksMap = | 286 using NotificationClickEventCallbacksMap = |
| 263 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; | 287 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; |
| 264 using NotificationCloseEventCallbacksMap = | 288 using NotificationCloseEventCallbacksMap = |
| 265 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; | 289 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; |
| 266 using PushEventCallbacksMap = | 290 using PushEventCallbacksMap = |
| 267 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; | 291 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; |
| 268 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; | |
| 269 using ExtendableMessageEventCallbacksMap = | 292 using ExtendableMessageEventCallbacksMap = |
| 270 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; | 293 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; |
| 271 using NavigationPreloadRequestsMap = IDMap< | 294 using NavigationPreloadRequestsMap = IDMap< |
| 272 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; | 295 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; |
| 273 | 296 |
| 274 explicit WorkerContextData(ServiceWorkerContextClient* owner) | 297 explicit WorkerContextData(ServiceWorkerContextClient* owner) |
| 275 : event_dispatcher_binding(owner), | 298 : event_dispatcher_binding(owner), |
| 276 weak_factory(owner), | 299 weak_factory(owner), |
| 277 proxy_weak_factory(owner->proxy_) {} | 300 proxy_weak_factory(owner->proxy_) {} |
| 278 | 301 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 // Pending callbacks for Notification Click Events. | 348 // Pending callbacks for Notification Click Events. |
| 326 NotificationClickEventCallbacksMap notification_click_event_callbacks; | 349 NotificationClickEventCallbacksMap notification_click_event_callbacks; |
| 327 | 350 |
| 328 // Pending callbacks for Notification Close Events. | 351 // Pending callbacks for Notification Close Events. |
| 329 NotificationCloseEventCallbacksMap notification_close_event_callbacks; | 352 NotificationCloseEventCallbacksMap notification_close_event_callbacks; |
| 330 | 353 |
| 331 // Pending callbacks for Push Events. | 354 // Pending callbacks for Push Events. |
| 332 PushEventCallbacksMap push_event_callbacks; | 355 PushEventCallbacksMap push_event_callbacks; |
| 333 | 356 |
| 334 // Pending callbacks for Fetch Events. | 357 // Pending callbacks for Fetch Events. |
| 335 FetchEventCallbacksMap fetch_event_callbacks; | 358 std::map<int /* fetch_event_id */, SimpleEventCallback> fetch_event_callbacks; |
| 359 |
| 360 // Pending callbacks for respondWith on each fetch event. |
| 361 std::map<int /* fetch_event_id */, |
| 362 mojom::ServiceWorkerFetchResponseCallbackPtr> |
| 363 fetch_response_callbacks; |
| 336 | 364 |
| 337 // Pending callbacks for Extendable Message Events. | 365 // Pending callbacks for Extendable Message Events. |
| 338 ExtendableMessageEventCallbacksMap message_event_callbacks; | 366 ExtendableMessageEventCallbacksMap message_event_callbacks; |
| 339 | 367 |
| 340 // Pending navigation preload requests. | 368 // Pending navigation preload requests. |
| 341 NavigationPreloadRequestsMap preload_requests; | 369 NavigationPreloadRequestsMap preload_requests; |
| 342 | 370 |
| 343 base::ThreadChecker thread_checker; | 371 base::ThreadChecker thread_checker; |
| 344 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; | 372 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
| 345 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; | 373 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 | 893 |
| 866 void ServiceWorkerContextClient::DidHandleInstallEvent( | 894 void ServiceWorkerContextClient::DidHandleInstallEvent( |
| 867 int request_id, | 895 int request_id, |
| 868 blink::WebServiceWorkerEventResult result, | 896 blink::WebServiceWorkerEventResult result, |
| 869 double event_dispatch_time) { | 897 double event_dispatch_time) { |
| 870 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 898 Send(new ServiceWorkerHostMsg_InstallEventFinished( |
| 871 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), | 899 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), |
| 872 base::Time::FromDoubleT(event_dispatch_time))); | 900 base::Time::FromDoubleT(event_dispatch_time))); |
| 873 } | 901 } |
| 874 | 902 |
| 875 void ServiceWorkerContextClient::RespondToFetchEvent( | 903 void ServiceWorkerContextClient::RespondToFetchEventWithNoResponse( |
| 876 int fetch_event_id, | 904 int fetch_event_id, |
| 877 double event_dispatch_time) { | 905 double event_dispatch_time) { |
| 878 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 906 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 879 GetRoutingID(), fetch_event_id, | 907 context_->fetch_response_callbacks[fetch_event_id]; |
| 880 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), | 908 DCHECK(response_callback.is_bound()); |
| 881 base::Time::FromDoubleT(event_dispatch_time))); | 909 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time)); |
| 910 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 882 } | 911 } |
| 883 | 912 |
| 884 void ServiceWorkerContextClient::RespondToFetchEvent( | 913 void ServiceWorkerContextClient::RespondToFetchEvent( |
| 885 int fetch_event_id, | 914 int fetch_event_id, |
| 886 const blink::WebServiceWorkerResponse& web_response, | 915 const blink::WebServiceWorkerResponse& web_response, |
| 887 double event_dispatch_time) { | 916 double event_dispatch_time) { |
| 888 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 917 ServiceWorkerResponse response( |
| 889 GetRoutingID(), fetch_event_id, | 918 GetServiceWorkerResponseFromWebResponse(web_response)); |
| 890 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 919 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 891 GetServiceWorkerResponseFromWebResponse(web_response), | 920 context_->fetch_response_callbacks[fetch_event_id]; |
| 892 base::Time::FromDoubleT(event_dispatch_time))); | 921 if (response.blob_uuid.size()) { |
| 922 // Send the legacy IPC due to the ordering issue between respondWith and |
| 923 // blob. |
| 924 // TODO(shimazu): mojofy this IPC after blob starts using sync IPC for |
| 925 // creation or is mojofied: https://crbug.com/611935. |
| 926 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 927 GetRoutingID(), fetch_event_id, response, |
| 928 base::Time::FromDoubleT(event_dispatch_time))); |
| 929 } else { |
| 930 response_callback->OnResponse(response, |
| 931 base::Time::FromDoubleT(event_dispatch_time)); |
| 932 } |
| 933 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 934 } |
| 935 |
| 936 void ServiceWorkerContextClient::RespondToFetchEventWithResponseStream( |
| 937 int fetch_event_id, |
| 938 const blink::WebServiceWorkerResponse& web_response, |
| 939 blink::WebServiceWorkerStreamHandle* web_body_as_stream, |
| 940 double event_dispatch_time) { |
| 941 ServiceWorkerResponse response( |
| 942 GetServiceWorkerResponseFromWebResponse(web_response)); |
| 943 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback = |
| 944 context_->fetch_response_callbacks[fetch_event_id]; |
| 945 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream = |
| 946 blink::mojom::ServiceWorkerStreamHandle::New(); |
| 947 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr; |
| 948 body_as_stream->callback_request = mojo::MakeRequest(&callback_ptr); |
| 949 body_as_stream->stream = web_body_as_stream->DrainStreamDataPipe(); |
| 950 |
| 951 web_body_as_stream->SetListener( |
| 952 base::MakeUnique<StreamHandleListener>(std::move(callback_ptr))); |
| 953 |
| 954 response_callback->OnResponseStream( |
| 955 response, std::move(body_as_stream), |
| 956 base::Time::FromDoubleT(event_dispatch_time)); |
| 957 context_->fetch_response_callbacks.erase(fetch_event_id); |
| 893 } | 958 } |
| 894 | 959 |
| 895 void ServiceWorkerContextClient::DidHandleFetchEvent( | 960 void ServiceWorkerContextClient::DidHandleFetchEvent( |
| 896 int fetch_event_id, | 961 int fetch_event_id, |
| 897 blink::WebServiceWorkerEventResult result, | 962 blink::WebServiceWorkerEventResult result, |
| 898 double event_dispatch_time) { | 963 double event_dispatch_time) { |
| 899 const FetchCallback* callback = | 964 const WorkerContextData::SimpleEventCallback& callback = |
| 900 context_->fetch_event_callbacks.Lookup(fetch_event_id); | 965 context_->fetch_event_callbacks[fetch_event_id]; |
| 901 DCHECK(callback); | 966 DCHECK(callback); |
| 902 callback->Run(EventResultToStatus(result), | 967 callback.Run(EventResultToStatus(result), |
| 903 base::Time::FromDoubleT(event_dispatch_time)); | 968 base::Time::FromDoubleT(event_dispatch_time)); |
| 904 context_->fetch_event_callbacks.Remove(fetch_event_id); | 969 context_->fetch_event_callbacks.erase(fetch_event_id); |
| 905 } | 970 } |
| 906 | 971 |
| 907 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( | 972 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( |
| 908 int request_id, | 973 int request_id, |
| 909 blink::WebServiceWorkerEventResult result, | 974 blink::WebServiceWorkerEventResult result, |
| 910 double event_dispatch_time) { | 975 double event_dispatch_time) { |
| 911 const DispatchNotificationClickEventCallback* callback = | 976 const DispatchNotificationClickEventCallback* callback = |
| 912 context_->notification_click_event_callbacks.Lookup(request_id); | 977 context_->notification_click_event_callbacks.Lookup(request_id); |
| 913 DCHECK(callback); | 978 DCHECK(callback); |
| 914 | 979 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1244 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 1309 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 1245 TRACE_EVENT0("ServiceWorker", | 1310 TRACE_EVENT0("ServiceWorker", |
| 1246 "ServiceWorkerContextClient::OnInstallEvent"); | 1311 "ServiceWorkerContextClient::OnInstallEvent"); |
| 1247 proxy_->DispatchInstallEvent(request_id); | 1312 proxy_->DispatchInstallEvent(request_id); |
| 1248 } | 1313 } |
| 1249 | 1314 |
| 1250 void ServiceWorkerContextClient::DispatchFetchEvent( | 1315 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 1251 int fetch_event_id, | 1316 int fetch_event_id, |
| 1252 const ServiceWorkerFetchRequest& request, | 1317 const ServiceWorkerFetchRequest& request, |
| 1253 mojom::FetchEventPreloadHandlePtr preload_handle, | 1318 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 1319 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, |
| 1254 const DispatchFetchEventCallback& callback) { | 1320 const DispatchFetchEventCallback& callback) { |
| 1255 std::unique_ptr<NavigationPreloadRequest> preload_request = | 1321 std::unique_ptr<NavigationPreloadRequest> preload_request = |
| 1256 preload_handle | 1322 preload_handle |
| 1257 ? base::MakeUnique<NavigationPreloadRequest>( | 1323 ? base::MakeUnique<NavigationPreloadRequest>( |
| 1258 fetch_event_id, request.url, std::move(preload_handle)) | 1324 fetch_event_id, request.url, std::move(preload_handle)) |
| 1259 : nullptr; | 1325 : nullptr; |
| 1260 const bool navigation_preload_sent = !!preload_request; | 1326 const bool navigation_preload_sent = !!preload_request; |
| 1261 TRACE_EVENT0("ServiceWorker", | 1327 TRACE_EVENT0("ServiceWorker", |
| 1262 "ServiceWorkerContextClient::DispatchFetchEvent"); | 1328 "ServiceWorkerContextClient::DispatchFetchEvent"); |
| 1263 context_->fetch_event_callbacks.AddWithID( | 1329 context_->fetch_response_callbacks.insert( |
| 1264 base::MakeUnique<FetchCallback>(callback), fetch_event_id); | 1330 std::make_pair(fetch_event_id, std::move(response_callback))); |
| 1331 context_->fetch_event_callbacks.insert( |
| 1332 std::make_pair(fetch_event_id, std::move(callback))); |
| 1265 if (preload_request) { | 1333 if (preload_request) { |
| 1266 context_->preload_requests.AddWithID(std::move(preload_request), | 1334 context_->preload_requests.AddWithID(std::move(preload_request), |
| 1267 fetch_event_id); | 1335 fetch_event_id); |
| 1268 } | 1336 } |
| 1269 | 1337 |
| 1270 blink::WebServiceWorkerRequest web_request; | 1338 blink::WebServiceWorkerRequest web_request; |
| 1271 ToWebServiceWorkerRequest(request, &web_request); | 1339 ToWebServiceWorkerRequest(request, &web_request); |
| 1272 | 1340 |
| 1273 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { | 1341 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { |
| 1274 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); | 1342 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1538 } | 1606 } |
| 1539 | 1607 |
| 1540 base::WeakPtr<ServiceWorkerContextClient> | 1608 base::WeakPtr<ServiceWorkerContextClient> |
| 1541 ServiceWorkerContextClient::GetWeakPtr() { | 1609 ServiceWorkerContextClient::GetWeakPtr() { |
| 1542 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1610 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1543 DCHECK(context_); | 1611 DCHECK(context_); |
| 1544 return context_->weak_factory.GetWeakPtr(); | 1612 return context_->weak_factory.GetWeakPtr(); |
| 1545 } | 1613 } |
| 1546 | 1614 |
| 1547 } // namespace content | 1615 } // namespace content |
| OLD | NEW |