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