Chromium Code Reviews| 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 babd858683d03a2c59cc7499b4e784554a2dbe72..01a9109884c31a76616c89201ae022ef6ecdee42 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 InstallEventCallbacksMap = |
| + IDMap<std::unique_ptr<const DispatchInstallEventCallback>>; |
| using ActivateEventCallbacksMap = |
| IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
| using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
| @@ -233,6 +235,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| // Pending callbacks for ClaimClients(). |
| ClaimClientsCallbacksMap claim_clients_callbacks; |
| + // Pending callbacks for Install Events. |
| + InstallEventCallbacksMap install_event_callbacks; |
| + |
| // Pending callbacks for Activate Events. |
| ActivateEventCallbacksMap activate_event_callbacks; |
| @@ -412,7 +417,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_InstallEvent, OnInstallEvent) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, |
| @@ -574,7 +578,14 @@ void ServiceWorkerContextClient::willDestroyWorkerContext( |
| // (while we're still on the worker thread). |
| proxy_ = NULL; |
| - // Aborts all the pending events callbacks. |
| + // Aborts the all pending install event callbacks. |
|
falken
2017/03/14 08:49:26
Can you document why install event is different th
xiaofengzhang
2017/04/01 02:27:21
Done.
|
| + for (WorkerContextData::InstallEventCallbacksMap::iterator it( |
| + &context_->install_event_callbacks); |
| + !it.IsAtEnd(); it.Advance()) { |
|
falken
2017/03/14 08:49:26
I think you can use auto here
xiaofengzhang
2017/04/01 02:27:21
It seems can't. Because InstallEventCallbacksMap i
|
| + it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, false, |
|
falken
2017/03/14 08:49:26
false /* has_fetch_hander */
xiaofengzhang
2017/04/01 02:27:21
Done.
xiaofengzhang
2017/04/01 02:27:21
Done.
|
| + base::Time::Now()); |
| + } |
| + // Aborts all other pending events callbacks. |
| AbortPendingEventCallbacks(context_->activate_event_callbacks); |
| AbortPendingEventCallbacks(context_->sync_event_callbacks); |
| AbortPendingEventCallbacks(context_->notification_click_event_callbacks); |
| @@ -693,9 +704,12 @@ void ServiceWorkerContextClient::didHandleInstallEvent( |
| int request_id, |
| blink::WebServiceWorkerEventResult result, |
| double event_dispatch_time) { |
| - Send(new ServiceWorkerHostMsg_InstallEventFinished( |
| - GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), |
| - base::Time::FromDoubleT(event_dispatch_time))); |
| + const DispatchInstallEventCallback* callback = |
| + context_->install_event_callbacks.Lookup(request_id); |
| + DCHECK(callback); |
| + callback->Run(EventResultToStatus(result), proxy_->hasFetchEventHandler(), |
| + base::Time::FromDoubleT(event_dispatch_time)); |
| + context_->install_event_callbacks.Remove(request_id); |
| } |
| void ServiceWorkerContextClient::respondToFetchEvent( |
| @@ -950,6 +964,15 @@ void ServiceWorkerContextClient::DispatchActivateEvent( |
| proxy_->dispatchActivateEvent(request_id); |
| } |
| +void ServiceWorkerContextClient::DispatchInstallEvent( |
| + const DispatchInstallEventCallback& callback) { |
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerContextClient::DispatchInstallEvent"); |
| + int request_id = context_->install_event_callbacks.Add( |
| + base::MakeUnique<DispatchInstallEventCallback>(callback)); |
| + proxy_->dispatchInstallEvent(request_id); |
| +} |
| + |
| void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
| mojom::ExtendableMessageEventPtr event, |
| const DispatchExtendableMessageEventCallback& callback) { |
| @@ -985,12 +1008,6 @@ void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
| WebServiceWorkerImpl::CreateHandle(worker)); |
| } |
| -void ServiceWorkerContextClient::OnInstallEvent(int request_id) { |
| - TRACE_EVENT0("ServiceWorker", |
| - "ServiceWorkerContextClient::OnInstallEvent"); |
| - proxy_->dispatchInstallEvent(request_id); |
| -} |
| - |
| void ServiceWorkerContextClient::DispatchFetchEvent( |
| int fetch_event_id, |
| const ServiceWorkerFetchRequest& request, |