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 b07de5d43b1aee04581ad908938827603fc102c3..5fde693059c227190e4917683ffd1dd91114f547 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -203,6 +203,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 PushEventCallbacksMap = |
IDMap<std::unique_ptr<const DispatchPushEventCallback>>; |
@@ -235,6 +237,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; |
@@ -402,7 +407,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_NotificationClickEvent, |
OnNotificationClickEvent) |
@@ -570,6 +574,7 @@ void ServiceWorkerContextClient::willDestroyWorkerContext( |
proxy_ = NULL; |
// Aborts all the pending events callbacks. |
+ AbortPendingEventCallbacks(context_->activate_event_callbacks); |
AbortPendingEventCallbacks(context_->sync_event_callbacks); |
AbortPendingEventCallbacks(context_->push_event_callbacks); |
AbortPendingEventCallbacks(context_->fetch_event_callbacks); |
@@ -653,9 +658,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( |
@@ -736,9 +744,7 @@ void ServiceWorkerContextClient::didHandlePushEvent( |
const DispatchPushEventCallback* callback = |
context_->push_event_callbacks.Lookup(request_id); |
DCHECK(callback); |
- callback->Run(result == blink::WebServiceWorkerEventResultCompleted |
- ? SERVICE_WORKER_OK |
- : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, |
+ callback->Run(EventResultToStatus(result), |
base::Time::FromDoubleT(event_dispatch_time)); |
context_->push_event_callbacks.Remove(request_id); |
} |
@@ -905,9 +911,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); |
} |