Index: content/renderer/service_worker/service_worker_context_client.cc |
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc |
index 60f3f77115310cedea33e00abbdb4b1abaf11f08..f62c589934a1478446ced8a85efacde92b62ef50 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -193,6 +193,8 @@ struct ServiceWorkerContextClient::WorkerContextData { |
IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; |
using SkipWaitingCallbacksMap = |
IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
+ using ActivateEventCallbacksMap = |
+ IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
using PaymentRequestEventCallbacksMap = |
IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; |
@@ -231,6 +233,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
// Pending callbacks for ClaimClients(). |
ClaimClientsCallbacksMap claim_clients_callbacks; |
+ // Pending callbacks for Activate Events. |
+ ActivateEventCallbacksMap activate_event_callbacks; |
+ |
// Pending callbacks for Background Sync Events. |
SyncEventCallbacksMap sync_event_callbacks; |
@@ -407,7 +412,6 @@ void ServiceWorkerContextClient::OnMessageReceived( |
CHECK_EQ(embedded_worker_id_, embedded_worker_id); |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) |
- IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) |
@@ -571,6 +575,7 @@ void ServiceWorkerContextClient::willDestroyWorkerContext( |
proxy_ = NULL; |
// Aborts all the pending events callbacks. |
+ AbortPendingEventCallbacks(context_->activate_event_callbacks); |
AbortPendingEventCallbacks(context_->sync_event_callbacks); |
AbortPendingEventCallbacks(context_->notification_click_event_callbacks); |
AbortPendingEventCallbacks(context_->notification_close_event_callbacks); |
@@ -664,9 +669,12 @@ void ServiceWorkerContextClient::didHandleActivateEvent( |
int request_id, |
blink::WebServiceWorkerEventResult result, |
double event_dispatch_time) { |
- Send(new ServiceWorkerHostMsg_ActivateEventFinished( |
- GetRoutingID(), request_id, result, |
- base::Time::FromDoubleT(event_dispatch_time))); |
+ const DispatchActivateEventCallback* callback = |
+ context_->activate_event_callbacks.Lookup(request_id); |
+ DCHECK(callback); |
+ callback->Run(EventResultToStatus(result), |
+ base::Time::FromDoubleT(event_dispatch_time)); |
+ context_->activate_event_callbacks.Remove(request_id); |
} |
void ServiceWorkerContextClient::didHandleExtendableMessageEvent( |
@@ -933,9 +941,12 @@ void ServiceWorkerContextClient::SetRegistrationInServiceWorkerGlobalScope( |
WebServiceWorkerRegistrationImpl::CreateHandle(registration)); |
} |
-void ServiceWorkerContextClient::OnActivateEvent(int request_id) { |
+void ServiceWorkerContextClient::DispatchActivateEvent( |
+ const DispatchActivateEventCallback& callback) { |
TRACE_EVENT0("ServiceWorker", |
- "ServiceWorkerContextClient::OnActivateEvent"); |
+ "ServiceWorkerContextClient::DispatchActivateEvent"); |
+ int request_id = context_->activate_event_callbacks.Add( |
+ base::MakeUnique<DispatchActivateEventCallback>(callback)); |
proxy_->dispatchActivateEvent(request_id); |
} |