Index: content/renderer/service_worker/service_worker_script_context.cc |
diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc |
index d314ce78890d7a01486e9464516d1a30445ec03a..a898e3ae0dd21b8fef0b928d8ff5d550cc8779c5 100644 |
--- a/content/renderer/service_worker/service_worker_script_context.cc |
+++ b/content/renderer/service_worker/service_worker_script_context.cc |
@@ -14,7 +14,10 @@ |
#include "content/child/webmessageportchannel_impl.h" |
#include "content/common/message_port_messages.h" |
#include "content/common/service_worker/service_worker_messages.h" |
+#include "content/public/child/child_thread.h" |
#include "content/public/common/referrer.h" |
+#include "content/renderer/render_thread_impl.h" |
+#include "content/renderer/renderer_blink_platform_impl.h" |
#include "content/renderer/service_worker/embedded_worker_context_client.h" |
#include "ipc/ipc_message.h" |
#include "third_party/WebKit/public/platform/WebCrossOriginServiceWorkerClient.h" |
@@ -120,7 +123,6 @@ void ServiceWorkerScriptContext::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) |
@@ -221,8 +223,15 @@ void ServiceWorkerScriptContext::DidHandlePushEvent( |
void ServiceWorkerScriptContext::DidHandleSyncEvent( |
int request_id, |
blink::WebServiceWorkerEventResult result) { |
- Send(new ServiceWorkerHostMsg_SyncEventFinished(GetRoutingID(), request_id, |
- result)); |
+ const SyncCallback* callback = sync_event_callbacks_.Lookup(request_id); |
+ if (!callback) |
+ return; |
+ if (result == blink::WebServiceWorkerEventResultCompleted) { |
+ callback->Run(BACKGROUND_SYNC_EVENT_STATUS_COMPLETED); |
+ } else { |
+ callback->Run(BACKGROUND_SYNC_EVENT_STATUS_REJECTED); |
+ } |
+ sync_event_callbacks_.Remove(request_id); |
} |
void ServiceWorkerScriptContext::DidHandleCrossOriginConnectEvent( |
@@ -340,6 +349,14 @@ int ServiceWorkerScriptContext::GetRoutingID() const { |
return embedded_context_->embedded_worker_id(); |
} |
+void ServiceWorkerScriptContext::DispatchSyncEvent( |
+ const SyncCallback& callbacks) { |
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerScriptContext::DispatchSyncEvent"); |
+ int request_id = sync_event_callbacks_.Add(&callbacks); |
+ proxy_->dispatchSyncEvent(request_id); |
+} |
+ |
void ServiceWorkerScriptContext::OnActivateEvent(int request_id) { |
TRACE_EVENT0("ServiceWorker", |
"ServiceWorkerScriptContext::OnActivateEvent"); |
@@ -386,12 +403,6 @@ void ServiceWorkerScriptContext::OnFetchEvent( |
proxy_->dispatchFetchEvent(request_id, webRequest); |
} |
-void ServiceWorkerScriptContext::OnSyncEvent(int request_id) { |
- TRACE_EVENT0("ServiceWorker", |
- "ServiceWorkerScriptContext::OnSyncEvent"); |
- proxy_->dispatchSyncEvent(request_id); |
-} |
- |
void ServiceWorkerScriptContext::OnNotificationClickEvent( |
int request_id, |
int64_t persistent_notification_id, |