Source code

Revision control

Copy as Markdown

Other Tools

/* -*- 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 "nsISupports.idl"
interface nsIPrincipal;
/**
* A push subscription, passed as an argument to a subscription callback.
* Similar to the `PushSubscription` WebIDL interface.
*/
[scriptable, uuid(1de32d5c-ea88-4c9e-9626-b032bd87f415)]
interface nsIPushSubscription : nsISupports
{
readonly attribute AString endpoint;
readonly attribute long long pushCount;
readonly attribute long long lastPush;
readonly attribute long quota;
readonly attribute boolean isSystemSubscription;
readonly attribute jsval p256dhPrivateKey;
boolean quotaApplies();
boolean isExpired();
Array<uint8_t> getKey(in AString name);
};
/**
* Called by methods that return a push subscription. A non-success
* |status| indicates that there was a problem returning the
* subscription, and the |subscription| argument should be ignored. Otherwise,
* |subscription| will point to a valid push subscription, or |null| if the
* subscription does not exist.
*/
[scriptable, uuid(1799c074-9d52-46b0-ab3c-c09790732f6f), function]
interface nsIPushSubscriptionCallback : nsISupports
{
void onPushSubscription(in nsresult status,
in nsIPushSubscription subscription);
};
/**
* Called by |unsubscribe|. A non-success |status| indicates that there was
* a problem unsubscribing, and the |success| argument should be ignored.
* Otherwise, |success| is true if unsubscribing was successful, and false if
* the subscription does not exist.
*/
[scriptable, uuid(d574118f-61a9-4270-b1f6-4461aa85c4f5), function]
interface nsIUnsubscribeResultCallback : nsISupports
{
void onUnsubscribe(in nsresult status, in boolean success);
};
/**
* Called by |clearForDomain|. A non-success |status| indicates that there was
* a problem clearing subscriptions for the given domain.
*/
[scriptable, uuid(bd47b38e-8bfa-4f92-834e-832a4431e05e), function]
interface nsIPushClearResultCallback : nsISupports
{
void onClear(in nsresult status);
};
/**
* A service for components to subscribe and receive push messages from web
* services. This functionality is exposed to content via the Push DOM API,
* which uses service workers. This interface exists to support the DOM API,
* and allows privileged code to receive messages without migrating to service
* workers.
*/
[scriptable, uuid(678ef584-bf25-47aa-ac84-03efc0865b68)]
interface nsIPushService : nsISupports
{
/** Observer topic names, exported for convenience. */
readonly attribute AString pushTopic;
readonly attribute AString subscriptionChangeTopic;
readonly attribute AString subscriptionModifiedTopic;
/**
* Creates a push subscription for the given |scope| URL and |principal|.
* If a subscription already exists for this |(scope, principal)| pair,
* the callback will receive the existing record as the second argument.
*
* The |endpoint| property of the subscription record is a URL string
* that can be used to send push messages to subscribers.
*
* Each incoming message fires a `push-message` observer notification, with
* an `nsIPushMessage` as the subject and the |scope| as the data.
*
* If the server drops a subscription, a `push-subscription-change` observer
* will be fired, with the subject set to |principal| and the data set to
* |scope|. Servers may drop subscriptions at any time, so callers should
* recreate subscriptions if desired.
*/
void subscribe(in AString scope, in nsIPrincipal principal,
in nsIPushSubscriptionCallback callback);
/**
* Creates a restricted push subscription with the given public |key|. The
* application server must use the corresponding private key to authenticate
* message delivery requests, as described in draft-thomson-webpush-vapid.
*/
void subscribeWithKey(in AString scope, in nsIPrincipal principal,
in Array<uint8_t> key,
in nsIPushSubscriptionCallback callback);
/**
* Removes a push subscription for the given |scope|.
*/
void unsubscribe(in AString scope, in nsIPrincipal principal,
in nsIUnsubscribeResultCallback callback);
/**
* Retrieves the subscription record associated with the given
* |(scope, principal)| pair. If the subscription does not exist, the
* callback will receive |null| as the second argument.
*/
void getSubscription(in AString scope, in nsIPrincipal principal,
in nsIPushSubscriptionCallback callback);
/**
* Drops every subscription for the given |domain|, or all domains if
* |domain| is "*".
* Optionally pass an OriginAttributesPattern to match against entries.
*/
void clearForDomain(in AString domain,
in jsval originAttributesPattern,
in nsIPushClearResultCallback callback);
/**
* Drops every subscription for the given |principal|.
*/
void clearForPrincipal(in nsIPrincipal principal,
in nsIPushClearResultCallback callback);
};
[scriptable, uuid(a2555e70-46f8-4b52-bf02-d978b979d143)]
interface nsIPushQuotaManager : nsISupports
{
/**
* Informs the quota manager that a notification
* for the given origin has been shown. Used to
* determine if push quota should be relaxed.
*/
void notificationForOriginShown(in string origin);
/**
* Informs the quota manager that a notification
* for the given origin has been closed. Used to
* determine if push quota should be relaxed.
*/
void notificationForOriginClosed(in string origin);
};