| 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 85b79ac8fae5a9277babc0c3386a9399f79e8f2d..346a529317d094d7d22a3b71e65a0944a03de010 100644
|
| --- a/content/renderer/service_worker/service_worker_context_client.cc
|
| +++ b/content/renderer/service_worker/service_worker_context_client.cc
|
| @@ -31,6 +31,7 @@
|
| #include "content/common/service_worker/service_worker_messages.h"
|
| #include "content/public/common/referrer.h"
|
| #include "content/public/renderer/document_state.h"
|
| +#include "content/renderer/background_sync/background_sync_client_impl.h"
|
| #include "content/renderer/devtools/devtools_agent.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/service_worker/embedded_worker_dispatcher.h"
|
| @@ -179,6 +180,9 @@ struct ServiceWorkerContextClient::WorkerContextData {
|
| IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>;
|
| using SkipWaitingCallbacksMap =
|
| IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>;
|
| + using SyncEventCallbacksMap =
|
| + IDMap<const mojo::Callback<void(ServiceWorkerEventStatus)>,
|
| + IDMapOwnPointer>;
|
|
|
| explicit WorkerContextData(ServiceWorkerContextClient* owner)
|
| : weak_factory(owner) {}
|
| @@ -199,6 +203,9 @@ struct ServiceWorkerContextClient::WorkerContextData {
|
| // Pending callbacks for ClaimClients().
|
| ClaimClientsCallbacksMap claim_clients_callbacks;
|
|
|
| + // Pending callbacks for Background Sync Events
|
| + SyncEventCallbacksMap sync_event_callbacks;
|
| +
|
| ServiceRegistryImpl service_registry;
|
|
|
| base::ThreadChecker thread_checker;
|
| @@ -246,7 +253,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)
|
| @@ -349,6 +355,10 @@ void ServiceWorkerContextClient::workerContextStarted(
|
| // willDestroyWorkerContext.
|
| context_.reset(new WorkerContextData(this));
|
|
|
| + // Register Mojo services.
|
| + context_->service_registry.ServiceRegistry::AddService(
|
| + base::Bind(&BackgroundSyncClientImpl::Create));
|
| +
|
| SetRegistrationInServiceWorkerGlobalScope();
|
|
|
| Send(new EmbeddedWorkerHostMsg_WorkerScriptLoaded(
|
| @@ -493,8 +503,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(
|
| @@ -615,6 +633,15 @@ 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(new SyncCallback(callback));
|
| + proxy_->dispatchSyncEvent(request_id);
|
| +}
|
| +
|
| void ServiceWorkerContextClient::Send(IPC::Message* message) {
|
| sender_->Send(message);
|
| }
|
| @@ -698,12 +725,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,
|
|
|