summaryrefslogtreecommitdiffstats
path: root/devtools/shared/gcli/commands/listen.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/gcli/commands/listen.js')
-rw-r--r--devtools/shared/gcli/commands/listen.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/devtools/shared/gcli/commands/listen.js b/devtools/shared/gcli/commands/listen.js
new file mode 100644
index 000000000..7878577fb
--- /dev/null
+++ b/devtools/shared/gcli/commands/listen.js
@@ -0,0 +1,106 @@
+/* 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 { Cc, Ci } = require("chrome");
+const Services = require("Services");
+const l10n = require("gcli/l10n");
+const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "DevToolsLoader",
+ "resource://devtools/shared/Loader.jsm");
+
+const BRAND_SHORT_NAME = Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(Ci.nsIStringBundleService)
+ .createBundle("chrome://branding/locale/brand.properties")
+ .GetStringFromName("brandShortName");
+
+XPCOMUtils.defineLazyGetter(this, "debuggerServer", () => {
+ // Create a separate loader instance, so that we can be sure to receive
+ // a separate instance of the DebuggingServer from the rest of the
+ // devtools. This allows us to safely use the tools against even the
+ // actors and DebuggingServer itself, especially since we can mark
+ // serverLoader as invisible to the debugger (unlike the usual loader
+ // settings).
+ let serverLoader = new DevToolsLoader();
+ serverLoader.invisibleToDebugger = true;
+ let { DebuggerServer: debuggerServer } = serverLoader.require("devtools/server/main");
+ debuggerServer.init();
+ debuggerServer.addBrowserActors();
+ debuggerServer.allowChromeProcess = !l10n.hiddenByChromePref();
+ return debuggerServer;
+});
+
+exports.items = [
+ {
+ item: "command",
+ runAt: "client",
+ name: "listen",
+ description: l10n.lookup("listenDesc"),
+ manual: l10n.lookupFormat("listenManual2", [ BRAND_SHORT_NAME ]),
+ params: [
+ {
+ name: "port",
+ type: "number",
+ get defaultValue() {
+ return Services.prefs.getIntPref("devtools.debugger.remote-port");
+ },
+ description: l10n.lookup("listenPortDesc"),
+ },
+ {
+ name: "protocol",
+ get defaultValue() {
+ let webSocket = Services.prefs
+ .getBoolPref("devtools.debugger.remote-websocket");
+ let protocol;
+ if (webSocket === true) {
+ protocol = "websocket";
+ } else {
+ protocol = "mozilla-rdp";
+ }
+ return protocol;
+ },
+ type: {
+ name: "selection",
+ data: [ "mozilla-rdp", "websocket"],
+ },
+ description: l10n.lookup("listenProtocolDesc"),
+ },
+ ],
+ exec: function (args, context) {
+ var listener = debuggerServer.createListener();
+ if (!listener) {
+ throw new Error(l10n.lookup("listenDisabledOutput"));
+ }
+
+ let webSocket = false;
+ if (args.protocol === "websocket") {
+ webSocket = true;
+ } else if (args.protocol === "mozilla-rdp") {
+ webSocket = false;
+ }
+
+ listener.portOrPath = args.port;
+ listener.webSocket = webSocket;
+ listener.open();
+
+ if (debuggerServer.initialized) {
+ return l10n.lookupFormat("listenInitOutput", [ "" + args.port ]);
+ }
+
+ return l10n.lookup("listenNoInitOutput");
+ },
+ },
+ {
+ item: "command",
+ runAt: "client",
+ name: "unlisten",
+ description: l10n.lookup("unlistenDesc"),
+ manual: l10n.lookup("unlistenManual"),
+ exec: function (args, context) {
+ debuggerServer.closeAllListeners();
+ return l10n.lookup("unlistenOutput");
+ }
+ }
+];