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

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

Issue 2748213003: Service Worker event dispatcher for Background Fetch (Closed)
Patch Set: uma fix Created 3 years, 9 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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 using ClientsCallbacksMap = 179 using ClientsCallbacksMap =
180 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; 180 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>;
181 using ClaimClientsCallbacksMap = 181 using ClaimClientsCallbacksMap =
182 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; 182 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>;
183 using ClientCallbacksMap = 183 using ClientCallbacksMap =
184 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; 184 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>;
185 using SkipWaitingCallbacksMap = 185 using SkipWaitingCallbacksMap =
186 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; 186 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>;
187 using ActivateEventCallbacksMap = 187 using ActivateEventCallbacksMap =
188 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; 188 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>;
189 using BackgroundFetchAbortEventCallbacksMap =
190 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>;
191 using BackgroundFetchClickEventCallbacksMap =
192 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>;
189 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; 193 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>;
190 using PaymentRequestEventCallbacksMap = 194 using PaymentRequestEventCallbacksMap =
191 IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; 195 IDMap<std::unique_ptr<const PaymentRequestEventCallback>>;
192 using NotificationClickEventCallbacksMap = 196 using NotificationClickEventCallbacksMap =
193 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; 197 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>;
194 using NotificationCloseEventCallbacksMap = 198 using NotificationCloseEventCallbacksMap =
195 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; 199 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>;
196 using PushEventCallbacksMap = 200 using PushEventCallbacksMap =
197 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; 201 IDMap<std::unique_ptr<const DispatchPushEventCallback>>;
198 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; 202 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
(...skipping 21 matching lines...) Expand all
220 224
221 // Pending callbacks for SkipWaiting(). 225 // Pending callbacks for SkipWaiting().
222 SkipWaitingCallbacksMap skip_waiting_callbacks; 226 SkipWaitingCallbacksMap skip_waiting_callbacks;
223 227
224 // Pending callbacks for ClaimClients(). 228 // Pending callbacks for ClaimClients().
225 ClaimClientsCallbacksMap claim_clients_callbacks; 229 ClaimClientsCallbacksMap claim_clients_callbacks;
226 230
227 // Pending callbacks for Activate Events. 231 // Pending callbacks for Activate Events.
228 ActivateEventCallbacksMap activate_event_callbacks; 232 ActivateEventCallbacksMap activate_event_callbacks;
229 233
234 // Pending callbacks for Background Fetch Abort Events.
235 BackgroundFetchAbortEventCallbacksMap background_fetch_abort_event_callbacks;
236
237 // Pending callbacks for Background Fetch Click Events.
238 BackgroundFetchClickEventCallbacksMap background_fetch_click_event_callbacks;
239
230 // Pending callbacks for Background Sync Events. 240 // Pending callbacks for Background Sync Events.
231 SyncEventCallbacksMap sync_event_callbacks; 241 SyncEventCallbacksMap sync_event_callbacks;
232 242
233 // Pending callbacks for Payment Request Events. 243 // Pending callbacks for Payment Request Events.
234 PaymentRequestEventCallbacksMap payment_request_event_callbacks; 244 PaymentRequestEventCallbacksMap payment_request_event_callbacks;
235 245
236 // Pending callbacks for Notification Click Events. 246 // Pending callbacks for Notification Click Events.
237 NotificationClickEventCallbacksMap notification_click_event_callbacks; 247 NotificationClickEventCallbacksMap notification_click_event_callbacks;
238 248
239 // Pending callbacks for Notification Close Events. 249 // Pending callbacks for Notification Close Events.
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 570
561 void ServiceWorkerContextClient::willDestroyWorkerContext( 571 void ServiceWorkerContextClient::willDestroyWorkerContext(
562 v8::Local<v8::Context> context) { 572 v8::Local<v8::Context> context) {
563 // At this point WillStopCurrentWorkerThread is already called, so 573 // At this point WillStopCurrentWorkerThread is already called, so
564 // worker_task_runner_->RunsTasksOnCurrentThread() returns false 574 // worker_task_runner_->RunsTasksOnCurrentThread() returns false
565 // (while we're still on the worker thread). 575 // (while we're still on the worker thread).
566 proxy_ = NULL; 576 proxy_ = NULL;
567 577
568 // Aborts all the pending events callbacks. 578 // Aborts all the pending events callbacks.
569 AbortPendingEventCallbacks(context_->activate_event_callbacks); 579 AbortPendingEventCallbacks(context_->activate_event_callbacks);
580 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks);
581 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks);
570 AbortPendingEventCallbacks(context_->sync_event_callbacks); 582 AbortPendingEventCallbacks(context_->sync_event_callbacks);
571 AbortPendingEventCallbacks(context_->notification_click_event_callbacks); 583 AbortPendingEventCallbacks(context_->notification_click_event_callbacks);
572 AbortPendingEventCallbacks(context_->notification_close_event_callbacks); 584 AbortPendingEventCallbacks(context_->notification_close_event_callbacks);
573 AbortPendingEventCallbacks(context_->push_event_callbacks); 585 AbortPendingEventCallbacks(context_->push_event_callbacks);
574 AbortPendingEventCallbacks(context_->fetch_event_callbacks); 586 AbortPendingEventCallbacks(context_->fetch_event_callbacks);
575 AbortPendingEventCallbacks(context_->message_event_callbacks); 587 AbortPendingEventCallbacks(context_->message_event_callbacks);
576 588
577 // We have to clear callbacks now, as they need to be freed on the 589 // We have to clear callbacks now, as they need to be freed on the
578 // same thread. 590 // same thread.
579 context_.reset(); 591 context_.reset();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 blink::WebServiceWorkerEventResult result, 673 blink::WebServiceWorkerEventResult result,
662 double event_dispatch_time) { 674 double event_dispatch_time) {
663 const DispatchActivateEventCallback* callback = 675 const DispatchActivateEventCallback* callback =
664 context_->activate_event_callbacks.Lookup(request_id); 676 context_->activate_event_callbacks.Lookup(request_id);
665 DCHECK(callback); 677 DCHECK(callback);
666 callback->Run(EventResultToStatus(result), 678 callback->Run(EventResultToStatus(result),
667 base::Time::FromDoubleT(event_dispatch_time)); 679 base::Time::FromDoubleT(event_dispatch_time));
668 context_->activate_event_callbacks.Remove(request_id); 680 context_->activate_event_callbacks.Remove(request_id);
669 } 681 }
670 682
683 void ServiceWorkerContextClient::didHandleBackgroundFetchAbortEvent(
684 int request_id,
685 blink::WebServiceWorkerEventResult result,
686 double event_dispatch_time) {
687 const DispatchBackgroundFetchAbortEventCallback* callback =
688 context_->background_fetch_abort_event_callbacks.Lookup(request_id);
689 DCHECK(callback);
690 callback->Run(EventResultToStatus(result),
691 base::Time::FromDoubleT(event_dispatch_time));
692 context_->background_fetch_abort_event_callbacks.Remove(request_id);
693 }
694
695 void ServiceWorkerContextClient::didHandleBackgroundFetchClickEvent(
696 int request_id,
697 blink::WebServiceWorkerEventResult result,
698 double event_dispatch_time) {
699 const DispatchBackgroundFetchClickEventCallback* callback =
700 context_->background_fetch_click_event_callbacks.Lookup(request_id);
701 DCHECK(callback);
702 callback->Run(EventResultToStatus(result),
703 base::Time::FromDoubleT(event_dispatch_time));
704 context_->background_fetch_click_event_callbacks.Remove(request_id);
705 }
706
671 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( 707 void ServiceWorkerContextClient::didHandleExtendableMessageEvent(
672 int request_id, 708 int request_id,
673 blink::WebServiceWorkerEventResult result, 709 blink::WebServiceWorkerEventResult result,
674 double event_dispatch_time) { 710 double event_dispatch_time) {
675 const DispatchExtendableMessageEventCallback* callback = 711 const DispatchExtendableMessageEventCallback* callback =
676 context_->message_event_callbacks.Lookup(request_id); 712 context_->message_event_callbacks.Lookup(request_id);
677 DCHECK(callback); 713 DCHECK(callback);
678 callback->Run(EventResultToStatus(result), 714 callback->Run(EventResultToStatus(result),
679 base::Time::FromDoubleT(event_dispatch_time)); 715 base::Time::FromDoubleT(event_dispatch_time));
680 context_->message_event_callbacks.Remove(request_id); 716 context_->message_event_callbacks.Remove(request_id);
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 962
927 void ServiceWorkerContextClient::DispatchActivateEvent( 963 void ServiceWorkerContextClient::DispatchActivateEvent(
928 const DispatchActivateEventCallback& callback) { 964 const DispatchActivateEventCallback& callback) {
929 TRACE_EVENT0("ServiceWorker", 965 TRACE_EVENT0("ServiceWorker",
930 "ServiceWorkerContextClient::DispatchActivateEvent"); 966 "ServiceWorkerContextClient::DispatchActivateEvent");
931 int request_id = context_->activate_event_callbacks.Add( 967 int request_id = context_->activate_event_callbacks.Add(
932 base::MakeUnique<DispatchActivateEventCallback>(callback)); 968 base::MakeUnique<DispatchActivateEventCallback>(callback));
933 proxy_->dispatchActivateEvent(request_id); 969 proxy_->dispatchActivateEvent(request_id);
934 } 970 }
935 971
972 void ServiceWorkerContextClient::DispatchBackgroundFetchAbortEvent(
973 const std::string& tag,
974 const DispatchBackgroundFetchAbortEventCallback& callback) {
975 TRACE_EVENT0("ServiceWorker",
976 "ServiceWorkerContextClient::DispatchBackgroundFetchAbortEvent");
977 int request_id = context_->background_fetch_abort_event_callbacks.Add(
978 base::MakeUnique<DispatchBackgroundFetchAbortEventCallback>(callback));
979
980 proxy_->dispatchBackgroundFetchAbortEvent(request_id,
981 blink::WebString::fromUTF8(tag));
982 }
983
984 void ServiceWorkerContextClient::DispatchBackgroundFetchClickEvent(
985 const std::string& tag,
986 mojom::BackgroundFetchState state,
987 const DispatchBackgroundFetchClickEventCallback& callback) {
988 TRACE_EVENT0("ServiceWorker",
989 "ServiceWorkerContextClient::DispatchBackgroundFetchClickEvent");
990 int request_id = context_->background_fetch_click_event_callbacks.Add(
991 base::MakeUnique<DispatchBackgroundFetchClickEventCallback>(callback));
992
993 // TODO(peter): Use typemap when this is moved to blink-side.
994 blink::WebServiceWorkerContextProxy::BackgroundFetchState web_state =
995 mojo::ConvertTo<
996 blink::WebServiceWorkerContextProxy::BackgroundFetchState>(state);
997
998 proxy_->dispatchBackgroundFetchClickEvent(
999 request_id, blink::WebString::fromUTF8(tag), web_state);
1000 }
1001
936 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( 1002 void ServiceWorkerContextClient::DispatchExtendableMessageEvent(
937 mojom::ExtendableMessageEventPtr event, 1003 mojom::ExtendableMessageEventPtr event,
938 const DispatchExtendableMessageEventCallback& callback) { 1004 const DispatchExtendableMessageEventCallback& callback) {
939 TRACE_EVENT0("ServiceWorker", 1005 TRACE_EVENT0("ServiceWorker",
940 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); 1006 "ServiceWorkerContextClient::DispatchExtendableMessageEvent");
941 int request_id = context_->message_event_callbacks.Add( 1007 int request_id = context_->message_event_callbacks.Add(
942 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); 1008 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback));
943 1009
944 blink::WebMessagePortChannelArray ports = 1010 blink::WebMessagePortChannelArray ports =
945 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( 1011 WebMessagePortChannelImpl::CreateFromMessagePipeHandles(
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 } 1354 }
1289 1355
1290 base::WeakPtr<ServiceWorkerContextClient> 1356 base::WeakPtr<ServiceWorkerContextClient>
1291 ServiceWorkerContextClient::GetWeakPtr() { 1357 ServiceWorkerContextClient::GetWeakPtr() {
1292 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1358 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1293 DCHECK(context_); 1359 DCHECK(context_);
1294 return context_->weak_factory.GetWeakPtr(); 1360 return context_->weak_factory.GetWeakPtr();
1295 } 1361 }
1296 1362
1297 } // namespace content 1363 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698