browser/devtools/main.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/devtools/main.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,377 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +"use strict";
     1.9 +
    1.10 +const {Cc, Ci, Cu} = require("chrome");
    1.11 +
    1.12 +Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    1.13 +Cu.import("resource://gre/modules/Services.jsm");
    1.14 +Cu.import("resource:///modules/devtools/gDevTools.jsm");
    1.15 +
    1.16 +Object.defineProperty(exports, "Toolbox", {
    1.17 +  get: () => require("devtools/framework/toolbox").Toolbox
    1.18 +});
    1.19 +Object.defineProperty(exports, "TargetFactory", {
    1.20 +  get: () => require("devtools/framework/target").TargetFactory
    1.21 +});
    1.22 +
    1.23 +loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS);
    1.24 +
    1.25 +let events = require("sdk/system/events");
    1.26 +
    1.27 +// Panels
    1.28 +loader.lazyGetter(this, "OptionsPanel", () => require("devtools/framework/toolbox-options").OptionsPanel);
    1.29 +loader.lazyGetter(this, "InspectorPanel", () => require("devtools/inspector/inspector-panel").InspectorPanel);
    1.30 +loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/webconsole/panel").WebConsolePanel);
    1.31 +loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/panel").DebuggerPanel);
    1.32 +loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/styleeditor/styleeditor-panel").StyleEditorPanel);
    1.33 +loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
    1.34 +loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/canvasdebugger/panel").CanvasDebuggerPanel);
    1.35 +loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/webaudioeditor/panel").WebAudioEditorPanel);
    1.36 +loader.lazyGetter(this, "ProfilerPanel", () => require("devtools/profiler/panel"));
    1.37 +loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
    1.38 +loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
    1.39 +
    1.40 +// Strings
    1.41 +const toolboxProps = "chrome://browser/locale/devtools/toolbox.properties";
    1.42 +const inspectorProps = "chrome://browser/locale/devtools/inspector.properties";
    1.43 +const debuggerProps = "chrome://browser/locale/devtools/debugger.properties";
    1.44 +const styleEditorProps = "chrome://browser/locale/devtools/styleeditor.properties";
    1.45 +const shaderEditorProps = "chrome://browser/locale/devtools/shadereditor.properties";
    1.46 +const canvasDebuggerProps = "chrome://browser/locale/devtools/canvasdebugger.properties";
    1.47 +const webAudioEditorProps = "chrome://browser/locale/devtools/webaudioeditor.properties";
    1.48 +
    1.49 +const webConsoleProps = "chrome://browser/locale/devtools/webconsole.properties";
    1.50 +const profilerProps = "chrome://browser/locale/devtools/profiler.properties";
    1.51 +const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties";
    1.52 +const scratchpadProps = "chrome://browser/locale/devtools/scratchpad.properties";
    1.53 +loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
    1.54 +loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
    1.55 +loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
    1.56 +loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
    1.57 +loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
    1.58 +loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
    1.59 +loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
    1.60 +loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
    1.61 +loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps));
    1.62 +loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
    1.63 +loader.lazyGetter(this, "scratchpadStrings", () => Services.strings.createBundle(scratchpadProps));
    1.64 +
    1.65 +let Tools = {};
    1.66 +exports.Tools = Tools;
    1.67 +
    1.68 +// Definitions
    1.69 +Tools.options = {
    1.70 +  id: "options",
    1.71 +  ordinal: 0,
    1.72 +  url: "chrome://browser/content/devtools/framework/toolbox-options.xul",
    1.73 +  icon: "chrome://browser/skin/devtools/tool-options.svg",
    1.74 +  invertIconForLightTheme: true,
    1.75 +  bgTheme: "theme-body",
    1.76 +  tooltip: l10n("optionsButton.tooltip", toolboxStrings),
    1.77 +  inMenu: false,
    1.78 +  isTargetSupported: function(target) {
    1.79 +    return true;
    1.80 +  },
    1.81 +  build: function(iframeWindow, toolbox) {
    1.82 +    let panel = new OptionsPanel(iframeWindow, toolbox);
    1.83 +    return panel.open();
    1.84 +  }
    1.85 +}
    1.86 +
    1.87 +Tools.webConsole = {
    1.88 +  id: "webconsole",
    1.89 +  key: l10n("cmd.commandkey", webConsoleStrings),
    1.90 +  accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings),
    1.91 +  modifiers: Services.appinfo.OS == "Darwin" ? "accel,alt" : "accel,shift",
    1.92 +  ordinal: 1,
    1.93 +  icon: "chrome://browser/skin/devtools/tool-webconsole.svg",
    1.94 +  invertIconForLightTheme: true,
    1.95 +  url: "chrome://browser/content/devtools/webconsole.xul",
    1.96 +  label: l10n("ToolboxTabWebconsole.label", webConsoleStrings),
    1.97 +  menuLabel: l10n("MenuWebconsole.label", webConsoleStrings),
    1.98 +  tooltip: l10n("ToolboxWebconsole.tooltip", webConsoleStrings),
    1.99 +  inMenu: true,
   1.100 +  commands: "devtools/webconsole/console-commands",
   1.101 +
   1.102 +  preventClosingOnKey: true,
   1.103 +  onkey: function(panel, toolbox) {
   1.104 +    if (toolbox.splitConsole)
   1.105 +      return toolbox.focusConsoleInput();
   1.106 +
   1.107 +    panel.focusInput();
   1.108 +  },
   1.109 +
   1.110 +  isTargetSupported: function(target) {
   1.111 +    return !target.isAddon;
   1.112 +  },
   1.113 +  build: function(iframeWindow, toolbox) {
   1.114 +    let panel = new WebConsolePanel(iframeWindow, toolbox);
   1.115 +    return panel.open();
   1.116 +  }
   1.117 +};
   1.118 +
   1.119 +Tools.inspector = {
   1.120 +  id: "inspector",
   1.121 +  accesskey: l10n("inspector.accesskey", inspectorStrings),
   1.122 +  key: l10n("inspector.commandkey", inspectorStrings),
   1.123 +  ordinal: 2,
   1.124 +  modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   1.125 +  icon: "chrome://browser/skin/devtools/tool-inspector.svg",
   1.126 +  invertIconForLightTheme: true,
   1.127 +  url: "chrome://browser/content/devtools/inspector/inspector.xul",
   1.128 +  label: l10n("inspector.label", inspectorStrings),
   1.129 +  tooltip: l10n("inspector.tooltip", inspectorStrings),
   1.130 +  inMenu: true,
   1.131 +  commands: [
   1.132 +    "devtools/resize-commands",
   1.133 +    "devtools/inspector/inspector-commands",
   1.134 +    "devtools/eyedropper/commands.js"
   1.135 +  ],
   1.136 +
   1.137 +  preventClosingOnKey: true,
   1.138 +  onkey: function(panel) {
   1.139 +    panel.toolbox.highlighterUtils.togglePicker();
   1.140 +  },
   1.141 +
   1.142 +  isTargetSupported: function(target) {
   1.143 +    return !target.isAddon;
   1.144 +  },
   1.145 +
   1.146 +  build: function(iframeWindow, toolbox) {
   1.147 +    let panel = new InspectorPanel(iframeWindow, toolbox);
   1.148 +    return panel.open();
   1.149 +  }
   1.150 +};
   1.151 +
   1.152 +Tools.jsdebugger = {
   1.153 +  id: "jsdebugger",
   1.154 +  key: l10n("debuggerMenu.commandkey", debuggerStrings),
   1.155 +  accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
   1.156 +  modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   1.157 +  ordinal: 3,
   1.158 +  icon: "chrome://browser/skin/devtools/tool-debugger.svg",
   1.159 +  invertIconForLightTheme: true,
   1.160 +  highlightedicon: "chrome://browser/skin/devtools/tool-debugger-paused.svg",
   1.161 +  url: "chrome://browser/content/devtools/debugger.xul",
   1.162 +  label: l10n("ToolboxDebugger.label", debuggerStrings),
   1.163 +  tooltip: l10n("ToolboxDebugger.tooltip", debuggerStrings),
   1.164 +  inMenu: true,
   1.165 +  commands: "devtools/debugger/debugger-commands",
   1.166 +
   1.167 +  isTargetSupported: function(target) {
   1.168 +    return true;
   1.169 +  },
   1.170 +
   1.171 +  build: function(iframeWindow, toolbox) {
   1.172 +    let panel = new DebuggerPanel(iframeWindow, toolbox);
   1.173 +    return panel.open();
   1.174 +  }
   1.175 +};
   1.176 +
   1.177 +Tools.styleEditor = {
   1.178 +  id: "styleeditor",
   1.179 +  key: l10n("open.commandkey", styleEditorStrings),
   1.180 +  ordinal: 4,
   1.181 +  accesskey: l10n("open.accesskey", styleEditorStrings),
   1.182 +  modifiers: "shift",
   1.183 +  icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   1.184 +  invertIconForLightTheme: true,
   1.185 +  url: "chrome://browser/content/devtools/styleeditor.xul",
   1.186 +  label: l10n("ToolboxStyleEditor.label", styleEditorStrings),
   1.187 +  tooltip: l10n("ToolboxStyleEditor.tooltip2", styleEditorStrings),
   1.188 +  inMenu: true,
   1.189 +  commands: "devtools/styleeditor/styleeditor-commands",
   1.190 +
   1.191 +  isTargetSupported: function(target) {
   1.192 +    return !target.isAddon;
   1.193 +  },
   1.194 +
   1.195 +  build: function(iframeWindow, toolbox) {
   1.196 +    let panel = new StyleEditorPanel(iframeWindow, toolbox);
   1.197 +    return panel.open();
   1.198 +  }
   1.199 +};
   1.200 +
   1.201 +Tools.shaderEditor = {
   1.202 +  id: "shadereditor",
   1.203 +  ordinal: 5,
   1.204 +  visibilityswitch: "devtools.shadereditor.enabled",
   1.205 +  icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   1.206 +  invertIconForLightTheme: true,
   1.207 +  url: "chrome://browser/content/devtools/shadereditor.xul",
   1.208 +  label: l10n("ToolboxShaderEditor.label", shaderEditorStrings),
   1.209 +  tooltip: l10n("ToolboxShaderEditor.tooltip", shaderEditorStrings),
   1.210 +
   1.211 +  isTargetSupported: function(target) {
   1.212 +    return !target.isAddon;
   1.213 +  },
   1.214 +
   1.215 +  build: function(iframeWindow, toolbox) {
   1.216 +    let panel = new ShaderEditorPanel(iframeWindow, toolbox);
   1.217 +    return panel.open();
   1.218 +  }
   1.219 +};
   1.220 +
   1.221 +Tools.canvasDebugger = {
   1.222 +  id: "canvasdebugger",
   1.223 +  ordinal: 6,
   1.224 +  visibilityswitch: "devtools.canvasdebugger.enabled",
   1.225 +  icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   1.226 +  invertIconForLightTheme: true,
   1.227 +  url: "chrome://browser/content/devtools/canvasdebugger.xul",
   1.228 +  label: l10n("ToolboxCanvasDebugger.label", canvasDebuggerStrings),
   1.229 +  tooltip: l10n("ToolboxCanvasDebugger.tooltip", canvasDebuggerStrings),
   1.230 +  isTargetSupported: function(target) {
   1.231 +    return !target.isAddon;
   1.232 +  },
   1.233 +  build: function (iframeWindow, toolbox) {
   1.234 +    let panel = new CanvasDebuggerPanel(iframeWindow, toolbox);
   1.235 +    return panel.open();
   1.236 +  }
   1.237 +};
   1.238 +
   1.239 +Tools.webAudioEditor = {
   1.240 +  id: "webaudioeditor",
   1.241 +  ordinal: 10,
   1.242 +  visibilityswitch: "devtools.webaudioeditor.enabled",
   1.243 +  icon: "chrome://browser/skin/devtools/tool-styleeditor.svg",
   1.244 +  invertIconForLightTheme: true,
   1.245 +  url: "chrome://browser/content/devtools/webaudioeditor.xul",
   1.246 +  label: l10n("ToolboxWebAudioEditor.label", webAudioEditorStrings),
   1.247 +  tooltip: l10n("ToolboxWebAudioEditor.tooltip", webAudioEditorStrings),
   1.248 +  isTargetSupported: function(target) {
   1.249 +    return !target.isAddon;
   1.250 +  },
   1.251 +  build: function(iframeWindow, toolbox) {
   1.252 +    let panel = new WebAudioEditorPanel(iframeWindow, toolbox);
   1.253 +    return panel.open();
   1.254 +  }
   1.255 +};
   1.256 +
   1.257 +Tools.jsprofiler = {
   1.258 +  id: "jsprofiler",
   1.259 +  accesskey: l10n("profiler.accesskey", profilerStrings),
   1.260 +  key: l10n("profiler2.commandkey", profilerStrings),
   1.261 +  ordinal: 7,
   1.262 +  modifiers: "shift",
   1.263 +  visibilityswitch: "devtools.profiler.enabled",
   1.264 +  icon: "chrome://browser/skin/devtools/tool-profiler.svg",
   1.265 +  invertIconForLightTheme: true,
   1.266 +  url: "chrome://browser/content/devtools/profiler.xul",
   1.267 +  label: l10n("profiler.label", profilerStrings),
   1.268 +  tooltip: l10n("profiler.tooltip2", profilerStrings),
   1.269 +  inMenu: true,
   1.270 +  commands: "devtools/profiler/commands",
   1.271 +
   1.272 +  isTargetSupported: function (target) {
   1.273 +    return !target.isAddon;
   1.274 +  },
   1.275 +
   1.276 +  build: function (frame, target) {
   1.277 +    let panel = new ProfilerPanel(frame, target);
   1.278 +    return panel.open();
   1.279 +  }
   1.280 +};
   1.281 +
   1.282 +Tools.netMonitor = {
   1.283 +  id: "netmonitor",
   1.284 +  accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
   1.285 +  key: l10n("netmonitor.commandkey", netMonitorStrings),
   1.286 +  ordinal: 8,
   1.287 +  modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
   1.288 +  visibilityswitch: "devtools.netmonitor.enabled",
   1.289 +  icon: "chrome://browser/skin/devtools/tool-network.svg",
   1.290 +  invertIconForLightTheme: true,
   1.291 +  url: "chrome://browser/content/devtools/netmonitor.xul",
   1.292 +  label: l10n("netmonitor.label", netMonitorStrings),
   1.293 +  tooltip: l10n("netmonitor.tooltip", netMonitorStrings),
   1.294 +  inMenu: true,
   1.295 +
   1.296 +  isTargetSupported: function(target) {
   1.297 +    let root = target.client.mainRoot;
   1.298 +    return !target.isAddon && (root.traits.networkMonitor || !target.isApp);
   1.299 +  },
   1.300 +
   1.301 +  build: function(iframeWindow, toolbox) {
   1.302 +    let panel = new NetMonitorPanel(iframeWindow, toolbox);
   1.303 +    return panel.open();
   1.304 +  }
   1.305 +};
   1.306 +
   1.307 +Tools.scratchpad = {
   1.308 +  id: "scratchpad",
   1.309 +  ordinal: 9,
   1.310 +  visibilityswitch: "devtools.scratchpad.enabled",
   1.311 +  icon: "chrome://browser/skin/devtools/tool-scratchpad.svg",
   1.312 +  invertIconForLightTheme: true,
   1.313 +  url: "chrome://browser/content/devtools/scratchpad.xul",
   1.314 +  label: l10n("scratchpad.label", scratchpadStrings),
   1.315 +  tooltip: l10n("scratchpad.tooltip", scratchpadStrings),
   1.316 +  inMenu: false,
   1.317 +  commands: "devtools/scratchpad/scratchpad-commands",
   1.318 +
   1.319 +  isTargetSupported: function(target) {
   1.320 +    return !target.isAddon && target.isRemote;
   1.321 +  },
   1.322 +
   1.323 +  build: function(iframeWindow, toolbox) {
   1.324 +    let panel = new ScratchpadPanel(iframeWindow, toolbox);
   1.325 +    return panel.open();
   1.326 +  }
   1.327 +};
   1.328 +
   1.329 +let defaultTools = [
   1.330 +  Tools.options,
   1.331 +  Tools.webConsole,
   1.332 +  Tools.inspector,
   1.333 +  Tools.jsdebugger,
   1.334 +  Tools.styleEditor,
   1.335 +  Tools.shaderEditor,
   1.336 +  Tools.canvasDebugger,
   1.337 +  Tools.webAudioEditor,
   1.338 +  Tools.jsprofiler,
   1.339 +  Tools.netMonitor,
   1.340 +  Tools.scratchpad
   1.341 +];
   1.342 +
   1.343 +exports.defaultTools = defaultTools;
   1.344 +
   1.345 +for (let definition of defaultTools) {
   1.346 +  gDevTools.registerTool(definition);
   1.347 +}
   1.348 +
   1.349 +var unloadObserver = {
   1.350 +  observe: function(subject, topic, data) {
   1.351 +    if (subject.wrappedJSObject === require("@loader/unload")) {
   1.352 +      Services.obs.removeObserver(unloadObserver, "sdk:loader:destroy");
   1.353 +      for (let definition of gDevTools.getToolDefinitionArray()) {
   1.354 +        gDevTools.unregisterTool(definition.id);
   1.355 +      }
   1.356 +    }
   1.357 +  }
   1.358 +};
   1.359 +Services.obs.addObserver(unloadObserver, "sdk:loader:destroy", false);
   1.360 +
   1.361 +events.emit("devtools-loaded", {});
   1.362 +
   1.363 +/**
   1.364 + * Lookup l10n string from a string bundle.
   1.365 + *
   1.366 + * @param {string} name
   1.367 + *        The key to lookup.
   1.368 + * @param {StringBundle} bundle
   1.369 + *        The key to lookup.
   1.370 + * @returns A localized version of the given key.
   1.371 + */
   1.372 +function l10n(name, bundle)
   1.373 +{
   1.374 +  try {
   1.375 +    return bundle.GetStringFromName(name);
   1.376 +  } catch (ex) {
   1.377 +    Services.console.logStringMessage("Error reading '" + name + "'");
   1.378 +    throw new Error("l10n error with " + name);
   1.379 +  }
   1.380 +}

mercurial