|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 const { classes: Cc, interfaces: Ci, utils: Cu } = Components; |
|
6 const kDebuggerPrefs = [ |
|
7 "devtools.debugger.remote-enabled", |
|
8 "devtools.debugger.chrome-enabled", |
|
9 "devtools.chrome.enabled" |
|
10 ]; |
|
11 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
|
12 XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm"); |
|
13 |
|
14 function devtoolsCommandlineHandler() { |
|
15 } |
|
16 devtoolsCommandlineHandler.prototype = { |
|
17 handle: function(cmdLine) { |
|
18 let consoleFlag = cmdLine.handleFlag("jsconsole", false); |
|
19 let debuggerFlag = cmdLine.handleFlag("jsdebugger", false); |
|
20 if (consoleFlag) { |
|
21 this.handleConsoleFlag(cmdLine); |
|
22 } |
|
23 if (debuggerFlag) { |
|
24 this.handleDebuggerFlag(cmdLine); |
|
25 } |
|
26 }, |
|
27 |
|
28 handleConsoleFlag: function(cmdLine) { |
|
29 let window = Services.wm.getMostRecentWindow("devtools:webconsole"); |
|
30 if (!window) { |
|
31 let devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools; |
|
32 // Load the browser devtools main module as the loader's main module. |
|
33 Cu.import("resource:///modules/devtools/gDevTools.jsm"); |
|
34 let hudservice = devtools.require("devtools/webconsole/hudservice"); |
|
35 let console = Cu.import("resource://gre/modules/devtools/Console.jsm", {}).console; |
|
36 hudservice.toggleBrowserConsole().then(null, console.error); |
|
37 } else { |
|
38 window.focus(); // the Browser Console was already open |
|
39 } |
|
40 |
|
41 if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO) { |
|
42 cmdLine.preventDefault = true; |
|
43 } |
|
44 }, |
|
45 |
|
46 handleDebuggerFlag: function(cmdLine) { |
|
47 let remoteDebuggingEnabled = false; |
|
48 try { |
|
49 remoteDebuggingEnabled = kDebuggerPrefs.every((pref) => Services.prefs.getBoolPref(pref)); |
|
50 } catch (ex) { |
|
51 Cu.reportError(ex); |
|
52 return; |
|
53 } |
|
54 if (remoteDebuggingEnabled) { |
|
55 Cu.import("resource:///modules/devtools/ToolboxProcess.jsm"); |
|
56 BrowserToolboxProcess.init(); |
|
57 } else { |
|
58 let errorMsg = "Could not run chrome debugger! You need the following prefs " + |
|
59 "to be set to true: " + kDebuggerPrefs.join(", "); |
|
60 Cu.reportError(errorMsg); |
|
61 // Dump as well, as we're doing this from a commandline, make sure people don't miss it: |
|
62 dump(errorMsg + "\n"); |
|
63 } |
|
64 |
|
65 if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO) { |
|
66 cmdLine.preventDefault = true; |
|
67 } |
|
68 }, |
|
69 |
|
70 helpInfo : " -jsconsole Open the Browser Console.\n" + |
|
71 " -jsdebugger Open the Browser Toolbox.\n", |
|
72 |
|
73 classID: Components.ID("{9e9a9283-0ce9-4e4a-8f1c-ba129a032c32}"), |
|
74 QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), |
|
75 }; |
|
76 |
|
77 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([devtoolsCommandlineHandler]); |