blob: b25dae9460c5ab179ab996870cb8db7ce70e986c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "modules/background_sync/SyncCallbacks.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "modules/background_sync/SyncError.h"
#include "modules/serviceworkers/ServiceWorkerRegistration.h"
#include "wtf/PtrUtil.h"
#include <memory>
namespace blink {
SyncRegistrationCallbacks::SyncRegistrationCallbacks(ScriptPromiseResolver* resolver, ServiceWorkerRegistration* serviceWorkerRegistration)
: m_resolver(resolver)
, m_serviceWorkerRegistration(serviceWorkerRegistration)
{
ASSERT(m_resolver);
ASSERT(m_serviceWorkerRegistration);
}
SyncRegistrationCallbacks::~SyncRegistrationCallbacks()
{
}
void SyncRegistrationCallbacks::onSuccess(std::unique_ptr<WebSyncRegistration> webSyncRegistration)
{
if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) {
return;
}
std::unique_ptr<WebSyncRegistration> registration = wrapUnique(webSyncRegistration.release());
if (!registration) {
m_resolver->resolve(v8::Null(m_resolver->getScriptState()->isolate()));
return;
}
m_resolver->resolve();
}
void SyncRegistrationCallbacks::onError(const WebSyncError& error)
{
if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) {
return;
}
m_resolver->reject(SyncError::take(m_resolver.get(), error));
}
SyncGetRegistrationsCallbacks::SyncGetRegistrationsCallbacks(ScriptPromiseResolver* resolver, ServiceWorkerRegistration* serviceWorkerRegistration)
: m_resolver(resolver)
, m_serviceWorkerRegistration(serviceWorkerRegistration)
{
ASSERT(m_resolver);
ASSERT(m_serviceWorkerRegistration);
}
SyncGetRegistrationsCallbacks::~SyncGetRegistrationsCallbacks()
{
}
void SyncGetRegistrationsCallbacks::onSuccess(const WebVector<WebSyncRegistration*>& webSyncRegistrations)
{
if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) {
return;
}
Vector<String> tags;
for (const WebSyncRegistration* r : webSyncRegistrations) {
tags.append(r->tag);
}
m_resolver->resolve(tags);
}
void SyncGetRegistrationsCallbacks::onError(const WebSyncError& error)
{
if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) {
return;
}
m_resolver->reject(SyncError::take(m_resolver.get(), error));
}
} // namespace blink