| 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 15 matching lines...) Expand all Loading... |
| 26 #include "content/child/service_worker/service_worker_provider_context.h" | 26 #include "content/child/service_worker/service_worker_provider_context.h" |
| 27 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" | 27 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" |
| 28 #include "content/child/service_worker/web_service_worker_impl.h" | 28 #include "content/child/service_worker/web_service_worker_impl.h" |
| 29 #include "content/child/service_worker/web_service_worker_provider_impl.h" | 29 #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| 30 #include "content/child/service_worker/web_service_worker_registration_impl.h" | 30 #include "content/child/service_worker/web_service_worker_registration_impl.h" |
| 31 #include "content/child/thread_safe_sender.h" | 31 #include "content/child/thread_safe_sender.h" |
| 32 #include "content/child/web_data_consumer_handle_impl.h" | 32 #include "content/child/web_data_consumer_handle_impl.h" |
| 33 #include "content/child/web_url_loader_impl.h" | 33 #include "content/child/web_url_loader_impl.h" |
| 34 #include "content/child/webmessageportchannel_impl.h" | 34 #include "content/child/webmessageportchannel_impl.h" |
| 35 #include "content/common/devtools_messages.h" | 35 #include "content/common/devtools_messages.h" |
| 36 #include "content/common/message_port_messages.h" | |
| 37 #include "content/common/service_worker/embedded_worker_messages.h" | 36 #include "content/common/service_worker/embedded_worker_messages.h" |
| 38 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" | 37 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" |
| 39 #include "content/common/service_worker/service_worker_messages.h" | 38 #include "content/common/service_worker/service_worker_messages.h" |
| 40 #include "content/common/service_worker/service_worker_status_code.h" | 39 #include "content/common/service_worker/service_worker_status_code.h" |
| 41 #include "content/common/service_worker/service_worker_type_converters.h" | 40 #include "content/common/service_worker/service_worker_type_converters.h" |
| 42 #include "content/common/service_worker/service_worker_utils.h" | 41 #include "content/common/service_worker/service_worker_utils.h" |
| 43 #include "content/public/common/push_event_payload.h" | 42 #include "content/public/common/push_event_payload.h" |
| 44 #include "content/public/common/referrer.h" | 43 #include "content/public/common/referrer.h" |
| 45 #include "content/public/renderer/content_renderer_client.h" | 44 #include "content/public/renderer/content_renderer_client.h" |
| 46 #include "content/public/renderer/document_state.h" | 45 #include "content/public/renderer/document_state.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 switch (result) { | 121 switch (result) { |
| 123 case blink::WebServiceWorkerEventResultCompleted: | 122 case blink::WebServiceWorkerEventResultCompleted: |
| 124 return SERVICE_WORKER_OK; | 123 return SERVICE_WORKER_OK; |
| 125 case blink::WebServiceWorkerEventResultRejected: | 124 case blink::WebServiceWorkerEventResultRejected: |
| 126 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; | 125 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; |
| 127 } | 126 } |
| 128 NOTREACHED() << "Got invalid result: " << result; | 127 NOTREACHED() << "Got invalid result: " << result; |
| 129 return SERVICE_WORKER_ERROR_FAILED; | 128 return SERVICE_WORKER_ERROR_FAILED; |
| 130 } | 129 } |
| 131 | 130 |
| 132 void SendPostMessageToClientOnMainThread( | |
| 133 ThreadSafeSender* sender, | |
| 134 int routing_id, | |
| 135 const std::string& uuid, | |
| 136 const base::string16& message, | |
| 137 std::unique_ptr<blink::WebMessagePortChannelArray> channels) { | |
| 138 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( | |
| 139 routing_id, uuid, message, | |
| 140 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); | |
| 141 } | |
| 142 | |
| 143 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( | 131 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( |
| 144 FetchRequestMode mode) { | 132 FetchRequestMode mode) { |
| 145 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); | 133 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); |
| 146 } | 134 } |
| 147 | 135 |
| 148 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( | 136 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( |
| 149 FetchCredentialsMode credentials_mode) { | 137 FetchCredentialsMode credentials_mode) { |
| 150 return static_cast<blink::WebURLRequest::FetchCredentialsMode>( | 138 return static_cast<blink::WebURLRequest::FetchCredentialsMode>( |
| 151 credentials_mode); | 139 credentials_mode); |
| 152 } | 140 } |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 DCHECK(provider_context_); | 796 DCHECK(provider_context_); |
| 809 | 797 |
| 810 // Blink is responsible for deleting the returned object. | 798 // Blink is responsible for deleting the returned object. |
| 811 return new WebServiceWorkerProviderImpl( | 799 return new WebServiceWorkerProviderImpl( |
| 812 sender_.get(), provider_context_.get()); | 800 sender_.get(), provider_context_.get()); |
| 813 } | 801 } |
| 814 | 802 |
| 815 void ServiceWorkerContextClient::postMessageToClient( | 803 void ServiceWorkerContextClient::postMessageToClient( |
| 816 const blink::WebString& uuid, | 804 const blink::WebString& uuid, |
| 817 const blink::WebString& message, | 805 const blink::WebString& message, |
| 818 blink::WebMessagePortChannelArray* channels) { | 806 blink::WebMessagePortChannelArray channels) { |
| 819 // This may send channels for MessagePorts, and all internal book-keeping | 807 Send(new ServiceWorkerHostMsg_PostMessageToClient( |
| 820 // messages for MessagePort (e.g. QueueMessages) are sent from main thread | 808 GetRoutingID(), uuid.utf8(), message.utf16(), |
| 821 // (with thread hopping), so we need to do the same thread hopping here not | 809 WebMessagePortChannelImpl::ExtractMessagePorts(std::move(channels)))); |
| 822 // to overtake those messages. | |
| 823 std::unique_ptr<blink::WebMessagePortChannelArray> channel_array(channels); | |
| 824 main_thread_task_runner_->PostTask( | |
| 825 FROM_HERE, | |
| 826 base::Bind(&SendPostMessageToClientOnMainThread, | |
| 827 base::RetainedRef(sender_), GetRoutingID(), uuid.utf8(), | |
| 828 message.utf16(), base::Passed(&channel_array))); | |
| 829 } | 810 } |
| 830 | 811 |
| 831 void ServiceWorkerContextClient::focus( | 812 void ServiceWorkerContextClient::focus( |
| 832 const blink::WebString& uuid, | 813 const blink::WebString& uuid, |
| 833 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { | 814 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { |
| 834 DCHECK(callback); | 815 DCHECK(callback); |
| 835 int request_id = context_->client_callbacks.Add(std::move(callback)); | 816 int request_id = context_->client_callbacks.Add(std::move(callback)); |
| 836 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, | 817 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, |
| 837 uuid.utf8())); | 818 uuid.utf8())); |
| 838 } | 819 } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 | 917 |
| 937 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( | 918 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
| 938 mojom::ExtendableMessageEventPtr event, | 919 mojom::ExtendableMessageEventPtr event, |
| 939 const DispatchExtendableMessageEventCallback& callback) { | 920 const DispatchExtendableMessageEventCallback& callback) { |
| 940 TRACE_EVENT0("ServiceWorker", | 921 TRACE_EVENT0("ServiceWorker", |
| 941 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); | 922 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); |
| 942 int request_id = context_->message_event_callbacks.Add( | 923 int request_id = context_->message_event_callbacks.Add( |
| 943 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); | 924 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); |
| 944 | 925 |
| 945 blink::WebMessagePortChannelArray ports = | 926 blink::WebMessagePortChannelArray ports = |
| 946 WebMessagePortChannelImpl::CreatePorts(event->message_ports, | 927 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( |
| 947 event->new_routing_ids, | 928 std::move(event->message_ports)); |
| 948 main_thread_task_runner_); | |
| 949 if (event->source.client_info.IsValid()) { | 929 if (event->source.client_info.IsValid()) { |
| 950 blink::WebServiceWorkerClientInfo web_client = | 930 blink::WebServiceWorkerClientInfo web_client = |
| 951 ToWebServiceWorkerClientInfo(event->source.client_info); | 931 ToWebServiceWorkerClientInfo(event->source.client_info); |
| 952 proxy_->dispatchExtendableMessageEvent( | 932 proxy_->dispatchExtendableMessageEvent( |
| 953 request_id, blink::WebString::fromUTF16(event->message), | 933 request_id, blink::WebString::fromUTF16(event->message), |
| 954 event->source_origin, ports, web_client); | 934 event->source_origin, std::move(ports), web_client); |
| 955 return; | 935 return; |
| 956 } | 936 } |
| 957 | 937 |
| 958 DCHECK(event->source.service_worker_info.IsValid()); | 938 DCHECK(event->source.service_worker_info.IsValid()); |
| 959 std::unique_ptr<ServiceWorkerHandleReference> handle = | 939 std::unique_ptr<ServiceWorkerHandleReference> handle = |
| 960 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, | 940 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, |
| 961 sender_.get()); | 941 sender_.get()); |
| 962 ServiceWorkerDispatcher* dispatcher = | 942 ServiceWorkerDispatcher* dispatcher = |
| 963 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 943 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
| 964 sender_.get(), main_thread_task_runner_.get()); | 944 sender_.get(), main_thread_task_runner_.get()); |
| 965 scoped_refptr<WebServiceWorkerImpl> worker = | 945 scoped_refptr<WebServiceWorkerImpl> worker = |
| 966 dispatcher->GetOrCreateServiceWorker(std::move(handle)); | 946 dispatcher->GetOrCreateServiceWorker(std::move(handle)); |
| 967 proxy_->dispatchExtendableMessageEvent( | 947 proxy_->dispatchExtendableMessageEvent( |
| 968 request_id, blink::WebString::fromUTF16(event->message), | 948 request_id, blink::WebString::fromUTF16(event->message), |
| 969 event->source_origin, ports, WebServiceWorkerImpl::CreateHandle(worker)); | 949 event->source_origin, std::move(ports), |
| 950 WebServiceWorkerImpl::CreateHandle(worker)); |
| 970 } | 951 } |
| 971 | 952 |
| 972 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 953 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 973 TRACE_EVENT0("ServiceWorker", | 954 TRACE_EVENT0("ServiceWorker", |
| 974 "ServiceWorkerContextClient::OnInstallEvent"); | 955 "ServiceWorkerContextClient::OnInstallEvent"); |
| 975 proxy_->dispatchInstallEvent(request_id); | 956 proxy_->dispatchInstallEvent(request_id); |
| 976 } | 957 } |
| 977 | 958 |
| 978 void ServiceWorkerContextClient::DispatchFetchEvent( | 959 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 979 int fetch_event_id, | 960 int fetch_event_id, |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1278 } | 1259 } |
| 1279 | 1260 |
| 1280 base::WeakPtr<ServiceWorkerContextClient> | 1261 base::WeakPtr<ServiceWorkerContextClient> |
| 1281 ServiceWorkerContextClient::GetWeakPtr() { | 1262 ServiceWorkerContextClient::GetWeakPtr() { |
| 1282 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1263 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1283 DCHECK(context_); | 1264 DCHECK(context_); |
| 1284 return context_->weak_factory.GetWeakPtr(); | 1265 return context_->weak_factory.GetWeakPtr(); |
| 1285 } | 1266 } |
| 1286 | 1267 |
| 1287 } // namespace content | 1268 } // namespace content |
| OLD | NEW |