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

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

Issue 2534403002: [ServiceWorker] Mojofy extendable message event. (Closed)
Patch Set: Rebase only Created 4 years 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
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 using ClientsCallbacksMap = 173 using ClientsCallbacksMap =
174 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; 174 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>;
175 using ClaimClientsCallbacksMap = 175 using ClaimClientsCallbacksMap =
176 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; 176 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>;
177 using ClientCallbacksMap = 177 using ClientCallbacksMap =
178 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; 178 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>;
179 using SkipWaitingCallbacksMap = 179 using SkipWaitingCallbacksMap =
180 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; 180 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>;
181 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; 181 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>;
182 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; 182 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
183 using ExtendableMessageEventCallbacksMap =
184 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>;
183 using NavigationPreloadRequestsMap = IDMap< 185 using NavigationPreloadRequestsMap = IDMap<
184 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; 186 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>;
185 187
186 explicit WorkerContextData(ServiceWorkerContextClient* owner) 188 explicit WorkerContextData(ServiceWorkerContextClient* owner)
187 : event_dispatcher_binding(owner), 189 : event_dispatcher_binding(owner),
188 weak_factory(owner), 190 weak_factory(owner),
189 proxy_weak_factory(owner->proxy_) {} 191 proxy_weak_factory(owner->proxy_) {}
190 192
191 ~WorkerContextData() { 193 ~WorkerContextData() {
192 DCHECK(thread_checker.CalledOnValidThread()); 194 DCHECK(thread_checker.CalledOnValidThread());
(...skipping 12 matching lines...) Expand all
205 207
206 // Pending callbacks for ClaimClients(). 208 // Pending callbacks for ClaimClients().
207 ClaimClientsCallbacksMap claim_clients_callbacks; 209 ClaimClientsCallbacksMap claim_clients_callbacks;
208 210
209 // Pending callbacks for Background Sync Events. 211 // Pending callbacks for Background Sync Events.
210 SyncEventCallbacksMap sync_event_callbacks; 212 SyncEventCallbacksMap sync_event_callbacks;
211 213
212 // Pending callbacks for Fetch Events. 214 // Pending callbacks for Fetch Events.
213 FetchEventCallbacksMap fetch_event_callbacks; 215 FetchEventCallbacksMap fetch_event_callbacks;
214 216
217 // Pending callbacks for Extendable Message Events.
218 ExtendableMessageEventCallbacksMap message_event_callbacks;
219
215 // Pending navigation preload requests. 220 // Pending navigation preload requests.
216 NavigationPreloadRequestsMap preload_requests; 221 NavigationPreloadRequestsMap preload_requests;
217 222
218 base::ThreadChecker thread_checker; 223 base::ThreadChecker thread_checker;
219 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 224 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
220 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 225 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
221 }; 226 };
222 227
223 class ServiceWorkerContextClient::NavigationPreloadRequest final 228 class ServiceWorkerContextClient::NavigationPreloadRequest final
224 : public mojom::URLLoaderClient { 229 : public mojom::URLLoaderClient {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 ServiceWorkerContextClient::~ServiceWorkerContextClient() {} 394 ServiceWorkerContextClient::~ServiceWorkerContextClient() {}
390 395
391 void ServiceWorkerContextClient::OnMessageReceived( 396 void ServiceWorkerContextClient::OnMessageReceived(
392 int thread_id, 397 int thread_id,
393 int embedded_worker_id, 398 int embedded_worker_id,
394 const IPC::Message& message) { 399 const IPC::Message& message) {
395 CHECK_EQ(embedded_worker_id_, embedded_worker_id); 400 CHECK_EQ(embedded_worker_id_, embedded_worker_id);
396 bool handled = true; 401 bool handled = true;
397 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) 402 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message)
398 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) 403 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent)
399 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent,
400 OnExtendableMessageEvent)
401 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) 404 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent)
402 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, 405 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent,
403 OnNotificationClickEvent) 406 OnNotificationClickEvent)
404 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationCloseEvent, 407 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationCloseEvent,
405 OnNotificationCloseEvent) 408 OnNotificationCloseEvent)
406 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 409 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
407 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) 410 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient)
408 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) 411 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients)
409 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, 412 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
410 OnOpenWindowResponse) 413 OnOpenWindowResponse)
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 &context_->sync_event_callbacks); 573 &context_->sync_event_callbacks);
571 !it.IsAtEnd(); it.Advance()) { 574 !it.IsAtEnd(); it.Advance()) {
572 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); 575 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
573 } 576 }
574 // Aborts the all pending fetch event callbacks. 577 // Aborts the all pending fetch event callbacks.
575 for (WorkerContextData::FetchEventCallbacksMap::iterator it( 578 for (WorkerContextData::FetchEventCallbacksMap::iterator it(
576 &context_->fetch_event_callbacks); 579 &context_->fetch_event_callbacks);
577 !it.IsAtEnd(); it.Advance()) { 580 !it.IsAtEnd(); it.Advance()) {
578 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); 581 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
579 } 582 }
583 // Aborts the all pending extendable message event callbacks.
584 for (WorkerContextData::ExtendableMessageEventCallbacksMap::iterator it(
585 &context_->message_event_callbacks);
586 !it.IsAtEnd(); it.Advance()) {
587 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
588 }
580 589
581 // We have to clear callbacks now, as they need to be freed on the 590 // We have to clear callbacks now, as they need to be freed on the
582 // same thread. 591 // same thread.
583 context_.reset(); 592 context_.reset();
584 593
585 // This also lets the message filter stop dispatching messages to 594 // This also lets the message filter stop dispatching messages to
586 // this client. 595 // this client.
587 g_worker_client_tls.Pointer()->Set(NULL); 596 g_worker_client_tls.Pointer()->Set(NULL);
588 597
589 GetContentClient()->renderer()->WillDestroyServiceWorkerContextOnWorkerThread( 598 GetContentClient()->renderer()->WillDestroyServiceWorkerContextOnWorkerThread(
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 double event_dispatch_time) { 668 double event_dispatch_time) {
660 Send(new ServiceWorkerHostMsg_ActivateEventFinished( 669 Send(new ServiceWorkerHostMsg_ActivateEventFinished(
661 GetRoutingID(), request_id, result, 670 GetRoutingID(), request_id, result,
662 base::Time::FromDoubleT(event_dispatch_time))); 671 base::Time::FromDoubleT(event_dispatch_time)));
663 } 672 }
664 673
665 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( 674 void ServiceWorkerContextClient::didHandleExtendableMessageEvent(
666 int request_id, 675 int request_id,
667 blink::WebServiceWorkerEventResult result, 676 blink::WebServiceWorkerEventResult result,
668 double event_dispatch_time) { 677 double event_dispatch_time) {
669 Send(new ServiceWorkerHostMsg_ExtendableMessageEventFinished( 678 const DispatchExtendableMessageEventCallback* callback =
670 GetRoutingID(), request_id, result, 679 context_->message_event_callbacks.Lookup(request_id);
671 base::Time::FromDoubleT(event_dispatch_time))); 680 DCHECK(callback);
681 if (result == blink::WebServiceWorkerEventResultCompleted) {
682 callback->Run(SERVICE_WORKER_OK,
683 base::Time::FromDoubleT(event_dispatch_time));
684 } else {
685 callback->Run(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
686 base::Time::FromDoubleT(event_dispatch_time));
687 }
688 context_->message_event_callbacks.Remove(request_id);
672 } 689 }
673 690
674 void ServiceWorkerContextClient::didHandleInstallEvent( 691 void ServiceWorkerContextClient::didHandleInstallEvent(
675 int request_id, 692 int request_id,
676 blink::WebServiceWorkerEventResult result, 693 blink::WebServiceWorkerEventResult result,
677 double event_dispatch_time) { 694 double event_dispatch_time) {
678 Send(new ServiceWorkerHostMsg_InstallEventFinished( 695 Send(new ServiceWorkerHostMsg_InstallEventFinished(
679 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), 696 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(),
680 base::Time::FromDoubleT(event_dispatch_time))); 697 base::Time::FromDoubleT(event_dispatch_time)));
681 } 698 }
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 proxy_->setRegistration( 937 proxy_->setRegistration(
921 WebServiceWorkerRegistrationImpl::CreateHandle(registration)); 938 WebServiceWorkerRegistrationImpl::CreateHandle(registration));
922 } 939 }
923 940
924 void ServiceWorkerContextClient::OnActivateEvent(int request_id) { 941 void ServiceWorkerContextClient::OnActivateEvent(int request_id) {
925 TRACE_EVENT0("ServiceWorker", 942 TRACE_EVENT0("ServiceWorker",
926 "ServiceWorkerContextClient::OnActivateEvent"); 943 "ServiceWorkerContextClient::OnActivateEvent");
927 proxy_->dispatchActivateEvent(request_id); 944 proxy_->dispatchActivateEvent(request_id);
928 } 945 }
929 946
930 void ServiceWorkerContextClient::OnExtendableMessageEvent( 947 void ServiceWorkerContextClient::DispatchExtendableMessageEvent(
931 int request_id, 948 mojom::ExtendableMessageEventPtr event,
932 const ServiceWorkerMsg_ExtendableMessageEvent_Params& params) { 949 const DispatchExtendableMessageEventCallback& callback) {
933 TRACE_EVENT0("ServiceWorker", 950 TRACE_EVENT0("ServiceWorker",
934 "ServiceWorkerContextClient::OnExtendableMessageEvent"); 951 "ServiceWorkerContextClient::DispatchExtendableMessageEvent");
952 int request_id = context_->message_event_callbacks.Add(
953 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback));
954
935 blink::WebMessagePortChannelArray ports = 955 blink::WebMessagePortChannelArray ports =
936 WebMessagePortChannelImpl::CreatePorts(params.message_ports, 956 WebMessagePortChannelImpl::CreatePorts(event->message_ports,
937 params.new_routing_ids, 957 event->new_routing_ids,
938 main_thread_task_runner_); 958 main_thread_task_runner_);
939 if (params.source.client_info.IsValid()) { 959 if (event->source.client_info.IsValid()) {
940 blink::WebServiceWorkerClientInfo web_client = 960 blink::WebServiceWorkerClientInfo web_client =
941 ToWebServiceWorkerClientInfo(params.source.client_info); 961 ToWebServiceWorkerClientInfo(event->source.client_info);
942 proxy_->dispatchExtendableMessageEvent( 962 proxy_->dispatchExtendableMessageEvent(
943 request_id, params.message, params.source_origin, ports, web_client); 963 request_id, event->message, event->source_origin, ports, web_client);
944 return; 964 return;
945 } 965 }
946 966
947 DCHECK(params.source.service_worker_info.IsValid()); 967 DCHECK(event->source.service_worker_info.IsValid());
948 std::unique_ptr<ServiceWorkerHandleReference> handle = 968 std::unique_ptr<ServiceWorkerHandleReference> handle =
949 ServiceWorkerHandleReference::Adopt(params.source.service_worker_info, 969 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info,
950 sender_.get()); 970 sender_.get());
951 ServiceWorkerDispatcher* dispatcher = 971 ServiceWorkerDispatcher* dispatcher =
952 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( 972 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(
953 sender_.get(), main_thread_task_runner_.get()); 973 sender_.get(), main_thread_task_runner_.get());
954 scoped_refptr<WebServiceWorkerImpl> worker = 974 scoped_refptr<WebServiceWorkerImpl> worker =
955 dispatcher->GetOrCreateServiceWorker(std::move(handle)); 975 dispatcher->GetOrCreateServiceWorker(std::move(handle));
956 proxy_->dispatchExtendableMessageEvent( 976 proxy_->dispatchExtendableMessageEvent(
957 request_id, params.message, params.source_origin, ports, 977 request_id, event->message, event->source_origin, ports,
958 WebServiceWorkerImpl::CreateHandle(worker)); 978 WebServiceWorkerImpl::CreateHandle(worker));
959 } 979 }
960 980
961 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 981 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
962 TRACE_EVENT0("ServiceWorker", 982 TRACE_EVENT0("ServiceWorker",
963 "ServiceWorkerContextClient::OnInstallEvent"); 983 "ServiceWorkerContextClient::OnInstallEvent");
964 proxy_->dispatchInstallEvent(request_id); 984 proxy_->dispatchInstallEvent(request_id);
965 } 985 }
966 986
967 void ServiceWorkerContextClient::DispatchFetchEvent( 987 void ServiceWorkerContextClient::DispatchFetchEvent(
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 } 1283 }
1264 1284
1265 base::WeakPtr<ServiceWorkerContextClient> 1285 base::WeakPtr<ServiceWorkerContextClient>
1266 ServiceWorkerContextClient::GetWeakPtr() { 1286 ServiceWorkerContextClient::GetWeakPtr() {
1267 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1287 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1268 DCHECK(context_); 1288 DCHECK(context_);
1269 return context_->weak_factory.GetWeakPtr(); 1289 return context_->weak_factory.GetWeakPtr();
1270 } 1290 }
1271 1291
1272 } // namespace content 1292 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698