| 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_utils.h" | 40 #include "content/common/service_worker/service_worker_utils.h" |
| 42 #include "content/public/common/push_event_payload.h" | 41 #include "content/public/common/push_event_payload.h" |
| 43 #include "content/public/common/referrer.h" | 42 #include "content/public/common/referrer.h" |
| 44 #include "content/public/renderer/content_renderer_client.h" | 43 #include "content/public/renderer/content_renderer_client.h" |
| 45 #include "content/public/renderer/document_state.h" | 44 #include "content/public/renderer/document_state.h" |
| 46 #include "content/renderer/devtools/devtools_agent.h" | 45 #include "content/renderer/devtools/devtools_agent.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 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 DCHECK(provider_context_); | 820 DCHECK(provider_context_); |
| 833 | 821 |
| 834 // Blink is responsible for deleting the returned object. | 822 // Blink is responsible for deleting the returned object. |
| 835 return new WebServiceWorkerProviderImpl( | 823 return new WebServiceWorkerProviderImpl( |
| 836 sender_.get(), provider_context_.get()); | 824 sender_.get(), provider_context_.get()); |
| 837 } | 825 } |
| 838 | 826 |
| 839 void ServiceWorkerContextClient::postMessageToClient( | 827 void ServiceWorkerContextClient::postMessageToClient( |
| 840 const blink::WebString& uuid, | 828 const blink::WebString& uuid, |
| 841 const blink::WebString& message, | 829 const blink::WebString& message, |
| 842 blink::WebMessagePortChannelArray* channels) { | 830 blink::WebMessagePortChannelArray channels) { |
| 843 // This may send channels for MessagePorts, and all internal book-keeping | 831 Send(new ServiceWorkerHostMsg_PostMessageToClient( |
| 844 // messages for MessagePort (e.g. QueueMessages) are sent from main thread | 832 GetRoutingID(), uuid.utf8(), message.utf16(), |
| 845 // (with thread hopping), so we need to do the same thread hopping here not | 833 WebMessagePortChannelImpl::ExtractMessagePorts(std::move(channels)))); |
| 846 // to overtake those messages. | |
| 847 std::unique_ptr<blink::WebMessagePortChannelArray> channel_array(channels); | |
| 848 main_thread_task_runner_->PostTask( | |
| 849 FROM_HERE, | |
| 850 base::Bind(&SendPostMessageToClientOnMainThread, | |
| 851 base::RetainedRef(sender_), GetRoutingID(), uuid.utf8(), | |
| 852 message.utf16(), base::Passed(&channel_array))); | |
| 853 } | 834 } |
| 854 | 835 |
| 855 void ServiceWorkerContextClient::focus( | 836 void ServiceWorkerContextClient::focus( |
| 856 const blink::WebString& uuid, | 837 const blink::WebString& uuid, |
| 857 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { | 838 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { |
| 858 DCHECK(callback); | 839 DCHECK(callback); |
| 859 int request_id = context_->client_callbacks.Add(std::move(callback)); | 840 int request_id = context_->client_callbacks.Add(std::move(callback)); |
| 860 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, | 841 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, |
| 861 uuid.utf8())); | 842 uuid.utf8())); |
| 862 } | 843 } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 | 941 |
| 961 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( | 942 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
| 962 mojom::ExtendableMessageEventPtr event, | 943 mojom::ExtendableMessageEventPtr event, |
| 963 const DispatchExtendableMessageEventCallback& callback) { | 944 const DispatchExtendableMessageEventCallback& callback) { |
| 964 TRACE_EVENT0("ServiceWorker", | 945 TRACE_EVENT0("ServiceWorker", |
| 965 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); | 946 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); |
| 966 int request_id = context_->message_event_callbacks.Add( | 947 int request_id = context_->message_event_callbacks.Add( |
| 967 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); | 948 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); |
| 968 | 949 |
| 969 blink::WebMessagePortChannelArray ports = | 950 blink::WebMessagePortChannelArray ports = |
| 970 WebMessagePortChannelImpl::CreatePorts(event->message_ports, | 951 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( |
| 971 event->new_routing_ids, | 952 std::move(event->message_ports)); |
| 972 main_thread_task_runner_); | |
| 973 if (event->source.client_info.IsValid()) { | 953 if (event->source.client_info.IsValid()) { |
| 974 blink::WebServiceWorkerClientInfo web_client = | 954 blink::WebServiceWorkerClientInfo web_client = |
| 975 ToWebServiceWorkerClientInfo(event->source.client_info); | 955 ToWebServiceWorkerClientInfo(event->source.client_info); |
| 976 proxy_->dispatchExtendableMessageEvent( | 956 proxy_->dispatchExtendableMessageEvent( |
| 977 request_id, blink::WebString::fromUTF16(event->message), | 957 request_id, blink::WebString::fromUTF16(event->message), |
| 978 event->source_origin, ports, web_client); | 958 event->source_origin, std::move(ports), web_client); |
| 979 return; | 959 return; |
| 980 } | 960 } |
| 981 | 961 |
| 982 DCHECK(event->source.service_worker_info.IsValid()); | 962 DCHECK(event->source.service_worker_info.IsValid()); |
| 983 std::unique_ptr<ServiceWorkerHandleReference> handle = | 963 std::unique_ptr<ServiceWorkerHandleReference> handle = |
| 984 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, | 964 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, |
| 985 sender_.get()); | 965 sender_.get()); |
| 986 ServiceWorkerDispatcher* dispatcher = | 966 ServiceWorkerDispatcher* dispatcher = |
| 987 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 967 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
| 988 sender_.get(), main_thread_task_runner_.get()); | 968 sender_.get(), main_thread_task_runner_.get()); |
| 989 scoped_refptr<WebServiceWorkerImpl> worker = | 969 scoped_refptr<WebServiceWorkerImpl> worker = |
| 990 dispatcher->GetOrCreateServiceWorker(std::move(handle)); | 970 dispatcher->GetOrCreateServiceWorker(std::move(handle)); |
| 991 proxy_->dispatchExtendableMessageEvent( | 971 proxy_->dispatchExtendableMessageEvent( |
| 992 request_id, blink::WebString::fromUTF16(event->message), | 972 request_id, blink::WebString::fromUTF16(event->message), |
| 993 event->source_origin, ports, WebServiceWorkerImpl::CreateHandle(worker)); | 973 event->source_origin, std::move(ports), |
| 974 WebServiceWorkerImpl::CreateHandle(worker)); |
| 994 } | 975 } |
| 995 | 976 |
| 996 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 977 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| 997 TRACE_EVENT0("ServiceWorker", | 978 TRACE_EVENT0("ServiceWorker", |
| 998 "ServiceWorkerContextClient::OnInstallEvent"); | 979 "ServiceWorkerContextClient::OnInstallEvent"); |
| 999 proxy_->dispatchInstallEvent(request_id); | 980 proxy_->dispatchInstallEvent(request_id); |
| 1000 } | 981 } |
| 1001 | 982 |
| 1002 void ServiceWorkerContextClient::DispatchFetchEvent( | 983 void ServiceWorkerContextClient::DispatchFetchEvent( |
| 1003 int fetch_event_id, | 984 int fetch_event_id, |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 } | 1294 } |
| 1314 | 1295 |
| 1315 base::WeakPtr<ServiceWorkerContextClient> | 1296 base::WeakPtr<ServiceWorkerContextClient> |
| 1316 ServiceWorkerContextClient::GetWeakPtr() { | 1297 ServiceWorkerContextClient::GetWeakPtr() { |
| 1317 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1298 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1318 DCHECK(context_); | 1299 DCHECK(context_); |
| 1319 return context_->weak_factory.GetWeakPtr(); | 1300 return context_->weak_factory.GetWeakPtr(); |
| 1320 } | 1301 } |
| 1321 | 1302 |
| 1322 } // namespace content | 1303 } // namespace content |
| OLD | NEW |