68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
TYPES: { EXTENSIONS_BGSCRIPT_STATUS },
|
|
} = require("resource://devtools/server/actors/resources/index.js");
|
|
|
|
class ExtensionsBackgroundScriptStatusWatcher {
|
|
/**
|
|
* Start watching for the status updates related to a background
|
|
* scripts extension context (either an event page or a background
|
|
* service worker).
|
|
*
|
|
* This is used in about:debugging to update the background script
|
|
* row updated visible in Extensions details cards (only for extensions
|
|
* with a non persistent background script defined in the manifest)
|
|
* when the background contex is terminated on idle or started back
|
|
* to handle a persistent WebExtensions API event.
|
|
*
|
|
* @param RootActor rootActor
|
|
* The root actor in the parent process from which we should
|
|
* observe root resources.
|
|
* @param Object options
|
|
* Dictionary object with following attributes:
|
|
* - onAvailable: mandatory function
|
|
* This will be called for each resource.
|
|
*/
|
|
async watch(rootActor, { onAvailable }) {
|
|
this.rootActor = rootActor;
|
|
this.onAvailable = onAvailable;
|
|
|
|
Services.obs.addObserver(this, "extension:background-script-status");
|
|
}
|
|
|
|
observe(subject, topic) {
|
|
switch (topic) {
|
|
case "extension:background-script-status": {
|
|
const { addonId, isRunning } = subject.wrappedJSObject;
|
|
this.onBackgroundScriptStatus(addonId, isRunning);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
onBackgroundScriptStatus(addonId, isRunning) {
|
|
this.onAvailable([
|
|
{
|
|
resourceType: EXTENSIONS_BGSCRIPT_STATUS,
|
|
payload: {
|
|
addonId,
|
|
isRunning,
|
|
},
|
|
},
|
|
]);
|
|
}
|
|
|
|
destroy() {
|
|
if (this.onAvailable) {
|
|
this.onAvailable = null;
|
|
Services.obs.removeObserver(this, "extension:background-script-status");
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = ExtensionsBackgroundScriptStatusWatcher;
|