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

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

Issue 2422793002: HTML MessagePort as mojo::MessagePipeHandle (Closed)
Patch Set: Address feedback from yusuf 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_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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698