Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
/** `ChromePushSubscription` instances are passed to all subscription callbacks. */
export class ChromePushSubscription {
#props;
constructor(props) {
this.#props = props;
}
QueryInterface = ChromeUtils.generateQI(["nsIPushSubscription"]);
/** The URL for sending messages to this subscription. */
get endpoint() {
return this.#props.endpoint;
}
/** The last time a message was sent to this subscription. */
get lastPush() {
return this.#props.lastPush;
}
/** The total number of messages sent to this subscription. */
get pushCount() {
return this.#props.pushCount;
}
/** The number of remaining background messages that can be sent to this
* subscription, or -1 of the subscription is exempt from the quota.
*/
get quota() {
return this.#props.quota;
}
/**
* Indicates whether this subscription was created with the system principal.
* System subscriptions are exempt from the background message quota and
* permission checks.
*/
get isSystemSubscription() {
return !!this.#props.systemRecord;
}
/** The private key used to decrypt incoming push messages, in JWK format */
get p256dhPrivateKey() {
return this.#props.p256dhPrivateKey;
}
/**
* Indicates whether this subscription is subject to the background message
* quota.
*/
quotaApplies() {
return this.quota >= 0;
}
/**
* Indicates whether this subscription exceeded the background message quota,
* or the user revoked the notification permission. The caller must request a
* new subscription to continue receiving push messages.
*/
isExpired() {
return this.quota === 0;
}
/**
* Returns a key for encrypting messages sent to this subscription. JS
* callers receive the key buffer as a return value, while C++ callers
* receive the key size and buffer as out parameters.
*/
getKey(name) {
switch (name) {
case "p256dh":
return this.#getRawKey(this.#props.p256dhKey);
case "auth":
return this.#getRawKey(this.#props.authenticationSecret);
case "appServer":
return this.#getRawKey(this.#props.appServerKey);
}
return [];
}
#getRawKey(key) {
if (!key) {
return [];
}
return new Uint8Array(key);
}
}