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 ee0ffdeaff24ede6607f1599067d14d4ef5343d3..d90e05f0d2a2e9d53463ec2172e2e19fbb32b882 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_; |
jkarlin
2015/06/18 18:13:57
no trailing _ in struct member names.
iclelland
2015/06/19 13:44:32
Done.
|
+ |
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) |
@@ -526,8 +531,16 @@ void ServiceWorkerContextClient::didHandleSyncEvent(int request_id) { |
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( |
@@ -648,6 +661,14 @@ void ServiceWorkerContextClient::stashMessagePort( |
static_cast<base::string16>(name))); |
} |
+void ServiceWorkerContextClient::DispatchSyncEvent( |
+ const SyncCallback& callbacks) { |
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerScriptContext::DispatchSyncEvent"); |
+ int request_id = context_->sync_event_callbacks_.Add(&callbacks); |
+ proxy_->dispatchSyncEvent(request_id); |
+} |
+ |
void ServiceWorkerContextClient::Send(IPC::Message* message) { |
sender_->Send(message); |
} |