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

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

Issue 2534403002: [ServiceWorker] Mojofy extendable message event. (Closed)
Patch Set: Fix win build 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
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 if (!callback)
shimazu 2016/12/02 04:00:33 DCHECK(callback) is better here because IIUC callb
leonhsl(Using Gerrit) 2016/12/02 08:36:44 This is following didHandleSyncEvent(), |callback|
shimazu 2016/12/05 03:40:21 Oops, I didn't realize that. Hmm.. I don't want t
horo 2016/12/05 04:13:16 I prefer DCHECK(callback) too.
leonhsl(Using Gerrit) 2016/12/06 08:54:39 Done.
681 return;
682 if (result == blink::WebServiceWorkerEventResultCompleted) {
683 callback->Run(SERVICE_WORKER_OK,
684 base::Time::FromDoubleT(event_dispatch_time));
685 } else {
686 callback->Run(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
687 base::Time::FromDoubleT(event_dispatch_time));
688 }
689 context_->message_event_callbacks.Remove(request_id);
672 } 690 }
673 691
674 void ServiceWorkerContextClient::didHandleInstallEvent( 692 void ServiceWorkerContextClient::didHandleInstallEvent(
675 int request_id, 693 int request_id,
676 blink::WebServiceWorkerEventResult result, 694 blink::WebServiceWorkerEventResult result,
677 double event_dispatch_time) { 695 double event_dispatch_time) {
678 Send(new ServiceWorkerHostMsg_InstallEventFinished( 696 Send(new ServiceWorkerHostMsg_InstallEventFinished(
679 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), 697 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(),
680 base::Time::FromDoubleT(event_dispatch_time))); 698 base::Time::FromDoubleT(event_dispatch_time)));
681 } 699 }
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 proxy_->setRegistration( 950 proxy_->setRegistration(
933 WebServiceWorkerRegistrationImpl::CreateHandle(registration)); 951 WebServiceWorkerRegistrationImpl::CreateHandle(registration));
934 } 952 }
935 953
936 void ServiceWorkerContextClient::OnActivateEvent(int request_id) { 954 void ServiceWorkerContextClient::OnActivateEvent(int request_id) {
937 TRACE_EVENT0("ServiceWorker", 955 TRACE_EVENT0("ServiceWorker",
938 "ServiceWorkerContextClient::OnActivateEvent"); 956 "ServiceWorkerContextClient::OnActivateEvent");
939 proxy_->dispatchActivateEvent(request_id); 957 proxy_->dispatchActivateEvent(request_id);
940 } 958 }
941 959
942 void ServiceWorkerContextClient::OnExtendableMessageEvent( 960 void ServiceWorkerContextClient::DispatchExtendableMessageEvent(
943 int request_id, 961 mojom::ExtendableMessageEventPtr event,
944 const ServiceWorkerMsg_ExtendableMessageEvent_Params& params) { 962 const DispatchExtendableMessageEventCallback& callback) {
945 TRACE_EVENT0("ServiceWorker", 963 TRACE_EVENT0("ServiceWorker",
946 "ServiceWorkerContextClient::OnExtendableMessageEvent"); 964 "ServiceWorkerContextClient::DispatchExtendableMessageEvent");
965 int request_id = context_->message_event_callbacks.Add(
966 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback));
967
947 blink::WebMessagePortChannelArray ports = 968 blink::WebMessagePortChannelArray ports =
948 WebMessagePortChannelImpl::CreatePorts(params.message_ports, 969 WebMessagePortChannelImpl::CreatePorts(event->message_ports,
949 params.new_routing_ids, 970 event->new_routing_ids,
950 main_thread_task_runner_); 971 main_thread_task_runner_);
951 if (params.source.client_info.IsValid()) { 972 if (event->source.client_info.IsValid()) {
952 blink::WebServiceWorkerClientInfo web_client = 973 blink::WebServiceWorkerClientInfo web_client =
953 ToWebServiceWorkerClientInfo(params.source.client_info); 974 ToWebServiceWorkerClientInfo(event->source.client_info);
954 proxy_->dispatchExtendableMessageEvent( 975 proxy_->dispatchExtendableMessageEvent(
955 request_id, params.message, params.source_origin, ports, web_client); 976 request_id, event->message, event->source_origin, ports, web_client);
956 return; 977 return;
957 } 978 }
958 979
959 DCHECK(params.source.service_worker_info.IsValid()); 980 DCHECK(event->source.service_worker_info.IsValid());
960 std::unique_ptr<ServiceWorkerHandleReference> handle = 981 std::unique_ptr<ServiceWorkerHandleReference> handle =
961 ServiceWorkerHandleReference::Adopt(params.source.service_worker_info, 982 ServiceWorkerHandleReference::Adopt(event->source.service_worker_info,
962 sender_.get()); 983 sender_.get());
963 ServiceWorkerDispatcher* dispatcher = 984 ServiceWorkerDispatcher* dispatcher =
964 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( 985 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(
965 sender_.get(), main_thread_task_runner_.get()); 986 sender_.get(), main_thread_task_runner_.get());
966 scoped_refptr<WebServiceWorkerImpl> worker = 987 scoped_refptr<WebServiceWorkerImpl> worker =
967 dispatcher->GetOrCreateServiceWorker(std::move(handle)); 988 dispatcher->GetOrCreateServiceWorker(std::move(handle));
968 proxy_->dispatchExtendableMessageEvent( 989 proxy_->dispatchExtendableMessageEvent(
969 request_id, params.message, params.source_origin, ports, 990 request_id, event->message, event->source_origin, ports,
970 WebServiceWorkerImpl::CreateHandle(worker)); 991 WebServiceWorkerImpl::CreateHandle(worker));
971 } 992 }
972 993
973 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 994 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
974 TRACE_EVENT0("ServiceWorker", 995 TRACE_EVENT0("ServiceWorker",
975 "ServiceWorkerContextClient::OnInstallEvent"); 996 "ServiceWorkerContextClient::OnInstallEvent");
976 proxy_->dispatchInstallEvent(request_id); 997 proxy_->dispatchInstallEvent(request_id);
977 } 998 }
978 999
979 void ServiceWorkerContextClient::DispatchFetchEvent( 1000 void ServiceWorkerContextClient::DispatchFetchEvent(
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 } 1296 }
1276 1297
1277 base::WeakPtr<ServiceWorkerContextClient> 1298 base::WeakPtr<ServiceWorkerContextClient>
1278 ServiceWorkerContextClient::GetWeakPtr() { 1299 ServiceWorkerContextClient::GetWeakPtr() {
1279 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1300 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1280 DCHECK(context_); 1301 DCHECK(context_);
1281 return context_->weak_factory.GetWeakPtr(); 1302 return context_->weak_factory.GetWeakPtr();
1282 } 1303 }
1283 1304
1284 } // namespace content 1305 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698