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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/metrics/histogram_macros.h" | 12 #include "base/metrics/histogram_macros.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/threading/thread_checker.h" | 14 #include "base/threading/thread_checker.h" |
| 15 #include "base/threading/thread_local.h" | 15 #include "base/threading/thread_local.h" |
| 16 #include "base/threading/thread_task_runner_handle.h" | 16 #include "base/threading/thread_task_runner_handle.h" |
| 17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
| 18 #include "base/trace_event/trace_event.h" | 18 #include "base/trace_event/trace_event.h" |
| 19 #include "content/child/notifications/notification_data_conversions.h" | 19 #include "content/child/notifications/notification_data_conversions.h" |
| 20 #include "content/child/request_extra_data.h" | 20 #include "content/child/request_extra_data.h" |
| 21 #include "content/child/service_worker/service_worker_dispatcher.h" | 21 #include "content/child/service_worker/service_worker_dispatcher.h" |
| 22 #include "content/child/service_worker/service_worker_handle_reference.h" | 22 #include "content/child/service_worker/service_worker_handle_reference.h" |
| 23 #include "content/child/service_worker/service_worker_network_provider.h" | 23 #include "content/child/service_worker/service_worker_network_provider.h" |
| 24 #include "content/child/service_worker/service_worker_provider_context.h" | 24 #include "content/child/service_worker/service_worker_provider_context.h" |
| 25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" | 25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" |
| 26 #include "content/child/service_worker/web_service_worker_impl.h" | 26 #include "content/child/service_worker/web_service_worker_impl.h" |
| 27 #include "content/child/service_worker/web_service_worker_provider_impl.h" | 27 #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| 28 #include "content/child/service_worker/web_service_worker_registration_impl.h" | 28 #include "content/child/service_worker/web_service_worker_registration_impl.h" |
| 29 #include "content/child/thread_safe_sender.h" | 29 #include "content/child/thread_safe_sender.h" |
| 30 #include "content/child/web_data_consumer_handle_impl.h" | |
| 30 #include "content/child/webmessageportchannel_impl.h" | 31 #include "content/child/webmessageportchannel_impl.h" |
| 31 #include "content/common/devtools_messages.h" | 32 #include "content/common/devtools_messages.h" |
| 32 #include "content/common/message_port_messages.h" | 33 #include "content/common/message_port_messages.h" |
| 33 #include "content/common/service_worker/embedded_worker_messages.h" | 34 #include "content/common/service_worker/embedded_worker_messages.h" |
| 34 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h" | 35 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h" |
| 35 #include "content/common/service_worker/service_worker_messages.h" | 36 #include "content/common/service_worker/service_worker_messages.h" |
| 36 #include "content/common/service_worker/service_worker_status_code.h" | 37 #include "content/common/service_worker/service_worker_status_code.h" |
| 37 #include "content/common/service_worker/service_worker_utils.h" | 38 #include "content/common/service_worker/service_worker_utils.h" |
| 38 #include "content/public/common/push_event_payload.h" | 39 #include "content/public/common/push_event_payload.h" |
| 39 #include "content/public/common/referrer.h" | 40 #include "content/public/common/referrer.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 using SkipWaitingCallbacksMap = | 183 using SkipWaitingCallbacksMap = |
| 183 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; | 184 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; |
| 184 using SyncEventCallbacksMap = | 185 using SyncEventCallbacksMap = |
| 185 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus, | 186 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus, |
| 186 base::Time /* dispatch_event_time */)>, | 187 base::Time /* dispatch_event_time */)>, |
| 187 IDMapOwnPointer>; | 188 IDMapOwnPointer>; |
| 188 using FetchEventCallbacksMap = | 189 using FetchEventCallbacksMap = |
| 189 IDMap<const base::Callback<void(ServiceWorkerStatusCode, | 190 IDMap<const base::Callback<void(ServiceWorkerStatusCode, |
| 190 base::Time /* dispatch_event_time */)>, | 191 base::Time /* dispatch_event_time */)>, |
| 191 IDMapOwnPointer>; | 192 IDMapOwnPointer>; |
| 193 using NavigationPreloadRequestsMap = | |
| 194 IDMap<ServiceWorkerContextClient::NavigationPreloadRequest, | |
| 195 IDMapOwnPointer>; | |
| 192 | 196 |
| 193 explicit WorkerContextData(ServiceWorkerContextClient* owner) | 197 explicit WorkerContextData(ServiceWorkerContextClient* owner) |
| 194 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} | 198 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} |
| 195 | 199 |
| 196 ~WorkerContextData() { | 200 ~WorkerContextData() { |
| 197 DCHECK(thread_checker.CalledOnValidThread()); | 201 DCHECK(thread_checker.CalledOnValidThread()); |
| 198 } | 202 } |
| 199 | 203 |
| 200 // Pending callbacks for GetClientDocuments(). | 204 // Pending callbacks for GetClientDocuments(). |
| 201 ClientsCallbacksMap clients_callbacks; | 205 ClientsCallbacksMap clients_callbacks; |
| 202 | 206 |
| 203 // Pending callbacks for OpenWindow() and FocusClient(). | 207 // Pending callbacks for OpenWindow() and FocusClient(). |
| 204 ClientCallbacksMap client_callbacks; | 208 ClientCallbacksMap client_callbacks; |
| 205 | 209 |
| 206 // Pending callbacks for SkipWaiting(). | 210 // Pending callbacks for SkipWaiting(). |
| 207 SkipWaitingCallbacksMap skip_waiting_callbacks; | 211 SkipWaitingCallbacksMap skip_waiting_callbacks; |
| 208 | 212 |
| 209 // Pending callbacks for ClaimClients(). | 213 // Pending callbacks for ClaimClients(). |
| 210 ClaimClientsCallbacksMap claim_clients_callbacks; | 214 ClaimClientsCallbacksMap claim_clients_callbacks; |
| 211 | 215 |
| 212 // Pending callbacks for Background Sync Events. | 216 // Pending callbacks for Background Sync Events. |
| 213 SyncEventCallbacksMap sync_event_callbacks; | 217 SyncEventCallbacksMap sync_event_callbacks; |
| 214 | 218 |
| 215 // Pending callbacks for Fetch Events. | 219 // Pending callbacks for Fetch Events. |
| 216 FetchEventCallbacksMap fetch_event_callbacks; | 220 FetchEventCallbacksMap fetch_event_callbacks; |
| 217 | 221 |
| 222 // Pending navigation preload requests. | |
| 223 NavigationPreloadRequestsMap preload_requests; | |
| 224 | |
| 218 service_manager::InterfaceRegistry interface_registry; | 225 service_manager::InterfaceRegistry interface_registry; |
| 219 // This is not used when mojo for the service workers is enabled. At that | 226 // This is not used when mojo for the service workers is enabled. At that |
| 220 // time, remote interfaces are stored in EmbeddedWorkerInstanceClientImpl. | 227 // time, remote interfaces are stored in EmbeddedWorkerInstanceClientImpl. |
| 221 service_manager::InterfaceProvider remote_interfaces; | 228 service_manager::InterfaceProvider remote_interfaces; |
| 222 | 229 |
| 223 base::ThreadChecker thread_checker; | 230 base::ThreadChecker thread_checker; |
| 224 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; | 231 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
| 225 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; | 232 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; |
| 226 }; | 233 }; |
| 227 | 234 |
| 235 class ServiceWorkerContextClient::NavigationPreloadRequest final | |
| 236 : public mojom::URLLoaderClient { | |
| 237 public: | |
| 238 NavigationPreloadRequest(const GURL& url, | |
| 239 mojom::FetchEventPreloadHandlePtr preload_handle) | |
| 240 : url_loader_(std::move(preload_handle->url_loader)), | |
| 241 binding_(this, std::move(preload_handle->url_loader_client_request)), | |
| 242 response_(base::MakeUnique<blink::WebServiceWorkerResponse>()) { | |
| 243 response_->setURL(url); | |
| 244 } | |
| 245 | |
| 246 ~NavigationPreloadRequest() override { | |
| 247 if (callback_) { | |
| 248 callback_->onError(blink::WebServiceWorkerError( | |
| 249 blink::WebServiceWorkerError::ErrorTypeAbort, | |
| 250 blink::WebString::fromUTF8( | |
| 251 "Service Worker navigation preload aborted. Need to guard with " | |
| 252 "respondWith or waitUntil."))); | |
| 253 } | |
| 254 } | |
| 255 | |
| 256 void RegisterCallback( | |
| 257 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> | |
| 258 callback) { | |
| 259 callback_ = std::move(callback); | |
| 260 } | |
| 261 | |
| 262 void OnReceiveResponse(const ResourceResponseHead& response_head) override { | |
| 263 DCHECK(response_); | |
| 264 DCHECK(response_head.headers); | |
| 265 response_->setStatus(response_head.headers->response_code()); | |
| 266 response_->setStatusText( | |
| 267 blink::WebString::fromUTF8(response_head.headers->GetStatusText())); | |
| 268 response_->setResponseType(blink::WebServiceWorkerResponseTypeBasic); | |
| 269 size_t iter = 0; | |
| 270 std::string header_name; | |
| 271 std::string header_value; | |
| 272 while (response_head.headers->EnumerateHeaderLines(&iter, &header_name, | |
| 273 &header_value)) { | |
| 274 response_->appendHeader(blink::WebString::fromUTF8(header_name), | |
| 275 blink::WebString::fromUTF8(header_value)); | |
| 276 } | |
| 277 response_->setResponseTime(response_head.response_time.ToInternalValue()); | |
| 278 } | |
| 279 | |
| 280 void OnStartLoadingResponseBody( | |
| 281 mojo::ScopedDataPipeConsumerHandle body) override { | |
| 282 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback( | |
| 283 std::move(callback_)); | |
| 284 DCHECK(callback); | |
| 285 blink::WebServiceWorkerPreloadResponseCallbacksResult result; | |
| 286 result.handle = | |
| 287 base::MakeUnique<WebDataConsumerHandleImpl>(std::move(body)); | |
| 288 result.response = std::move(response_); | |
| 289 callback->onSuccess(&result); | |
| 290 } | |
| 291 | |
| 292 void OnComplete(const ResourceRequestCompletionStatus& status) override { | |
| 293 if (!callback_) | |
|
dcheng
2016/10/21 06:44:23
Just to help me understand: why does this need to
horo
2016/10/21 10:56:39
If an error happens before receiving the HTTP resp
| |
| 294 return; | |
| 295 DCHECK_NE(0, status.error_code); | |
| 296 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback( | |
| 297 std::move(callback_)); | |
| 298 callback->onError(blink::WebServiceWorkerError( | |
| 299 blink::WebServiceWorkerError::ErrorTypeNetwork, | |
| 300 blink::WebString::fromUTF8( | |
| 301 "Service Worker navigation preload network error."))); | |
| 302 } | |
| 303 | |
| 304 private: | |
| 305 mojom::URLLoaderPtr url_loader_; | |
| 306 mojo::Binding<mojom::URLLoaderClient> binding_; | |
| 307 std::unique_ptr<blink::WebServiceWorkerResponse> response_; | |
| 308 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback_; | |
| 309 }; | |
| 310 | |
| 228 class ServiceWorkerContextClient::FetchEventDispatcherImpl | 311 class ServiceWorkerContextClient::FetchEventDispatcherImpl |
| 229 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) { | 312 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) { |
| 230 public: | 313 public: |
| 231 static void Create(mojom::FetchEventDispatcherRequest request) { | 314 static void Create(mojom::FetchEventDispatcherRequest request) { |
| 232 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(), | 315 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(), |
| 233 std::move(request)); | 316 std::move(request)); |
| 234 } | 317 } |
| 235 | 318 |
| 236 FetchEventDispatcherImpl() {} | 319 FetchEventDispatcherImpl() {} |
| 237 | 320 |
| 238 ~FetchEventDispatcherImpl() override {} | 321 ~FetchEventDispatcherImpl() override {} |
| 239 | 322 |
| 240 void DispatchFetchEvent(int fetch_event_id, | 323 void DispatchFetchEvent(int fetch_event_id, |
| 241 const ServiceWorkerFetchRequest& request, | 324 const ServiceWorkerFetchRequest& request, |
| 242 mojom::FetchEventPreloadHandlePtr preload_handle, | 325 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 243 const DispatchFetchEventCallback& callback) override { | 326 const DispatchFetchEventCallback& callback) override { |
| 244 ServiceWorkerContextClient* client = | 327 ServiceWorkerContextClient* client = |
| 245 ServiceWorkerContextClient::ThreadSpecificInstance(); | 328 ServiceWorkerContextClient::ThreadSpecificInstance(); |
| 246 if (!client) { | 329 if (!client) { |
| 247 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 330 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 248 return; | 331 return; |
| 249 } | 332 } |
| 250 if (preload_handle) { | 333 client->DispatchFetchEvent(fetch_event_id, request, |
| 251 // TODO(horo): Implement this to pass |preload_handle| to FetchEvent. | 334 preload_handle |
| 252 NOTIMPLEMENTED(); | 335 ? base::MakeUnique<NavigationPreloadRequest>( |
| 253 return; | 336 request.url, std::move(preload_handle)) |
| 254 } | 337 : nullptr, |
| 255 client->DispatchFetchEvent(fetch_event_id, request, callback); | 338 callback); |
| 256 } | 339 } |
| 257 | 340 |
| 258 private: | 341 private: |
| 259 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl); | 342 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl); |
| 260 }; | 343 }; |
| 261 | 344 |
| 262 ServiceWorkerContextClient* | 345 ServiceWorkerContextClient* |
| 263 ServiceWorkerContextClient::ThreadSpecificInstance() { | 346 ServiceWorkerContextClient::ThreadSpecificInstance() { |
| 264 return g_worker_client_tls.Pointer()->Get(); | 347 return g_worker_client_tls.Pointer()->Get(); |
| 265 } | 348 } |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 628 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 711 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 629 GetRoutingID(), fetch_event_id, | 712 GetRoutingID(), fetch_event_id, |
| 630 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response, | 713 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response, |
| 631 base::Time::FromDoubleT(event_dispatch_time))); | 714 base::Time::FromDoubleT(event_dispatch_time))); |
| 632 } | 715 } |
| 633 | 716 |
| 634 void ServiceWorkerContextClient::didHandleFetchEvent( | 717 void ServiceWorkerContextClient::didHandleFetchEvent( |
| 635 int fetch_event_id, | 718 int fetch_event_id, |
| 636 blink::WebServiceWorkerEventResult result, | 719 blink::WebServiceWorkerEventResult result, |
| 637 double event_dispatch_time) { | 720 double event_dispatch_time) { |
| 721 if (context_->preload_requests.Lookup(fetch_event_id)) { | |
| 722 // Deletes NavigationPreloadRequest. If the network request is ongoing, it | |
| 723 // will be canceled by deleting the mojom::URLLoaderPtr in the | |
| 724 // NavigationPreloadRequest. | |
| 725 context_->preload_requests.Remove(fetch_event_id); | |
| 726 } | |
| 638 const FetchCallback* callback = | 727 const FetchCallback* callback = |
| 639 context_->fetch_event_callbacks.Lookup(fetch_event_id); | 728 context_->fetch_event_callbacks.Lookup(fetch_event_id); |
| 640 if (!callback) | 729 if (!callback) |
| 641 return; | 730 return; |
| 642 | 731 |
| 643 callback->Run(result == blink::WebServiceWorkerEventResultCompleted | 732 callback->Run(result == blink::WebServiceWorkerEventResultCompleted |
| 644 ? SERVICE_WORKER_OK | 733 ? SERVICE_WORKER_OK |
| 645 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, | 734 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, |
| 646 base::Time::FromDoubleT(event_dispatch_time)); | 735 base::Time::FromDoubleT(event_dispatch_time)); |
| 647 context_->fetch_event_callbacks.Remove(fetch_event_id); | 736 context_->fetch_event_callbacks.Remove(fetch_event_id); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 790 } | 879 } |
| 791 | 880 |
| 792 void ServiceWorkerContextClient::registerForeignFetchScopes( | 881 void ServiceWorkerContextClient::registerForeignFetchScopes( |
| 793 const blink::WebVector<blink::WebURL>& sub_scopes, | 882 const blink::WebVector<blink::WebURL>& sub_scopes, |
| 794 const blink::WebVector<blink::WebSecurityOrigin>& origins) { | 883 const blink::WebVector<blink::WebSecurityOrigin>& origins) { |
| 795 Send(new ServiceWorkerHostMsg_RegisterForeignFetchScopes( | 884 Send(new ServiceWorkerHostMsg_RegisterForeignFetchScopes( |
| 796 GetRoutingID(), std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()), | 885 GetRoutingID(), std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()), |
| 797 std::vector<url::Origin>(origins.begin(), origins.end()))); | 886 std::vector<url::Origin>(origins.begin(), origins.end()))); |
| 798 } | 887 } |
| 799 | 888 |
| 889 void ServiceWorkerContextClient::registerPreloadResponseCallback( | |
| 890 int eventID, | |
| 891 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback) { | |
| 892 ServiceWorkerContextClient::NavigationPreloadRequest* preload_request = | |
| 893 context_->preload_requests.Lookup(eventID); | |
| 894 preload_request->RegisterCallback(std::move(callback)); | |
| 895 } | |
| 896 | |
| 800 void ServiceWorkerContextClient::DispatchSyncEvent( | 897 void ServiceWorkerContextClient::DispatchSyncEvent( |
| 801 const std::string& tag, | 898 const std::string& tag, |
| 802 blink::WebServiceWorkerContextProxy::LastChanceOption last_chance, | 899 blink::WebServiceWorkerContextProxy::LastChanceOption last_chance, |
| 803 const SyncCallback& callback) { | 900 const SyncCallback& callback) { |
| 804 TRACE_EVENT0("ServiceWorker", | 901 TRACE_EVENT0("ServiceWorker", |
| 805 "ServiceWorkerContextClient::DispatchSyncEvent"); | 902 "ServiceWorkerContextClient::DispatchSyncEvent"); |
| 806 int request_id = | 903 int request_id = |
| 807 context_->sync_event_callbacks.Add(new SyncCallback(callback)); | 904 context_->sync_event_callbacks.Add(new SyncCallback(callback)); |
| 808 | 905 |
| 809 // TODO(jkarlin): Make this blink::WebString::FromUTF8Lenient once | 906 // TODO(jkarlin): Make this blink::WebString::FromUTF8Lenient once |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 880 | 977 |
| 881 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 978 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 882 TRACE_EVENT0("ServiceWorker", | 979 TRACE_EVENT0("ServiceWorker", |
| 883 "ServiceWorkerContextClient::OnInstallEvent"); | 980 "ServiceWorkerContextClient::OnInstallEvent"); |
| 884 proxy_->dispatchInstallEvent(request_id); | 981 proxy_->dispatchInstallEvent(request_id); |
| 885 } | 982 } |
| 886 | 983 |
| 887 void ServiceWorkerContextClient::DispatchFetchEvent( | 984 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 888 int fetch_event_id, | 985 int fetch_event_id, |
| 889 const ServiceWorkerFetchRequest& request, | 986 const ServiceWorkerFetchRequest& request, |
| 987 std::unique_ptr<NavigationPreloadRequest> preload_request, | |
| 890 const FetchCallback& callback) { | 988 const FetchCallback& callback) { |
| 989 const bool navigation_preload_sent = !!preload_request; | |
| 891 blink::WebServiceWorkerRequest webRequest; | 990 blink::WebServiceWorkerRequest webRequest; |
| 892 TRACE_EVENT0("ServiceWorker", | 991 TRACE_EVENT0("ServiceWorker", |
| 893 "ServiceWorkerContextClient::DispatchFetchEvent"); | 992 "ServiceWorkerContextClient::DispatchFetchEvent"); |
| 894 context_->fetch_event_callbacks.AddWithID(new FetchCallback(callback), | 993 context_->fetch_event_callbacks.AddWithID(new FetchCallback(callback), |
| 895 fetch_event_id); | 994 fetch_event_id); |
| 995 if (preload_request) { | |
| 996 context_->preload_requests.AddWithID(std::move(preload_request), | |
| 997 fetch_event_id); | |
| 998 } | |
| 896 | 999 |
| 897 webRequest.setURL(blink::WebURL(request.url)); | 1000 webRequest.setURL(blink::WebURL(request.url)); |
| 898 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); | 1001 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); |
| 899 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); | 1002 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); |
| 900 it != request.headers.end(); | 1003 it != request.headers.end(); |
| 901 ++it) { | 1004 ++it) { |
| 902 webRequest.setHeader(blink::WebString::fromUTF8(it->first), | 1005 webRequest.setHeader(blink::WebString::fromUTF8(it->first), |
| 903 blink::WebString::fromUTF8(it->second)); | 1006 blink::WebString::fromUTF8(it->second)); |
| 904 } | 1007 } |
| 905 if (!request.blob_uuid.empty()) { | 1008 if (!request.blob_uuid.empty()) { |
| 906 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), | 1009 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), |
| 907 request.blob_size); | 1010 request.blob_size); |
| 908 } | 1011 } |
| 909 webRequest.setReferrer( | 1012 webRequest.setReferrer( |
| 910 blink::WebString::fromUTF8(request.referrer.url.spec()), | 1013 blink::WebString::fromUTF8(request.referrer.url.spec()), |
| 911 request.referrer.policy); | 1014 request.referrer.policy); |
| 912 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); | 1015 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); |
| 913 webRequest.setIsMainResourceLoad(request.is_main_resource_load); | 1016 webRequest.setIsMainResourceLoad(request.is_main_resource_load); |
| 914 webRequest.setCredentialsMode( | 1017 webRequest.setCredentialsMode( |
| 915 GetBlinkFetchCredentialsMode(request.credentials_mode)); | 1018 GetBlinkFetchCredentialsMode(request.credentials_mode)); |
| 916 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); | 1019 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); |
| 917 webRequest.setRequestContext( | 1020 webRequest.setRequestContext( |
| 918 GetBlinkRequestContext(request.request_context_type)); | 1021 GetBlinkRequestContext(request.request_context_type)); |
| 919 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); | 1022 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); |
| 920 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); | 1023 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); |
| 921 webRequest.setIsReload(request.is_reload); | 1024 webRequest.setIsReload(request.is_reload); |
| 922 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { | 1025 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { |
| 923 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest); | 1026 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest); |
| 924 } else { | 1027 } else { |
| 925 proxy_->dispatchFetchEvent(fetch_event_id, webRequest); | 1028 proxy_->dispatchFetchEvent(fetch_event_id, webRequest, |
| 1029 navigation_preload_sent); | |
| 926 } | 1030 } |
| 927 } | 1031 } |
| 928 | 1032 |
| 929 void ServiceWorkerContextClient::OnNotificationClickEvent( | 1033 void ServiceWorkerContextClient::OnNotificationClickEvent( |
| 930 int request_id, | 1034 int request_id, |
| 931 const std::string& notification_id, | 1035 const std::string& notification_id, |
| 932 const PlatformNotificationData& notification_data, | 1036 const PlatformNotificationData& notification_data, |
| 933 int action_index, | 1037 int action_index, |
| 934 const base::NullableString16& reply) { | 1038 const base::NullableString16& reply) { |
| 935 TRACE_EVENT0("ServiceWorker", | 1039 TRACE_EVENT0("ServiceWorker", |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1150 } | 1254 } |
| 1151 | 1255 |
| 1152 base::WeakPtr<ServiceWorkerContextClient> | 1256 base::WeakPtr<ServiceWorkerContextClient> |
| 1153 ServiceWorkerContextClient::GetWeakPtr() { | 1257 ServiceWorkerContextClient::GetWeakPtr() { |
| 1154 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1258 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1155 DCHECK(context_); | 1259 DCHECK(context_); |
| 1156 return context_->weak_factory.GetWeakPtr(); | 1260 return context_->weak_factory.GetWeakPtr(); |
| 1157 } | 1261 } |
| 1158 | 1262 |
| 1159 } // namespace content | 1263 } // namespace content |
| OLD | NEW |