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 93edf9847eca5c96a45939f8004dace04551a531..7c7747f71a1509bc2bc98ab2ba49b03deb98c1c4 100644 |
| --- a/content/renderer/service_worker/service_worker_context_client.cc |
| +++ b/content/renderer/service_worker/service_worker_context_client.cc |
| @@ -178,6 +178,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>; |
| using SkipWaitingCallbacksMap = |
| IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; |
| + using SyncEventCallbacksMap = |
| + IDMap<const mojo::Callback<void(ServiceWorkerEventStatus)>, |
| + IDMapExternalPointer>; |
| explicit WorkerContextData(ServiceWorkerContextClient* owner) |
| : weak_factory(owner) {} |
| @@ -198,6 +201,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| // Pending callbacks for ClaimClients(). |
| ClaimClientsCallbacksMap claim_clients_callbacks; |
| + // Pending callbacks for Background Sync Events |
| + SyncEventCallbacksMap sync_event_callbacks; |
| + |
| base::ThreadChecker thread_checker; |
| base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
| }; |
| @@ -243,7 +249,6 @@ void ServiceWorkerContextClient::OnMessageReceived( |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, |
| OnNotificationClickEvent) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) |
| @@ -521,8 +526,16 @@ void ServiceWorkerContextClient::didHandlePushEvent( |
| void ServiceWorkerContextClient::didHandleSyncEvent( |
| int request_id, |
| blink::WebServiceWorkerEventResult result) { |
| - Send(new ServiceWorkerHostMsg_SyncEventFinished(GetRoutingID(), request_id, |
| - result)); |
| + const SyncCallback* callback = |
| + context_->sync_event_callbacks.Lookup(request_id); |
| + if (!callback) |
| + return; |
| + if (result == blink::WebServiceWorkerEventResultCompleted) { |
| + callback->Run(SERVICE_WORKER_EVENT_STATUS_COMPLETED); |
| + } else { |
| + callback->Run(SERVICE_WORKER_EVENT_STATUS_REJECTED); |
| + } |
| + context_->sync_event_callbacks.Remove(request_id); |
| } |
| void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent( |
| @@ -643,6 +656,14 @@ void ServiceWorkerContextClient::stashMessagePort( |
| static_cast<base::string16>(name))); |
| } |
| +void ServiceWorkerContextClient::DispatchSyncEvent( |
| + const SyncCallback& callback) { |
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerScriptContext::DispatchSyncEvent"); |
| + int request_id = context_->sync_event_callbacks.Add(&callback); |
|
jkarlin
2015/06/23 17:48:12
This is why mojo is complaining about the callback
iclelland
2015/06/23 20:30:04
Thanks for spotting that! I was staring at everyth
|
| + proxy_->dispatchSyncEvent(request_id); |
| +} |
| + |
| void ServiceWorkerContextClient::Send(IPC::Message* message) { |
| sender_->Send(message); |
| } |
| @@ -729,12 +750,6 @@ void ServiceWorkerContextClient::OnFetchEvent( |
| proxy_->dispatchFetchEvent(request_id, webRequest); |
| } |
| -void ServiceWorkerContextClient::OnSyncEvent(int request_id) { |
| - TRACE_EVENT0("ServiceWorker", |
| - "ServiceWorkerContextClient::OnSyncEvent"); |
| - proxy_->dispatchSyncEvent(request_id); |
| -} |
| - |
| void ServiceWorkerContextClient::OnNotificationClickEvent( |
| int request_id, |
| int64_t persistent_notification_id, |