/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "domstubs.idl" interface nsIDocument; interface nsIInterceptedChannel; interface nsIPrincipal; interface nsIURI; [builtinclass, uuid(d4367ffe-e435-4195-95f8-0a51b1bbfdfb)] interface nsIServiceWorkerUnregisterCallback : nsISupports { // aState is true if the unregistration succeded. // It's false if this ServiceWorkerRegistration doesn't exist. [noscript] void UnregisterSucceeded(in bool aState); [noscript] void UnregisterFailed(); }; [builtinclass, uuid(e4c8baa5-237a-4bf6-82d4-ea06eb4b76ba)] interface nsIServiceWorkerManager : nsISupports { /** * Registers a ServiceWorker with script loaded from `aScriptURI` to act as * the ServiceWorker for aScope. Requires a valid entry settings object on * the stack. This means you must call this from content code 'within' * a window. * * Returns a Promise. */ nsISupports register(in nsIDOMWindow aWindow, in nsIURI aScope, in nsIURI aScriptURI); /** * Unregister an existing ServiceWorker registration for `aScope`. * It keeps aCallback alive until the operation is concluded. */ void unregister(in nsIPrincipal aPrincipal, in nsIServiceWorkerUnregisterCallback aCallback, in DOMString aScope); // Returns a Promise nsISupports getRegistrations(in nsIDOMWindow aWindow); // Returns a Promise nsISupports getRegistration(in nsIDOMWindow aWindow, in DOMString aScope); // Returns a Promise nsISupports getReadyPromise(in nsIDOMWindow aWindow); // Remove ready pending Promise void removeReadyPromise(in nsIDOMWindow aWindow); // Returns true if a ServiceWorker is available for the scope of aURI. bool isAvailableForURI(in nsIURI aURI); // Returns true if a given document is currently controlled by a ServiceWorker bool isControlled(in nsIDocument aDocument); // Cause a fetch event to be dispatched to the worker global associated with the given document. void dispatchFetchEvent(in nsIDocument aDoc, in nsIInterceptedChannel aChannel, in boolean aIsReload); // aTarget MUST be a ServiceWorkerRegistration. [noscript] void AddRegistrationEventListener(in DOMString aScope, in nsIDOMEventTarget aTarget); [noscript] void RemoveRegistrationEventListener(in DOMString aScope, in nsIDOMEventTarget aTarget); /** * Call this to request that document `aDoc` be controlled by a ServiceWorker * if a registration exists for it's scope. * * This MUST only be called once per document! */ [notxpcom,nostdcall] void MaybeStartControlling(in nsIDocument aDoc); /** * Documents that have called MaybeStartControlling() should call this when * they are destroyed. This function may be called multiple times, and is * idempotent. */ [notxpcom,nostdcall] void MaybeStopControlling(in nsIDocument aDoc); /* * Returns a ServiceWorker. * window is the window of the caller. scope is the registration's scope and must be * a valid entry that window is allowed to load, otherwise this will return nullptr. * These are only meant to be called from ServiceWorkerRegistration instances. */ [noscript] nsISupports GetInstalling(in nsIDOMWindow aWindow, in DOMString aScope); [noscript] nsISupports GetWaiting(in nsIDOMWindow aWindow, in DOMString aScope); [noscript] nsISupports GetActive(in nsIDOMWindow aWindow, in DOMString aScope); /* * Returns a ServiceWorker. */ [noscript] nsISupports GetDocumentController(in nsIDOMWindow aWindow); /* * This implements the update algorithm. */ void update(in DOMString aScope); // Testing DOMString getScopeForUrl(in DOMString path); }; %{ C++ #define SERVICEWORKERMANAGER_CONTRACTID "@mozilla.org/serviceworkers/manager;1" %}