summaryrefslogtreecommitdiffstats
path: root/devtools/client/application/src/modules/application-services.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/application/src/modules/application-services.js')
-rw-r--r--devtools/client/application/src/modules/application-services.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/devtools/client/application/src/modules/application-services.js b/devtools/client/application/src/modules/application-services.js
new file mode 100644
index 0000000000..e51caa585b
--- /dev/null
+++ b/devtools/client/application/src/modules/application-services.js
@@ -0,0 +1,85 @@
+/* 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";
+
+// keyword to use in telemetry, as `reason` parameter
+const REASON = "application";
+
+class ManifestDevToolsError extends Error {
+ constructor(...params) {
+ super(...params);
+
+ this.name = "ManifestDevToolsError";
+ }
+}
+
+class ApplicationServices {
+ init(toolbox) {
+ this._toolbox = toolbox;
+
+ this.features = {
+ doesDebuggerSupportWorkers: Services.prefs.getBoolPref(
+ "devtools.debugger.features.windowless-service-workers",
+ false
+ ),
+ };
+ }
+
+ selectTool(toolId) {
+ this._assertInit();
+ return this._toolbox.selectTool(toolId, REASON);
+ }
+
+ async openWorkerInDebugger(workerDescriptorFront) {
+ const debuggerPanel = await this.selectTool("jsdebugger");
+ debuggerPanel.selectWorker(workerDescriptorFront);
+ }
+
+ async viewWorkerSource(workerDescriptorFront) {
+ // NOTE: this falls back to view-source: if the source can't be inspected
+ // within the debugger.
+ this._toolbox.viewSourceInDebugger(
+ workerDescriptorFront.url,
+ 1,
+ 1,
+ null,
+ REASON
+ );
+ }
+
+ async fetchManifest() {
+ let response;
+
+ try {
+ this._assertInit();
+ const manifestFront = await this._toolbox.target.getFront("manifest");
+ response = await manifestFront.fetchCanonicalManifest();
+ } catch (error) {
+ throw new ManifestDevToolsError(
+ error.message,
+ error.fileName,
+ error.lineNumber
+ );
+ }
+
+ if (response.errorMessage) {
+ throw new Error(response.errorMessage);
+ }
+
+ return response.manifest;
+ }
+
+ _assertInit() {
+ if (!this._toolbox) {
+ throw new Error("Services singleton has not been initialized");
+ }
+ }
+}
+
+module.exports = {
+ ManifestDevToolsError,
+ // exports a singleton, which will be used across all application panel modules
+ services: new ApplicationServices(),
+};