Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Side by Side Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2422793002: HTML MessagePort as mojo::MessagePipeHandle (Closed)
Patch Set: Add comments about threading in message_port.h Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698