ScriptPromise SyncManager::registerFunction(ScriptState* scriptState, ExecutionContext* context, const String& tag) { // TODO(jkarlin): Wait for the registration to become active instead of rejecting. See crbug.com/542437. if (!m_registration->active()) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "Registration failed - no active Service Worker")); if (scriptState->executionContext()->isDocument()) { Document* document = toDocument(scriptState->executionContext()); if (!document->domWindow() || !document->frame()) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "Document is detached from window.")); if (!document->frame()->isMainFrame()) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "Registration failed - not called from a main frame.")); } ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); WebSyncRegistration* webSyncRegistration = new WebSyncRegistration( WebSyncRegistration::UNREGISTERED_SYNC_ID /* id */, WebSyncRegistration::PeriodicityOneShot, tag, 0 /* minPeriod */, WebSyncRegistration::NetworkStateOnline /* networkState */, WebSyncRegistration::PowerStateAuto /* powerState */ ); backgroundSyncProvider()->registerBackgroundSync(webSyncRegistration, m_registration->webRegistration(), context->isServiceWorkerGlobalScope(), new SyncRegistrationCallbacks(resolver, m_registration)); return promise; }
ScriptPromise SyncManager::getTags(ScriptState* scriptState) { ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); backgroundSyncProvider()->getRegistrations(WebSyncRegistration::PeriodicityOneShot, m_registration->webRegistration(), new SyncGetRegistrationsCallbacks(resolver, m_registration)); return promise; }
ScriptPromise SyncManager::permissionState(ScriptState* scriptState) { if (!m_registration->active()) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "Operation failed - no active Service Worker")); ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); backgroundSyncProvider()->getPermissionStatus(WebSyncRegistration::PeriodicityOneShot, m_registration->webRegistration(), new SyncGetPermissionStatusCallbacks(resolver, m_registration)); return promise; }
ScriptPromise SyncManager::registerFunction(ScriptState* scriptState, const SyncRegistrationOptions& options) { if (!m_registration->active()) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "Registration failed - no active Service Worker")); ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); WebSyncRegistration* webSyncRegistration = new WebSyncRegistration( WebSyncRegistration::UNREGISTERED_SYNC_ID /* id */, WebSyncRegistration::PeriodicityOneShot, options.tag(), 0 /* minPeriod */, WebSyncRegistration::NetworkStateOnline /* networkState */, WebSyncRegistration::PowerStateAuto /* powerState */ ); backgroundSyncProvider()->registerBackgroundSync(webSyncRegistration, m_registration->webRegistration(), new SyncRegistrationCallbacks(resolver, m_registration)); return promise; }