| 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" |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 public: | 228 public: |
| 229 static void Create(mojom::FetchEventDispatcherRequest request) { | 229 static void Create(mojom::FetchEventDispatcherRequest request) { |
| 230 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(), | 230 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(), |
| 231 std::move(request)); | 231 std::move(request)); |
| 232 } | 232 } |
| 233 | 233 |
| 234 FetchEventDispatcherImpl() {} | 234 FetchEventDispatcherImpl() {} |
| 235 | 235 |
| 236 ~FetchEventDispatcherImpl() override {} | 236 ~FetchEventDispatcherImpl() override {} |
| 237 | 237 |
| 238 void DispatchFetchEvent(int response_id, | 238 void DispatchFetchEvent(int fetch_event_id, |
| 239 const ServiceWorkerFetchRequest& request, | 239 const ServiceWorkerFetchRequest& request, |
| 240 const DispatchFetchEventCallback& callback) override { | 240 const DispatchFetchEventCallback& callback) override { |
| 241 ServiceWorkerContextClient* client = | 241 ServiceWorkerContextClient* client = |
| 242 ServiceWorkerContextClient::ThreadSpecificInstance(); | 242 ServiceWorkerContextClient::ThreadSpecificInstance(); |
| 243 if (!client) { | 243 if (!client) { |
| 244 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 244 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
| 245 return; | 245 return; |
| 246 } | 246 } |
| 247 client->DispatchFetchEvent(response_id, request, callback); | 247 client->DispatchFetchEvent(fetch_event_id, request, callback); |
| 248 } | 248 } |
| 249 | 249 |
| 250 private: | 250 private: |
| 251 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl); | 251 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl); |
| 252 }; | 252 }; |
| 253 | 253 |
| 254 ServiceWorkerContextClient* | 254 ServiceWorkerContextClient* |
| 255 ServiceWorkerContextClient::ThreadSpecificInstance() { | 255 ServiceWorkerContextClient::ThreadSpecificInstance() { |
| 256 return g_worker_client_tls.Pointer()->Get(); | 256 return g_worker_client_tls.Pointer()->Get(); |
| 257 } | 257 } |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 void ServiceWorkerContextClient::didHandleInstallEvent( | 579 void ServiceWorkerContextClient::didHandleInstallEvent( |
| 580 int request_id, | 580 int request_id, |
| 581 blink::WebServiceWorkerEventResult result, | 581 blink::WebServiceWorkerEventResult result, |
| 582 double event_dispatch_time) { | 582 double event_dispatch_time) { |
| 583 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 583 Send(new ServiceWorkerHostMsg_InstallEventFinished( |
| 584 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), | 584 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), |
| 585 base::Time::FromDoubleT(event_dispatch_time))); | 585 base::Time::FromDoubleT(event_dispatch_time))); |
| 586 } | 586 } |
| 587 | 587 |
| 588 void ServiceWorkerContextClient::respondToFetchEvent( | 588 void ServiceWorkerContextClient::respondToFetchEvent( |
| 589 int response_id, | 589 int fetch_event_id, |
| 590 double event_dispatch_time) { | 590 double event_dispatch_time) { |
| 591 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 591 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 592 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, | 592 GetRoutingID(), fetch_event_id, |
| 593 ServiceWorkerResponse(), base::Time::FromDoubleT(event_dispatch_time))); | 593 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), |
| 594 base::Time::FromDoubleT(event_dispatch_time))); |
| 594 } | 595 } |
| 595 | 596 |
| 596 void ServiceWorkerContextClient::respondToFetchEvent( | 597 void ServiceWorkerContextClient::respondToFetchEvent( |
| 597 int response_id, | 598 int fetch_event_id, |
| 598 const blink::WebServiceWorkerResponse& web_response, | 599 const blink::WebServiceWorkerResponse& web_response, |
| 599 double event_dispatch_time) { | 600 double event_dispatch_time) { |
| 600 ServiceWorkerHeaderMap headers; | 601 ServiceWorkerHeaderMap headers; |
| 601 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); | 602 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); |
| 602 ServiceWorkerHeaderList cors_exposed_header_names; | 603 ServiceWorkerHeaderList cors_exposed_header_names; |
| 603 GetCorsExposedHeaderNamesFromWebResponse(web_response, | 604 GetCorsExposedHeaderNamesFromWebResponse(web_response, |
| 604 &cors_exposed_header_names); | 605 &cors_exposed_header_names); |
| 605 ServiceWorkerResponse response( | 606 ServiceWorkerResponse response( |
| 606 web_response.url(), web_response.status(), | 607 web_response.url(), web_response.status(), |
| 607 web_response.statusText().utf8(), web_response.responseType(), headers, | 608 web_response.statusText().utf8(), web_response.responseType(), headers, |
| 608 web_response.blobUUID().utf8(), web_response.blobSize(), | 609 web_response.blobUUID().utf8(), web_response.blobSize(), |
| 609 web_response.streamURL(), web_response.error(), | 610 web_response.streamURL(), web_response.error(), |
| 610 base::Time::FromInternalValue(web_response.responseTime()), | 611 base::Time::FromInternalValue(web_response.responseTime()), |
| 611 !web_response.cacheStorageCacheName().isNull(), | 612 !web_response.cacheStorageCacheName().isNull(), |
| 612 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); | 613 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); |
| 613 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 614 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 614 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 615 GetRoutingID(), fetch_event_id, |
| 615 response, base::Time::FromDoubleT(event_dispatch_time))); | 616 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response, |
| 617 base::Time::FromDoubleT(event_dispatch_time))); |
| 616 } | 618 } |
| 617 | 619 |
| 618 void ServiceWorkerContextClient::didHandleFetchEvent( | 620 void ServiceWorkerContextClient::didHandleFetchEvent( |
| 619 int event_finish_id, | 621 int fetch_event_id, |
| 620 blink::WebServiceWorkerEventResult result, | 622 blink::WebServiceWorkerEventResult result, |
| 621 double event_dispatch_time) { | 623 double event_dispatch_time) { |
| 622 const FetchCallback* callback = | 624 const FetchCallback* callback = |
| 623 context_->fetch_event_callbacks.Lookup(event_finish_id); | 625 context_->fetch_event_callbacks.Lookup(fetch_event_id); |
| 624 if (!callback) | 626 if (!callback) |
| 625 return; | 627 return; |
| 626 | 628 |
| 627 callback->Run(result == blink::WebServiceWorkerEventResultCompleted | 629 callback->Run(result == blink::WebServiceWorkerEventResultCompleted |
| 628 ? SERVICE_WORKER_OK | 630 ? SERVICE_WORKER_OK |
| 629 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, | 631 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, |
| 630 base::Time::FromDoubleT(event_dispatch_time)); | 632 base::Time::FromDoubleT(event_dispatch_time)); |
| 631 context_->fetch_event_callbacks.Remove(event_finish_id); | 633 context_->fetch_event_callbacks.Remove(fetch_event_id); |
| 632 } | 634 } |
| 633 | 635 |
| 634 void ServiceWorkerContextClient::didHandleNotificationClickEvent( | 636 void ServiceWorkerContextClient::didHandleNotificationClickEvent( |
| 635 int request_id, | 637 int request_id, |
| 636 blink::WebServiceWorkerEventResult result, | 638 blink::WebServiceWorkerEventResult result, |
| 637 double event_dispatch_time) { | 639 double event_dispatch_time) { |
| 638 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( | 640 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( |
| 639 GetRoutingID(), request_id, result, | 641 GetRoutingID(), request_id, result, |
| 640 base::Time::FromDoubleT(event_dispatch_time))); | 642 base::Time::FromDoubleT(event_dispatch_time))); |
| 641 } | 643 } |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 WebServiceWorkerImpl::CreateHandle(worker)); | 864 WebServiceWorkerImpl::CreateHandle(worker)); |
| 863 } | 865 } |
| 864 | 866 |
| 865 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 867 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 866 TRACE_EVENT0("ServiceWorker", | 868 TRACE_EVENT0("ServiceWorker", |
| 867 "ServiceWorkerContextClient::OnInstallEvent"); | 869 "ServiceWorkerContextClient::OnInstallEvent"); |
| 868 proxy_->dispatchInstallEvent(request_id); | 870 proxy_->dispatchInstallEvent(request_id); |
| 869 } | 871 } |
| 870 | 872 |
| 871 void ServiceWorkerContextClient::DispatchFetchEvent( | 873 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 872 int response_id, | 874 int fetch_event_id, |
| 873 const ServiceWorkerFetchRequest& request, | 875 const ServiceWorkerFetchRequest& request, |
| 874 const FetchCallback& callback) { | 876 const FetchCallback& callback) { |
| 875 blink::WebServiceWorkerRequest webRequest; | 877 blink::WebServiceWorkerRequest webRequest; |
| 876 TRACE_EVENT0("ServiceWorker", | 878 TRACE_EVENT0("ServiceWorker", |
| 877 "ServiceWorkerContextClient::DispatchFetchEvent"); | 879 "ServiceWorkerContextClient::DispatchFetchEvent"); |
| 878 int event_finish_id = | 880 context_->fetch_event_callbacks.AddWithID(new FetchCallback(callback), |
| 879 context_->fetch_event_callbacks.Add(new FetchCallback(callback)); | 881 fetch_event_id); |
| 880 | 882 |
| 881 webRequest.setURL(blink::WebURL(request.url)); | 883 webRequest.setURL(blink::WebURL(request.url)); |
| 882 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); | 884 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); |
| 883 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); | 885 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); |
| 884 it != request.headers.end(); | 886 it != request.headers.end(); |
| 885 ++it) { | 887 ++it) { |
| 886 webRequest.setHeader(blink::WebString::fromUTF8(it->first), | 888 webRequest.setHeader(blink::WebString::fromUTF8(it->first), |
| 887 blink::WebString::fromUTF8(it->second)); | 889 blink::WebString::fromUTF8(it->second)); |
| 888 } | 890 } |
| 889 if (!request.blob_uuid.empty()) { | 891 if (!request.blob_uuid.empty()) { |
| 890 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), | 892 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), |
| 891 request.blob_size); | 893 request.blob_size); |
| 892 } | 894 } |
| 893 webRequest.setReferrer( | 895 webRequest.setReferrer( |
| 894 blink::WebString::fromUTF8(request.referrer.url.spec()), | 896 blink::WebString::fromUTF8(request.referrer.url.spec()), |
| 895 request.referrer.policy); | 897 request.referrer.policy); |
| 896 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); | 898 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); |
| 897 webRequest.setIsMainResourceLoad(request.is_main_resource_load); | 899 webRequest.setIsMainResourceLoad(request.is_main_resource_load); |
| 898 webRequest.setCredentialsMode( | 900 webRequest.setCredentialsMode( |
| 899 GetBlinkFetchCredentialsMode(request.credentials_mode)); | 901 GetBlinkFetchCredentialsMode(request.credentials_mode)); |
| 900 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); | 902 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); |
| 901 webRequest.setRequestContext( | 903 webRequest.setRequestContext( |
| 902 GetBlinkRequestContext(request.request_context_type)); | 904 GetBlinkRequestContext(request.request_context_type)); |
| 903 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); | 905 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); |
| 904 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); | 906 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); |
| 905 webRequest.setIsReload(request.is_reload); | 907 webRequest.setIsReload(request.is_reload); |
| 906 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { | 908 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { |
| 907 proxy_->dispatchForeignFetchEvent(response_id, event_finish_id, webRequest); | 909 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest); |
| 908 } else { | 910 } else { |
| 909 proxy_->dispatchFetchEvent(response_id, event_finish_id, webRequest); | 911 proxy_->dispatchFetchEvent(fetch_event_id, webRequest); |
| 910 } | 912 } |
| 911 } | 913 } |
| 912 | 914 |
| 913 void ServiceWorkerContextClient::OnNotificationClickEvent( | 915 void ServiceWorkerContextClient::OnNotificationClickEvent( |
| 914 int request_id, | 916 int request_id, |
| 915 const std::string& notification_id, | 917 const std::string& notification_id, |
| 916 const PlatformNotificationData& notification_data, | 918 const PlatformNotificationData& notification_data, |
| 917 int action_index) { | 919 int action_index) { |
| 918 TRACE_EVENT0("ServiceWorker", | 920 TRACE_EVENT0("ServiceWorker", |
| 919 "ServiceWorkerContextClient::OnNotificationClickEvent"); | 921 "ServiceWorkerContextClient::OnNotificationClickEvent"); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 } | 1134 } |
| 1133 | 1135 |
| 1134 base::WeakPtr<ServiceWorkerContextClient> | 1136 base::WeakPtr<ServiceWorkerContextClient> |
| 1135 ServiceWorkerContextClient::GetWeakPtr() { | 1137 ServiceWorkerContextClient::GetWeakPtr() { |
| 1136 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1138 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1137 DCHECK(context_); | 1139 DCHECK(context_); |
| 1138 return context_->weak_factory.GetWeakPtr(); | 1140 return context_->weak_factory.GetWeakPtr(); |
| 1139 } | 1141 } |
| 1140 | 1142 |
| 1141 } // namespace content | 1143 } // namespace content |
| OLD | NEW |