browser/devtools/main.js

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     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/. */
     5 "use strict";
     7 const {Cc, Ci, Cu} = require("chrome");
     9 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    10 Cu.import("resource://gre/modules/Services.jsm");
    11 Cu.import("resource:///modules/devtools/gDevTools.jsm");
    13 Object.defineProperty(exports, "Toolbox", {
    14   get: () => require("devtools/framework/toolbox").Toolbox
    15 });
    16 Object.defineProperty(exports, "TargetFactory", {
    17   get: () => require("devtools/framework/target").TargetFactory
    18 });
    20 loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS);
    22 let events = require("sdk/system/events");
    24 // Panels
    25 loader.lazyGetter(this, "OptionsPanel", () => require("devtools/framework/toolbox-options").OptionsPanel);
    26 loader.lazyGetter(this, "InspectorPanel", () => require("devtools/inspector/inspector-panel").InspectorPanel);
    27 loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/webconsole/panel").WebConsolePanel);
    28 loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/panel").DebuggerPanel);
    29 loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/styleeditor/styleeditor-panel").StyleEditorPanel);
    30 loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
    31 loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/canvasdebugger/panel").CanvasDebuggerPanel);
    32 loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/webaudioeditor/panel").WebAudioEditorPanel);
    33 loader.lazyGetter(this, "ProfilerPanel", () => require("devtools/profiler/panel"));
    34 loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
    35 loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
    37 // Strings
    38 const toolboxProps = "chrome://browser/locale/devtools/toolbox.properties";
    39 const inspectorProps = "chrome://browser/locale/devtools/inspector.properties";
    40 const debuggerProps = "chrome://browser/locale/devtools/debugger.properties";
    41 const styleEditorProps = "chrome://browser/locale/devtools/styleeditor.properties";
    42 const shaderEditorProps = "chrome://browser/locale/devtools/shadereditor.properties";
    43 const canvasDebuggerProps = "chrome://browser/locale/devtools/canvasdebugger.properties";
    44 const webAudioEditorProps = "chrome://browser/locale/devtools/webaudioeditor.properties";
    46 const webConsoleProps = "chrome://browser/locale/devtools/webconsole.properties";
    47 const profilerProps = "chrome://browser/locale/devtools/profiler.properties";
    48 const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties";
    49 const scratchpadProps = "chrome://browser/locale/devtools/scratchpad.properties";
    50 loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
    51 loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
    52 loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
    53 loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
    54 loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
    55 loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
    56 loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
    57 loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
    58 loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps));
    59 loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
    60 loader.lazyGetter(this, "scratchpadStrings", () => Services.strings.createBundle(scratchpadProps));
    62 let Tools = {};
    63 exports.Tools = Tools;
    65 // Definitions
    66 Tools.options = {
    67   id: "options",
    68   ordinal: 0,
    69   url: "chrome://browser/content/devtools/framework/toolbox-options.xul",
    70   icon: "chrome://browser/skin/devtools/tool-options.svg",
    71   invertIconForLightTheme: true,
    72   bgTheme: "theme-body",
    73   tooltip: l10n("optionsButton.tooltip", toolboxStrings),
    74   inMenu: false,
    75   isTargetSupported: function(target) {
    76     return true;
    77   },
    78   build: function(iframeWindow, toolbox) {
    79     let panel = new OptionsPanel(iframeWindow, toolbox);
    80     return panel.open();
    81   }
    82 }
    84 Tools.webConsole = {
    85   id: "webconsole",
    86   key: l10n("cmd.commandkey", webConsoleStrings),
    87   accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings),
    88   modifiers: Services.appinfo.OS == "Darwin" ? "accel,alt" : "accel,shift",
    89   ordinal: 1,
    90   icon: "chrome://browser/skin/devtools/tool-webconsole.svg",
    91   invertIconForLightTheme: true,
    92   url: "chrome://browser/content/devtools/webconsole.xul",
    93   label: l10n("ToolboxTabWebconsole.label", webConsoleStrings),
    94   menuLabel: l10n("MenuWebconsole.label", webConsoleStrings),
    95   tooltip: l10n("ToolboxWebconsole.tooltip", webConsoleStrings),
    96   inMenu: true,
    97   commands: "devtools/webconsole/console-commands",
    99   preventClosingOnKey: true,
   100   onkey: function(panel, toolbox) {
   101     if (toolbox.splitConsole)
   102       return toolbox.focusConsoleInput();
   104     panel.focusInput();
   105   },
   107   isTargetSupported: function(target) {
   108     return !target.isAddon;
   109   },
   110   build: function(iframeWindow, toolbox) {
   111     let panel = new WebConsolePanel(iframeWindow, toolbox);
   112     return panel.open();
   113   }
   114 };
   116 Tools.inspector = {
   117   id: "inspector",
   118   accesskey: l10n("inspector.accesskey", inspectorStrings),
   119   key: l10n("inspector.commandkey", inspectorStrings),
   120   ordinal: 2,
   121   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   122   icon: "chrome://browser/skin/devtools/tool-inspector.svg",
   123   invertIconForLightTheme: true,
   124   url: "chrome://browser/content/devtools/inspector/inspector.xul",
   125   label: l10n("inspector.label", inspectorStrings),
   126   tooltip: l10n("inspector.tooltip", inspectorStrings),
   127   inMenu: true,
   128   commands: [
   129     "devtools/resize-commands",
   130     "devtools/inspector/inspector-commands",
   131     "devtools/eyedropper/commands.js"
   132   ],
   134   preventClosingOnKey: true,
   135   onkey: function(panel) {
   136     panel.toolbox.highlighterUtils.togglePicker();
   137   },
   139   isTargetSupported: function(target) {
   140     return !target.isAddon;
   141   },
   143   build: function(iframeWindow, toolbox) {
   144     let panel = new InspectorPanel(iframeWindow, toolbox);
   145     return panel.open();
   146   }
   147 };
   149 Tools.jsdebugger = {
   150   id: "jsdebugger",
   151   key: l10n("debuggerMenu.commandkey", debuggerStrings),
   152   accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
   153   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   154   ordinal: 3,
   155   icon: "chrome://browser/skin/devtools/tool-debugger.svg",
   156   invertIconForLightTheme: true,
   157   highlightedicon: "chrome://browser/skin/devtools/tool-debugger-paused.svg",
   158   url: "chrome://browser/content/devtools/debugger.xul",
   159   label: l10n("ToolboxDebugger.label", debuggerStrings),
   160   tooltip: l10n("ToolboxDebugger.tooltip", debuggerStrings),
   161   inMenu: true,
   162   commands: "devtools/debugger/debugger-commands",
   164   isTargetSupported: function(target) {
   165     return true;
   166   },
   168   build: function(iframeWindow, toolbox) {
   169     let panel = new DebuggerPanel(iframeWindow, toolbox);
   170     return panel.open();
   171   }
   172 };
   174 Tools.styleEditor = {
   175   id: "styleeditor",
   176   key: l10n("open.commandkey", styleEditorStrings),
   177   ordinal: 4,
   178   accesskey: l10n("open.accesskey", styleEditorStrings),
   179   modifiers: "shift",
   180   icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   181   invertIconForLightTheme: true,
   182   url: "chrome://browser/content/devtools/styleeditor.xul",
   183   label: l10n("ToolboxStyleEditor.label", styleEditorStrings),
   184   tooltip: l10n("ToolboxStyleEditor.tooltip2", styleEditorStrings),
   185   inMenu: true,
   186   commands: "devtools/styleeditor/styleeditor-commands",
   188   isTargetSupported: function(target) {
   189     return !target.isAddon;
   190   },
   192   build: function(iframeWindow, toolbox) {
   193     let panel = new StyleEditorPanel(iframeWindow, toolbox);
   194     return panel.open();
   195   }
   196 };
   198 Tools.shaderEditor = {
   199   id: "shadereditor",
   200   ordinal: 5,
   201   visibilityswitch: "devtools.shadereditor.enabled",
   202   icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   203   invertIconForLightTheme: true,
   204   url: "chrome://browser/content/devtools/shadereditor.xul",
   205   label: l10n("ToolboxShaderEditor.label", shaderEditorStrings),
   206   tooltip: l10n("ToolboxShaderEditor.tooltip", shaderEditorStrings),
   208   isTargetSupported: function(target) {
   209     return !target.isAddon;
   210   },
   212   build: function(iframeWindow, toolbox) {
   213     let panel = new ShaderEditorPanel(iframeWindow, toolbox);
   214     return panel.open();
   215   }
   216 };
   218 Tools.canvasDebugger = {
   219   id: "canvasdebugger",
   220   ordinal: 6,
   221   visibilityswitch: "devtools.canvasdebugger.enabled",
   222   icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   223   invertIconForLightTheme: true,
   224   url: "chrome://browser/content/devtools/canvasdebugger.xul",
   225   label: l10n("ToolboxCanvasDebugger.label", canvasDebuggerStrings),
   226   tooltip: l10n("ToolboxCanvasDebugger.tooltip", canvasDebuggerStrings),
   227   isTargetSupported: function(target) {
   228     return !target.isAddon;
   229   },
   230   build: function (iframeWindow, toolbox) {
   231     let panel = new CanvasDebuggerPanel(iframeWindow, toolbox);
   232     return panel.open();
   233   }
   234 };
   236 Tools.webAudioEditor = {
   237   id: "webaudioeditor",
   238   ordinal: 10,
   239   visibilityswitch: "devtools.webaudioeditor.enabled",
   240   icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   241   invertIconForLightTheme: true,
   242   url: "chrome://browser/content/devtools/webaudioeditor.xul",
   243   label: l10n("ToolboxWebAudioEditor.label", webAudioEditorStrings),
   244   tooltip: l10n("ToolboxWebAudioEditor.tooltip", webAudioEditorStrings),
   245   isTargetSupported: function(target) {
   246     return !target.isAddon;
   247   },
   248   build: function(iframeWindow, toolbox) {
   249     let panel = new WebAudioEditorPanel(iframeWindow, toolbox);
   250     return panel.open();
   251   }
   252 };
   254 Tools.jsprofiler = {
   255   id: "jsprofiler",
   256   accesskey: l10n("profiler.accesskey", profilerStrings),
   257   key: l10n("profiler2.commandkey", profilerStrings),
   258   ordinal: 7,
   259   modifiers: "shift",
   260   visibilityswitch: "devtools.profiler.enabled",
   261   icon: "chrome://browser/skin/devtools/tool-profiler.svg",
   262   invertIconForLightTheme: true,
   263   url: "chrome://browser/content/devtools/profiler.xul",
   264   label: l10n("profiler.label", profilerStrings),
   265   tooltip: l10n("profiler.tooltip2", profilerStrings),
   266   inMenu: true,
   267   commands: "devtools/profiler/commands",
   269   isTargetSupported: function (target) {
   270     return !target.isAddon;
   271   },
   273   build: function (frame, target) {
   274     let panel = new ProfilerPanel(frame, target);
   275     return panel.open();
   276   }
   277 };
   279 Tools.netMonitor = {
   280   id: "netmonitor",
   281   accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
   282   key: l10n("netmonitor.commandkey", netMonitorStrings),
   283   ordinal: 8,
   284   modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   285   visibilityswitch: "devtools.netmonitor.enabled",
   286   icon: "chrome://browser/skin/devtools/tool-network.svg",
   287   invertIconForLightTheme: true,
   288   url: "chrome://browser/content/devtools/netmonitor.xul",
   289   label: l10n("netmonitor.label", netMonitorStrings),
   290   tooltip: l10n("netmonitor.tooltip", netMonitorStrings),
   291   inMenu: true,
   293   isTargetSupported: function(target) {
   294     let root = target.client.mainRoot;
   295     return !target.isAddon && (root.traits.networkMonitor || !target.isApp);
   296   },
   298   build: function(iframeWindow, toolbox) {
   299     let panel = new NetMonitorPanel(iframeWindow, toolbox);
   300     return panel.open();
   301   }
   302 };
   304 Tools.scratchpad = {
   305   id: "scratchpad",
   306   ordinal: 9,
   307   visibilityswitch: "devtools.scratchpad.enabled",
   308   icon: "chrome://browser/skin/devtools/tool-scratchpad.svg",
   309   invertIconForLightTheme: true,
   310   url: "chrome://browser/content/devtools/scratchpad.xul",
   311   label: l10n("scratchpad.label", scratchpadStrings),
   312   tooltip: l10n("scratchpad.tooltip", scratchpadStrings),
   313   inMenu: false,
   314   commands: "devtools/scratchpad/scratchpad-commands",
   316   isTargetSupported: function(target) {
   317     return !target.isAddon && target.isRemote;
   318   },
   320   build: function(iframeWindow, toolbox) {
   321     let panel = new ScratchpadPanel(iframeWindow, toolbox);
   322     return panel.open();
   323   }
   324 };
   326 let defaultTools = [
   327   Tools.options,
   328   Tools.webConsole,
   329   Tools.inspector,
   330   Tools.jsdebugger,
   331   Tools.styleEditor,
   332   Tools.shaderEditor,
   333   Tools.canvasDebugger,
   334   Tools.webAudioEditor,
   335   Tools.jsprofiler,
   336   Tools.netMonitor,
   337   Tools.scratchpad
   338 ];
   340 exports.defaultTools = defaultTools;
   342 for (let definition of defaultTools) {
   343   gDevTools.registerTool(definition);
   344 }
   346 var unloadObserver = {
   347   observe: function(subject, topic, data) {
   348     if (subject.wrappedJSObject === require("@loader/unload")) {
   349       Services.obs.removeObserver(unloadObserver, "sdk:loader:destroy");
   350       for (let definition of gDevTools.getToolDefinitionArray()) {
   351         gDevTools.unregisterTool(definition.id);
   352       }
   353     }
   354   }
   355 };
   356 Services.obs.addObserver(unloadObserver, "sdk:loader:destroy", false);
   358 events.emit("devtools-loaded", {});
   360 /**
   361  * Lookup l10n string from a string bundle.
   362  *
   363  * @param {string} name
   364  *        The key to lookup.
   365  * @param {StringBundle} bundle
   366  *        The key to lookup.
   367  * @returns A localized version of the given key.
   368  */
   369 function l10n(name, bundle)
   370 {
   371   try {
   372     return bundle.GetStringFromName(name);
   373   } catch (ex) {
   374     Services.console.logStringMessage("Error reading '" + name + "'");
   375     throw new Error("l10n error with " + name);
   376   }
   377 }

mercurial