| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |