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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 } | 124 } |
126 NOTREACHED() << "Got invalid result: " << result; | 125 NOTREACHED() << "Got invalid result: " << result; |
127 return SERVICE_WORKER_ERROR_FAILED; | 126 return SERVICE_WORKER_ERROR_FAILED; |
128 } | 127 } |
129 | 128 |
130 void SendPostMessageToClientOnMainThread( | 129 void SendPostMessageToClientOnMainThread( |
131 ThreadSafeSender* sender, | 130 ThreadSafeSender* sender, |
132 int routing_id, | 131 int routing_id, |
133 const std::string& uuid, | 132 const std::string& uuid, |
134 const base::string16& message, | 133 const base::string16& message, |
135 std::unique_ptr<blink::WebMessagePortChannelArray> channels) { | 134 blink::WebMessagePortChannelArray channels) { |
136 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( | 135 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( |
137 routing_id, uuid, message, | 136 routing_id, uuid, message, |
138 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); | 137 WebMessagePortChannelImpl::ExtractMessagePorts(std::move(channels)))); |
139 } | 138 } |
140 | 139 |
141 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( | 140 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( |
142 FetchRequestMode mode) { | 141 FetchRequestMode mode) { |
143 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); | 142 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); |
144 } | 143 } |
145 | 144 |
146 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( | 145 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( |
147 FetchCredentialsMode credentials_mode) { | 146 FetchCredentialsMode credentials_mode) { |
148 return static_cast<blink::WebURLRequest::FetchCredentialsMode>( | 147 return static_cast<blink::WebURLRequest::FetchCredentialsMode>( |
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 DCHECK(provider_context_); | 788 DCHECK(provider_context_); |
790 | 789 |
791 // Blink is responsible for deleting the returned object. | 790 // Blink is responsible for deleting the returned object. |
792 return new WebServiceWorkerProviderImpl( | 791 return new WebServiceWorkerProviderImpl( |
793 sender_.get(), provider_context_.get()); | 792 sender_.get(), provider_context_.get()); |
794 } | 793 } |
795 | 794 |
796 void ServiceWorkerContextClient::postMessageToClient( | 795 void ServiceWorkerContextClient::postMessageToClient( |
797 const blink::WebString& uuid, | 796 const blink::WebString& uuid, |
798 const blink::WebString& message, | 797 const blink::WebString& message, |
799 blink::WebMessagePortChannelArray* channels) { | 798 blink::WebMessagePortChannelArray channels) { |
800 // This may send channels for MessagePorts, and all internal book-keeping | 799 // This may send channels for MessagePorts, and all internal book-keeping |
801 // messages for MessagePort (e.g. QueueMessages) are sent from main thread | 800 // messages for MessagePort (e.g. QueueMessages) are sent from main thread |
802 // (with thread hopping), so we need to do the same thread hopping here not | 801 // (with thread hopping), so we need to do the same thread hopping here not |
803 // to overtake those messages. | 802 // to overtake those messages. |
804 std::unique_ptr<blink::WebMessagePortChannelArray> channel_array(channels); | 803 // TODO(darin): The above comment no longer makes sense. We can probably |
| 804 // send from this thread now. |
805 main_thread_task_runner_->PostTask( | 805 main_thread_task_runner_->PostTask( |
806 FROM_HERE, | 806 FROM_HERE, |
807 base::Bind(&SendPostMessageToClientOnMainThread, | 807 base::Bind(&SendPostMessageToClientOnMainThread, |
808 base::RetainedRef(sender_), GetRoutingID(), uuid.utf8(), | 808 base::RetainedRef(sender_), GetRoutingID(), uuid.utf8(), |
809 message.utf16(), base::Passed(&channel_array))); | 809 message.utf16(), base::Passed(&channels))); |
810 } | 810 } |
811 | 811 |
812 void ServiceWorkerContextClient::focus( | 812 void ServiceWorkerContextClient::focus( |
813 const blink::WebString& uuid, | 813 const blink::WebString& uuid, |
814 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { | 814 std::unique_ptr<blink::WebServiceWorkerClientCallbacks> callback) { |
815 DCHECK(callback); | 815 DCHECK(callback); |
816 int request_id = context_->client_callbacks.Add(std::move(callback)); | 816 int request_id = context_->client_callbacks.Add(std::move(callback)); |
817 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, | 817 Send(new ServiceWorkerHostMsg_FocusClient(GetRoutingID(), request_id, |
818 uuid.utf8())); | 818 uuid.utf8())); |
819 } | 819 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 | 913 |
914 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( | 914 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
915 mojom::ExtendableMessageEventPtr event, | 915 mojom::ExtendableMessageEventPtr event, |
916 const DispatchExtendableMessageEventCallback& callback) { | 916 const DispatchExtendableMessageEventCallback& callback) { |
917 TRACE_EVENT0("ServiceWorker", | 917 TRACE_EVENT0("ServiceWorker", |
918 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); | 918 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); |
919 int request_id = context_->message_event_callbacks.Add( | 919 int request_id = context_->message_event_callbacks.Add( |
920 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); | 920 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); |
921 | 921 |
922 blink::WebMessagePortChannelArray ports = | 922 blink::WebMessagePortChannelArray ports = |
923 WebMessagePortChannelImpl::CreatePorts(event->message_ports, | 923 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( |
924 event->new_routing_ids, | 924 std::move(event->message_ports)); |
925 main_thread_task_runner_); | |
926 if (event->source.client_info.IsValid()) { | 925 if (event->source.client_info.IsValid()) { |
927 blink::WebServiceWorkerClientInfo web_client = | 926 blink::WebServiceWorkerClientInfo web_client = |
928 ToWebServiceWorkerClientInfo(event->source.client_info); | 927 ToWebServiceWorkerClientInfo(event->source.client_info); |
929 proxy_->dispatchExtendableMessageEvent( | 928 proxy_->dispatchExtendableMessageEvent( |
930 request_id, blink::WebString::fromUTF16(event->message), | 929 request_id, blink::WebString::fromUTF16(event->message), |
931 event->source_origin, ports, web_client); | 930 event->source_origin, std::move(ports), web_client); |
932 return; | 931 return; |
933 } | 932 } |
934 | 933 |
935 DCHECK(event->source.service_worker_info.IsValid()); | 934 DCHECK(event->source.service_worker_info.IsValid()); |
936 std::unique_ptr<ServiceWorkerHandleReference> handle = | 935 std::unique_ptr<ServiceWorkerHandleReference> handle = |
937 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, | 936 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info, |
938 sender_.get()); | 937 sender_.get()); |
939 ServiceWorkerDispatcher* dispatcher = | 938 ServiceWorkerDispatcher* dispatcher = |
940 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 939 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
941 sender_.get(), main_thread_task_runner_.get()); | 940 sender_.get(), main_thread_task_runner_.get()); |
942 scoped_refptr<WebServiceWorkerImpl> worker = | 941 scoped_refptr<WebServiceWorkerImpl> worker = |
943 dispatcher->GetOrCreateServiceWorker(std::move(handle)); | 942 dispatcher->GetOrCreateServiceWorker(std::move(handle)); |
944 proxy_->dispatchExtendableMessageEvent( | 943 proxy_->dispatchExtendableMessageEvent( |
945 request_id, blink::WebString::fromUTF16(event->message), | 944 request_id, blink::WebString::fromUTF16(event->message), |
946 event->source_origin, ports, WebServiceWorkerImpl::CreateHandle(worker)); | 945 event->source_origin, std::move(ports), |
| 946 WebServiceWorkerImpl::CreateHandle(worker)); |
947 } | 947 } |
948 | 948 |
949 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { | 949 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
950 TRACE_EVENT0("ServiceWorker", | 950 TRACE_EVENT0("ServiceWorker", |
951 "ServiceWorkerContextClient::OnInstallEvent"); | 951 "ServiceWorkerContextClient::OnInstallEvent"); |
952 proxy_->dispatchInstallEvent(request_id); | 952 proxy_->dispatchInstallEvent(request_id); |
953 } | 953 } |
954 | 954 |
955 void ServiceWorkerContextClient::DispatchFetchEvent( | 955 void ServiceWorkerContextClient::DispatchFetchEvent( |
956 int fetch_event_id, | 956 int fetch_event_id, |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1255 } | 1255 } |
1256 | 1256 |
1257 base::WeakPtr<ServiceWorkerContextClient> | 1257 base::WeakPtr<ServiceWorkerContextClient> |
1258 ServiceWorkerContextClient::GetWeakPtr() { | 1258 ServiceWorkerContextClient::GetWeakPtr() { |
1259 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1259 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
1260 DCHECK(context_); | 1260 DCHECK(context_); |
1261 return context_->weak_factory.GetWeakPtr(); | 1261 return context_->weak_factory.GetWeakPtr(); |
1262 } | 1262 } |
1263 | 1263 |
1264 } // namespace content | 1264 } // namespace content |
OLD | NEW |