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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 std::unique_ptr<RequestExtraData> extra_data(new RequestExtraData); | 105 std::unique_ptr<RequestExtraData> extra_data(new RequestExtraData); |
106 extra_data->set_service_worker_provider_id(provider->provider_id()); | 106 extra_data->set_service_worker_provider_id(provider->provider_id()); |
107 extra_data->set_originated_from_service_worker(true); | 107 extra_data->set_originated_from_service_worker(true); |
108 // Service workers are only available in secure contexts, so all requests | 108 // Service workers are only available in secure contexts, so all requests |
109 // are initiated in a secure context. | 109 // are initiated in a secure context. |
110 extra_data->set_initiated_in_secure_context(true); | 110 extra_data->set_initiated_in_secure_context(true); |
111 request.setExtraData(extra_data.release()); | 111 request.setExtraData(extra_data.release()); |
112 } | 112 } |
113 }; | 113 }; |
114 | 114 |
| 115 ServiceWorkerStatusCode EventResultToStatus( |
| 116 blink::WebServiceWorkerEventResult result) { |
| 117 switch (result) { |
| 118 case blink::WebServiceWorkerEventResultCompleted: |
| 119 return SERVICE_WORKER_OK; |
| 120 case blink::WebServiceWorkerEventResultRejected: |
| 121 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; |
| 122 } |
| 123 NOTREACHED() << "Got invalid result: " << result; |
| 124 return SERVICE_WORKER_ERROR_FAILED; |
| 125 } |
| 126 |
115 void SendPostMessageToClientOnMainThread( | 127 void SendPostMessageToClientOnMainThread( |
116 ThreadSafeSender* sender, | 128 ThreadSafeSender* sender, |
117 int routing_id, | 129 int routing_id, |
118 const std::string& uuid, | 130 const std::string& uuid, |
119 const base::string16& message, | 131 const base::string16& message, |
120 std::unique_ptr<blink::WebMessagePortChannelArray> channels) { | 132 std::unique_ptr<blink::WebMessagePortChannelArray> channels) { |
121 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( | 133 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( |
122 routing_id, uuid, message, | 134 routing_id, uuid, message, |
123 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); | 135 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); |
124 } | 136 } |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 base::Time::FromDoubleT(event_dispatch_time))); | 688 base::Time::FromDoubleT(event_dispatch_time))); |
677 } | 689 } |
678 | 690 |
679 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( | 691 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( |
680 int request_id, | 692 int request_id, |
681 blink::WebServiceWorkerEventResult result, | 693 blink::WebServiceWorkerEventResult result, |
682 double event_dispatch_time) { | 694 double event_dispatch_time) { |
683 const DispatchExtendableMessageEventCallback* callback = | 695 const DispatchExtendableMessageEventCallback* callback = |
684 context_->message_event_callbacks.Lookup(request_id); | 696 context_->message_event_callbacks.Lookup(request_id); |
685 DCHECK(callback); | 697 DCHECK(callback); |
686 if (result == blink::WebServiceWorkerEventResultCompleted) { | 698 callback->Run(EventResultToStatus(result), |
687 callback->Run(SERVICE_WORKER_OK, | 699 base::Time::FromDoubleT(event_dispatch_time)); |
688 base::Time::FromDoubleT(event_dispatch_time)); | |
689 } else { | |
690 callback->Run(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, | |
691 base::Time::FromDoubleT(event_dispatch_time)); | |
692 } | |
693 context_->message_event_callbacks.Remove(request_id); | 700 context_->message_event_callbacks.Remove(request_id); |
694 } | 701 } |
695 | 702 |
696 void ServiceWorkerContextClient::didHandleInstallEvent( | 703 void ServiceWorkerContextClient::didHandleInstallEvent( |
697 int request_id, | 704 int request_id, |
698 blink::WebServiceWorkerEventResult result, | 705 blink::WebServiceWorkerEventResult result, |
699 double event_dispatch_time) { | 706 double event_dispatch_time) { |
700 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 707 Send(new ServiceWorkerHostMsg_InstallEventFinished( |
701 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), | 708 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), |
702 base::Time::FromDoubleT(event_dispatch_time))); | 709 base::Time::FromDoubleT(event_dispatch_time))); |
(...skipping 24 matching lines...) Expand all Loading... |
727 blink::WebServiceWorkerEventResult result, | 734 blink::WebServiceWorkerEventResult result, |
728 double event_dispatch_time) { | 735 double event_dispatch_time) { |
729 if (context_->preload_requests.Lookup(fetch_event_id)) { | 736 if (context_->preload_requests.Lookup(fetch_event_id)) { |
730 // Deletes NavigationPreloadRequest. If the network request is ongoing, it | 737 // Deletes NavigationPreloadRequest. If the network request is ongoing, it |
731 // will be canceled by deleting the mojom::URLLoaderPtr in the | 738 // will be canceled by deleting the mojom::URLLoaderPtr in the |
732 // NavigationPreloadRequest. | 739 // NavigationPreloadRequest. |
733 context_->preload_requests.Remove(fetch_event_id); | 740 context_->preload_requests.Remove(fetch_event_id); |
734 } | 741 } |
735 const FetchCallback* callback = | 742 const FetchCallback* callback = |
736 context_->fetch_event_callbacks.Lookup(fetch_event_id); | 743 context_->fetch_event_callbacks.Lookup(fetch_event_id); |
737 if (!callback) | 744 DCHECK(callback); |
738 return; | 745 callback->Run(EventResultToStatus(result), |
739 | |
740 callback->Run(result == blink::WebServiceWorkerEventResultCompleted | |
741 ? SERVICE_WORKER_OK | |
742 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, | |
743 base::Time::FromDoubleT(event_dispatch_time)); | 746 base::Time::FromDoubleT(event_dispatch_time)); |
744 context_->fetch_event_callbacks.Remove(fetch_event_id); | 747 context_->fetch_event_callbacks.Remove(fetch_event_id); |
745 } | 748 } |
746 | 749 |
747 void ServiceWorkerContextClient::didHandleNotificationClickEvent( | 750 void ServiceWorkerContextClient::didHandleNotificationClickEvent( |
748 int request_id, | 751 int request_id, |
749 blink::WebServiceWorkerEventResult result, | 752 blink::WebServiceWorkerEventResult result, |
750 double event_dispatch_time) { | 753 double event_dispatch_time) { |
751 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( | 754 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( |
752 GetRoutingID(), request_id, result, | 755 GetRoutingID(), request_id, result, |
(...skipping 17 matching lines...) Expand all Loading... |
770 GetRoutingID(), request_id, result, | 773 GetRoutingID(), request_id, result, |
771 base::Time::FromDoubleT(event_dispatch_time))); | 774 base::Time::FromDoubleT(event_dispatch_time))); |
772 } | 775 } |
773 | 776 |
774 void ServiceWorkerContextClient::didHandleSyncEvent( | 777 void ServiceWorkerContextClient::didHandleSyncEvent( |
775 int request_id, | 778 int request_id, |
776 blink::WebServiceWorkerEventResult result, | 779 blink::WebServiceWorkerEventResult result, |
777 double event_dispatch_time) { | 780 double event_dispatch_time) { |
778 const SyncCallback* callback = | 781 const SyncCallback* callback = |
779 context_->sync_event_callbacks.Lookup(request_id); | 782 context_->sync_event_callbacks.Lookup(request_id); |
780 if (!callback) | 783 DCHECK(callback); |
781 return; | 784 callback->Run(EventResultToStatus(result), |
782 if (result == blink::WebServiceWorkerEventResultCompleted) { | 785 base::Time::FromDoubleT(event_dispatch_time)); |
783 callback->Run(SERVICE_WORKER_OK, | |
784 base::Time::FromDoubleT(event_dispatch_time)); | |
785 } else { | |
786 callback->Run(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, | |
787 base::Time::FromDoubleT(event_dispatch_time)); | |
788 } | |
789 context_->sync_event_callbacks.Remove(request_id); | 786 context_->sync_event_callbacks.Remove(request_id); |
790 } | 787 } |
791 | 788 |
792 blink::WebServiceWorkerNetworkProvider* | 789 blink::WebServiceWorkerNetworkProvider* |
793 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( | 790 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( |
794 blink::WebDataSource* data_source) { | 791 blink::WebDataSource* data_source) { |
795 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 792 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); |
796 | 793 |
797 // Create a content::ServiceWorkerNetworkProvider for this data source so | 794 // Create a content::ServiceWorkerNetworkProvider for this data source so |
798 // we can observe its requests. | 795 // we can observe its requests. |
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 } | 1283 } |
1287 | 1284 |
1288 base::WeakPtr<ServiceWorkerContextClient> | 1285 base::WeakPtr<ServiceWorkerContextClient> |
1289 ServiceWorkerContextClient::GetWeakPtr() { | 1286 ServiceWorkerContextClient::GetWeakPtr() { |
1290 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1287 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
1291 DCHECK(context_); | 1288 DCHECK(context_); |
1292 return context_->weak_factory.GetWeakPtr(); | 1289 return context_->weak_factory.GetWeakPtr(); |
1293 } | 1290 } |
1294 | 1291 |
1295 } // namespace content | 1292 } // namespace content |
OLD | NEW |