Blame devtools/client/definitions.js

Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
const Services = require("Services");
Packit f0b94e
const osString = Services.appinfo.OS;
Packit f0b94e
Packit f0b94e
// Panels
Packit f0b94e
loader.lazyGetter(this, "OptionsPanel", () => require("devtools/client/framework/toolbox-options").OptionsPanel);
Packit f0b94e
loader.lazyGetter(this, "InspectorPanel", () => require("devtools/client/inspector/panel").InspectorPanel);
Packit f0b94e
loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/client/webconsole/panel").WebConsolePanel);
Packit f0b94e
loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/client/debugger/panel").DebuggerPanel);
Packit f0b94e
loader.lazyGetter(this, "NewDebuggerPanel", () => require("devtools/client/debugger/new/panel").DebuggerPanel);
Packit f0b94e
loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/client/styleeditor/styleeditor-panel").StyleEditorPanel);
Packit f0b94e
loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/client/shadereditor/panel").ShaderEditorPanel);
Packit f0b94e
loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/client/canvasdebugger/panel").CanvasDebuggerPanel);
Packit f0b94e
loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/client/webaudioeditor/panel").WebAudioEditorPanel);
Packit f0b94e
loader.lazyGetter(this, "MemoryPanel", () => require("devtools/client/memory/panel").MemoryPanel);
Packit f0b94e
loader.lazyGetter(this, "PerformancePanel", () => require("devtools/client/performance/panel").PerformancePanel);
Packit f0b94e
loader.lazyGetter(this, "NewPerformancePanel", () => require("devtools/client/performance-new/panel").PerformancePanel);
Packit f0b94e
loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/client/netmonitor/panel").NetMonitorPanel);
Packit f0b94e
loader.lazyGetter(this, "StoragePanel", () => require("devtools/client/storage/panel").StoragePanel);
Packit f0b94e
loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/client/scratchpad/scratchpad-panel").ScratchpadPanel);
Packit f0b94e
loader.lazyGetter(this, "DomPanel", () => require("devtools/client/dom/dom-panel").DomPanel);
Packit f0b94e
Packit f0b94e
// Other dependencies
Packit f0b94e
loader.lazyRequireGetter(this, "CommandUtils", "devtools/client/shared/developer-toolbar", true);
Packit f0b94e
loader.lazyRequireGetter(this, "CommandState", "devtools/shared/gcli/command-state", true);
Packit f0b94e
loader.lazyRequireGetter(this, "ResponsiveUIManager", "devtools/client/responsive.html/manager", true);
Packit f0b94e
loader.lazyImporter(this, "ScratchpadManager", "resource://devtools/client/scratchpad/scratchpad-manager.jsm");
Packit f0b94e
Packit f0b94e
const {MultiLocalizationHelper} = require("devtools/shared/l10n");
Packit f0b94e
const L10N = new MultiLocalizationHelper(
Packit f0b94e
  "devtools/client/locales/startup.properties",
Packit f0b94e
  "devtools/shim/locales/key-shortcuts.properties"
Packit f0b94e
);
Packit f0b94e
Packit f0b94e
var Tools = {};
Packit f0b94e
exports.Tools = Tools;
Packit f0b94e
Packit f0b94e
// Definitions
Packit f0b94e
Tools.options = {
Packit f0b94e
  id: "options",
Packit f0b94e
  ordinal: 0,
Packit f0b94e
  url: "chrome://devtools/content/framework/toolbox-options.xhtml",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-options.svg",
Packit f0b94e
  bgTheme: "theme-body",
Packit f0b94e
  label: l10n("options.label"),
Packit f0b94e
  iconOnly: true,
Packit f0b94e
  panelLabel: l10n("options.panelLabel"),
Packit f0b94e
  tooltip: l10n("optionsButton.tooltip"),
Packit f0b94e
  inMenu: false,
Packit f0b94e
Packit f0b94e
  isTargetSupported: function () {
Packit f0b94e
    return true;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new OptionsPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.inspector = {
Packit f0b94e
  id: "inspector",
Packit f0b94e
  accesskey: l10n("inspector.accesskey"),
Packit f0b94e
  ordinal: 1,
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-inspector.svg",
Packit f0b94e
  url: "chrome://devtools/content/inspector/inspector.xhtml",
Packit f0b94e
  label: l10n("inspector.label"),
Packit f0b94e
  panelLabel: l10n("inspector.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("inspector.tooltip2",
Packit f0b94e
    (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
Packit f0b94e
    l10n("inspector.commandkey"));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
  commands: [
Packit f0b94e
    "devtools/client/responsive.html/commands",
Packit f0b94e
    "devtools/client/inspector/inspector-commands"
Packit f0b94e
  ],
Packit f0b94e
Packit f0b94e
  preventClosingOnKey: true,
Packit f0b94e
  onkey: function (panel, toolbox) {
Packit f0b94e
    toolbox.highlighterUtils.togglePicker();
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.hasActor("inspector");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new InspectorPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Tools.webConsole = {
Packit f0b94e
  id: "webconsole",
Packit f0b94e
  accesskey: l10n("webConsoleCmd.accesskey"),
Packit f0b94e
  ordinal: 2,
Packit f0b94e
  oldWebConsoleURL: "chrome://devtools/content/webconsole/webconsole.xul",
Packit f0b94e
  newWebConsoleURL: "chrome://devtools/content/webconsole/webconsole.html",
Packit f0b94e
  get browserConsoleURL() {
Packit f0b94e
    if (Services.prefs.getBoolPref("devtools.browserconsole.new-frontend-enabled")) {
Packit f0b94e
      return "chrome://devtools/content/webconsole/browserconsole.xul";
Packit f0b94e
    }
Packit f0b94e
    return Tools.webConsole.oldWebConsoleURL;
Packit f0b94e
  },
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-webconsole.svg",
Packit f0b94e
  label: l10n("ToolboxTabWebconsole.label"),
Packit f0b94e
  menuLabel: l10n("MenuWebconsole.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxWebConsole.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("ToolboxWebconsole.tooltip2",
Packit f0b94e
    (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
Packit f0b94e
    l10n("webconsole.commandkey"));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
  commands: "devtools/client/webconsole/console-commands",
Packit f0b94e
Packit f0b94e
  preventClosingOnKey: true,
Packit f0b94e
  onkey: function (panel, toolbox) {
Packit f0b94e
    if (toolbox.splitConsole) {
Packit f0b94e
      return toolbox.focusConsoleInput();
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    panel.focusInput();
Packit f0b94e
    return undefined;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  isTargetSupported: function () {
Packit f0b94e
    return true;
Packit f0b94e
  },
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new WebConsolePanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
function switchWebconsole() {
Packit f0b94e
  if (Services.prefs.getBoolPref("devtools.webconsole.new-frontend-enabled")) {
Packit f0b94e
    Tools.webConsole.url = Tools.webConsole.newWebConsoleURL;
Packit f0b94e
  } else {
Packit f0b94e
    Tools.webConsole.url = Tools.webConsole.oldWebConsoleURL;
Packit f0b94e
  }
Packit f0b94e
}
Packit f0b94e
switchWebconsole();
Packit f0b94e
Packit f0b94e
Services.prefs.addObserver(
Packit f0b94e
  "devtools.webconsole.new-frontend-enabled",
Packit f0b94e
  { observe: switchWebconsole }
Packit f0b94e
);
Packit f0b94e
Packit f0b94e
Tools.jsdebugger = {
Packit f0b94e
  id: "jsdebugger",
Packit f0b94e
  accesskey: l10n("debuggerMenu.accesskey"),
Packit f0b94e
  ordinal: 3,
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-debugger.svg",
Packit f0b94e
  url: "chrome://devtools/content/debugger/debugger.xul",
Packit f0b94e
  label: l10n("ToolboxDebugger.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxDebugger.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("ToolboxDebugger.tooltip2",
Packit f0b94e
    (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
Packit f0b94e
    l10n("debugger.commandkey"));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
  commands: "devtools/client/debugger/debugger-commands",
Packit f0b94e
Packit f0b94e
  isTargetSupported: function () {
Packit f0b94e
    return true;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new DebuggerPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
function switchDebugger() {
Packit f0b94e
  if (Services.prefs.getBoolPref("devtools.debugger.new-debugger-frontend")) {
Packit f0b94e
    Tools.jsdebugger.url = "chrome://devtools/content/debugger/new/index.html";
Packit f0b94e
    Tools.jsdebugger.build = function (iframeWindow, toolbox) {
Packit f0b94e
      return new NewDebuggerPanel(iframeWindow, toolbox);
Packit f0b94e
    };
Packit f0b94e
  } else {
Packit f0b94e
    Tools.jsdebugger.url = "chrome://devtools/content/debugger/debugger.xul";
Packit f0b94e
    Tools.jsdebugger.build = function (iframeWindow, toolbox) {
Packit f0b94e
      return new DebuggerPanel(iframeWindow, toolbox);
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
}
Packit f0b94e
switchDebugger();
Packit f0b94e
Packit f0b94e
Services.prefs.addObserver(
Packit f0b94e
  "devtools.debugger.new-debugger-frontend",
Packit f0b94e
  { observe: switchDebugger }
Packit f0b94e
);
Packit f0b94e
Packit f0b94e
Tools.styleEditor = {
Packit f0b94e
  id: "styleeditor",
Packit f0b94e
  ordinal: 4,
Packit f0b94e
  visibilityswitch: "devtools.styleeditor.enabled",
Packit f0b94e
  accesskey: l10n("open.accesskey"),
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-styleeditor.svg",
Packit f0b94e
  url: "chrome://devtools/content/styleeditor/styleeditor.xul",
Packit f0b94e
  label: l10n("ToolboxStyleEditor.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxStyleEditor.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("ToolboxStyleEditor.tooltip3",
Packit f0b94e
    "Shift+" + functionkey(l10n("styleeditor.commandkey")));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
  commands: "devtools/client/styleeditor/styleeditor-commands",
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.hasActor("styleSheets");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new StyleEditorPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.shaderEditor = {
Packit f0b94e
  id: "shadereditor",
Packit f0b94e
  ordinal: 5,
Packit f0b94e
  visibilityswitch: "devtools.shadereditor.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-shadereditor.svg",
Packit f0b94e
  url: "chrome://devtools/content/shadereditor/shadereditor.xul",
Packit f0b94e
  label: l10n("ToolboxShaderEditor.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxShaderEditor.panelLabel"),
Packit f0b94e
  tooltip: l10n("ToolboxShaderEditor.tooltip"),
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.hasActor("webgl") && !target.chrome;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new ShaderEditorPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.canvasDebugger = {
Packit f0b94e
  id: "canvasdebugger",
Packit f0b94e
  ordinal: 6,
Packit f0b94e
  visibilityswitch: "devtools.canvasdebugger.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-canvas.svg",
Packit f0b94e
  url: "chrome://devtools/content/canvasdebugger/canvasdebugger.xul",
Packit f0b94e
  label: l10n("ToolboxCanvasDebugger.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxCanvasDebugger.panelLabel"),
Packit f0b94e
  tooltip: l10n("ToolboxCanvasDebugger.tooltip"),
Packit f0b94e
Packit f0b94e
  // Hide the Canvas Debugger in the Add-on Debugger and Browser Toolbox
Packit f0b94e
  // (bug 1047520).
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.hasActor("canvas") && !target.chrome;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new CanvasDebuggerPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.performance = {
Packit f0b94e
 id: "performance",
Packit f0b94e
 ordinal: 7,
Packit f0b94e
 icon: "chrome://devtools/skin/images/tool-profiler.svg",
Packit f0b94e
 visibilityswitch: "devtools.performance.enabled",
Packit f0b94e
 label: l10n("performance.label"),
Packit f0b94e
 panelLabel: l10n("performance.panelLabel"),
Packit f0b94e
 get tooltip() {
Packit f0b94e
   return l10n("performance.tooltip", "Shift+" +
Packit f0b94e
   functionkey(l10n("performance.commandkey")));
Packit f0b94e
 },
Packit f0b94e
 accesskey: l10n("performance.accesskey"),
Packit f0b94e
 inMenu: true,
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
function switchPerformancePanel() {
Packit f0b94e
  if (Services.prefs.getBoolPref("devtools.performance.new-panel-enabled", false)) {
Packit f0b94e
    Tools.performance.url = "chrome://devtools/content/performance-new/perf.xhtml";
Packit f0b94e
    Tools.performance.build = function (frame, target) {
Packit f0b94e
      return new NewPerformancePanel(frame, target);
Packit f0b94e
    };
Packit f0b94e
    Tools.performance.isTargetSupported = function (target) {
Packit f0b94e
     // Root actors are lazily initialized, so we can't check if the target has
Packit f0b94e
     // the perf actor yet. Also this function is not async, so we can't initialize
Packit f0b94e
     // the actor yet.
Packit f0b94e
      return true;
Packit f0b94e
    };
Packit f0b94e
  } else {
Packit f0b94e
    Tools.performance.url = "chrome://devtools/content/performance/performance.xul";
Packit f0b94e
    Tools.performance.build = function (frame, target) {
Packit f0b94e
      return new PerformancePanel(frame, target);
Packit f0b94e
    };
Packit f0b94e
    Tools.performance.isTargetSupported = function (target) {
Packit f0b94e
      return target.hasActor("performance");
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
}
Packit f0b94e
switchPerformancePanel();
Packit f0b94e
Packit f0b94e
Services.prefs.addObserver(
Packit f0b94e
 "devtools.performance.new-panel-enabled",
Packit f0b94e
 { observe: switchPerformancePanel }
Packit f0b94e
);
Packit f0b94e
Packit f0b94e
Tools.memory = {
Packit f0b94e
  id: "memory",
Packit f0b94e
  ordinal: 8,
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-memory.svg",
Packit f0b94e
  url: "chrome://devtools/content/memory/memory.xhtml",
Packit f0b94e
  visibilityswitch: "devtools.memory.enabled",
Packit f0b94e
  label: l10n("memory.label"),
Packit f0b94e
  panelLabel: l10n("memory.panelLabel"),
Packit f0b94e
  tooltip: l10n("memory.tooltip"),
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.getTrait("heapSnapshots") && !target.isAddon;
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (frame, target) {
Packit f0b94e
    return new MemoryPanel(frame, target);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.netMonitor = {
Packit f0b94e
  id: "netmonitor",
Packit f0b94e
  accesskey: l10n("netmonitor.accesskey"),
Packit f0b94e
  ordinal: 9,
Packit f0b94e
  visibilityswitch: "devtools.netmonitor.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-network.svg",
Packit f0b94e
  url: "chrome://devtools/content/netmonitor/index.html",
Packit f0b94e
  label: l10n("netmonitor.label"),
Packit f0b94e
  panelLabel: l10n("netmonitor.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("netmonitor.tooltip2",
Packit f0b94e
    (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
Packit f0b94e
    l10n("netmonitor.commandkey"));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.getTrait("networkMonitor");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new NetMonitorPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.storage = {
Packit f0b94e
  id: "storage",
Packit f0b94e
  ordinal: 10,
Packit f0b94e
  accesskey: l10n("storage.accesskey"),
Packit f0b94e
  visibilityswitch: "devtools.storage.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-storage.svg",
Packit f0b94e
  url: "chrome://devtools/content/storage/storage.xul",
Packit f0b94e
  label: l10n("storage.label"),
Packit f0b94e
  menuLabel: l10n("storage.menuLabel"),
Packit f0b94e
  panelLabel: l10n("storage.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("storage.tooltip3", "Shift+" +
Packit f0b94e
    functionkey(l10n("storage.commandkey")));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.isLocalTab ||
Packit f0b94e
           (target.hasActor("storage") && target.getTrait("storageInspector"));
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new StoragePanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.webAudioEditor = {
Packit f0b94e
  id: "webaudioeditor",
Packit f0b94e
  ordinal: 11,
Packit f0b94e
  visibilityswitch: "devtools.webaudioeditor.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-webaudio.svg",
Packit f0b94e
  url: "chrome://devtools/content/webaudioeditor/webaudioeditor.xul",
Packit f0b94e
  label: l10n("ToolboxWebAudioEditor1.label"),
Packit f0b94e
  panelLabel: l10n("ToolboxWebAudioEditor1.panelLabel"),
Packit f0b94e
  tooltip: l10n("ToolboxWebAudioEditor1.tooltip"),
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return !target.chrome && target.hasActor("webaudio");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new WebAudioEditorPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.scratchpad = {
Packit f0b94e
  id: "scratchpad",
Packit f0b94e
  ordinal: 12,
Packit f0b94e
  visibilityswitch: "devtools.scratchpad.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-scratchpad.svg",
Packit f0b94e
  url: "chrome://devtools/content/scratchpad/scratchpad.xul",
Packit f0b94e
  label: l10n("scratchpad.label"),
Packit f0b94e
  panelLabel: l10n("scratchpad.panelLabel"),
Packit f0b94e
  tooltip: l10n("scratchpad.tooltip"),
Packit f0b94e
  inMenu: false,
Packit f0b94e
  commands: "devtools/client/scratchpad/scratchpad-commands",
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.hasActor("console");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new ScratchpadPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.dom = {
Packit f0b94e
  id: "dom",
Packit f0b94e
  accesskey: l10n("dom.accesskey"),
Packit f0b94e
  ordinal: 13,
Packit f0b94e
  visibilityswitch: "devtools.dom.enabled",
Packit f0b94e
  icon: "chrome://devtools/skin/images/tool-dom.svg",
Packit f0b94e
  url: "chrome://devtools/content/dom/dom.html",
Packit f0b94e
  label: l10n("dom.label"),
Packit f0b94e
  panelLabel: l10n("dom.panelLabel"),
Packit f0b94e
  get tooltip() {
Packit f0b94e
    return l10n("dom.tooltip",
Packit f0b94e
      (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
Packit f0b94e
      l10n("dom.commandkey"));
Packit f0b94e
  },
Packit f0b94e
  inMenu: true,
Packit f0b94e
Packit f0b94e
  isTargetSupported: function (target) {
Packit f0b94e
    return target.getTrait("webConsoleCommands");
Packit f0b94e
  },
Packit f0b94e
Packit f0b94e
  build: function (iframeWindow, toolbox) {
Packit f0b94e
    return new DomPanel(iframeWindow, toolbox);
Packit f0b94e
  }
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
var defaultTools = [
Packit f0b94e
  Tools.options,
Packit f0b94e
  Tools.webConsole,
Packit f0b94e
  Tools.inspector,
Packit f0b94e
  Tools.jsdebugger,
Packit f0b94e
  Tools.styleEditor,
Packit f0b94e
  Tools.shaderEditor,
Packit f0b94e
  Tools.canvasDebugger,
Packit f0b94e
  Tools.webAudioEditor,
Packit f0b94e
  Tools.performance,
Packit f0b94e
  Tools.netMonitor,
Packit f0b94e
  Tools.storage,
Packit f0b94e
  Tools.scratchpad,
Packit f0b94e
  Tools.memory,
Packit f0b94e
  Tools.dom,
Packit f0b94e
];
Packit f0b94e
Packit f0b94e
exports.defaultTools = defaultTools;
Packit f0b94e
Packit f0b94e
Tools.darkTheme = {
Packit f0b94e
  id: "dark",
Packit f0b94e
  label: l10n("options.darkTheme.label2"),
Packit f0b94e
  ordinal: 1,
Packit f0b94e
  stylesheets: ["chrome://devtools/skin/dark-theme.css"],
Packit f0b94e
  classList: ["theme-dark"],
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.lightTheme = {
Packit f0b94e
  id: "light",
Packit f0b94e
  label: l10n("options.lightTheme.label2"),
Packit f0b94e
  ordinal: 2,
Packit f0b94e
  stylesheets: ["chrome://devtools/skin/light-theme.css"],
Packit f0b94e
  classList: ["theme-light"],
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
Tools.firebugTheme = {
Packit f0b94e
  id: "firebug",
Packit f0b94e
  label: l10n("options.firebugTheme.label2"),
Packit f0b94e
  ordinal: 3,
Packit f0b94e
  stylesheets: ["chrome://devtools/skin/firebug-theme.css"],
Packit f0b94e
  classList: ["theme-light", "theme-firebug"],
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
exports.defaultThemes = [
Packit f0b94e
  Tools.darkTheme,
Packit f0b94e
  Tools.lightTheme,
Packit f0b94e
  Tools.firebugTheme,
Packit f0b94e
];
Packit f0b94e
Packit f0b94e
// White-list buttons that can be toggled to prevent adding prefs for
Packit f0b94e
// addons that have manually inserted toolbarbuttons into DOM.
Packit f0b94e
// (By default, supported target is only local tab)
Packit f0b94e
exports.ToolboxButtons = [
Packit f0b94e
  { id: "command-button-splitconsole",
Packit f0b94e
    description: l10n("toolbox.buttons.splitconsole", "Esc"),
Packit f0b94e
    isTargetSupported: target => !target.isAddon,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      toolbox.toggleSplitConsole();
Packit f0b94e
    },
Packit f0b94e
    isChecked(toolbox) {
Packit f0b94e
      return toolbox.splitConsole;
Packit f0b94e
    },
Packit f0b94e
    setup(toolbox, onChange) {
Packit f0b94e
      toolbox.on("split-console", onChange);
Packit f0b94e
    },
Packit f0b94e
    teardown(toolbox, onChange) {
Packit f0b94e
      toolbox.off("split-console", onChange);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-paintflashing",
Packit f0b94e
    description: l10n("toolbox.buttons.paintflashing"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      CommandUtils.executeOnTarget(toolbox.target, "paintflashing toggle");
Packit f0b94e
    },
Packit f0b94e
    isChecked(toolbox) {
Packit f0b94e
      return CommandState.isEnabledForTarget(toolbox.target, "paintflashing");
Packit f0b94e
    },
Packit f0b94e
    setup(toolbox, onChange) {
Packit f0b94e
      CommandState.on("changed", onChange);
Packit f0b94e
    },
Packit f0b94e
    teardown(toolbox, onChange) {
Packit f0b94e
      CommandState.off("changed", onChange);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-scratchpad",
Packit f0b94e
    description: l10n("toolbox.buttons.scratchpad"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      ScratchpadManager.openScratchpad();
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-responsive",
Packit f0b94e
    description: l10n("toolbox.buttons.responsive",
Packit f0b94e
                      osString == "Darwin" ? "Cmd+Opt+M" : "Ctrl+Shift+M"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      let tab = toolbox.target.tab;
Packit f0b94e
      let browserWindow = tab.ownerDocument.defaultView;
Packit f0b94e
      ResponsiveUIManager.handleGcliCommand(browserWindow, tab,
Packit f0b94e
        "resize toggle", null);
Packit f0b94e
    },
Packit f0b94e
    isChecked(toolbox) {
Packit f0b94e
      if (!toolbox.target.tab) {
Packit f0b94e
        return false;
Packit f0b94e
      }
Packit f0b94e
      return ResponsiveUIManager.isActiveForTab(toolbox.target.tab);
Packit f0b94e
    },
Packit f0b94e
    setup(toolbox, onChange) {
Packit f0b94e
      ResponsiveUIManager.on("on", onChange);
Packit f0b94e
      ResponsiveUIManager.on("off", onChange);
Packit f0b94e
    },
Packit f0b94e
    teardown(toolbox, onChange) {
Packit f0b94e
      ResponsiveUIManager.off("on", onChange);
Packit f0b94e
      ResponsiveUIManager.off("off", onChange);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-screenshot",
Packit f0b94e
    description: l10n("toolbox.buttons.screenshot"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      // Special case for screenshot button to check for clipboard preference
Packit f0b94e
      const clipboardEnabled = Services.prefs
Packit f0b94e
        .getBoolPref("devtools.screenshot.clipboard.enabled");
Packit f0b94e
      let args = "--fullpage --file";
Packit f0b94e
      if (clipboardEnabled) {
Packit f0b94e
        args += " --clipboard";
Packit f0b94e
      }
Packit f0b94e
      CommandUtils.executeOnTarget(toolbox.target, "screenshot " + args);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-rulers",
Packit f0b94e
    description: l10n("toolbox.buttons.rulers"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      CommandUtils.executeOnTarget(toolbox.target, "rulers");
Packit f0b94e
    },
Packit f0b94e
    isChecked(toolbox) {
Packit f0b94e
      return CommandState.isEnabledForTarget(toolbox.target, "rulers");
Packit f0b94e
    },
Packit f0b94e
    setup(toolbox, onChange) {
Packit f0b94e
      CommandState.on("changed", onChange);
Packit f0b94e
    },
Packit f0b94e
    teardown(toolbox, onChange) {
Packit f0b94e
      CommandState.off("changed", onChange);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
  { id: "command-button-measure",
Packit f0b94e
    description: l10n("toolbox.buttons.measure"),
Packit f0b94e
    isTargetSupported: target => target.isLocalTab,
Packit f0b94e
    onClick(event, toolbox) {
Packit f0b94e
      CommandUtils.executeOnTarget(toolbox.target, "measure");
Packit f0b94e
    },
Packit f0b94e
    isChecked(toolbox) {
Packit f0b94e
      return CommandState.isEnabledForTarget(toolbox.target, "measure");
Packit f0b94e
    },
Packit f0b94e
    setup(toolbox, onChange) {
Packit f0b94e
      CommandState.on("changed", onChange);
Packit f0b94e
    },
Packit f0b94e
    teardown(toolbox, onChange) {
Packit f0b94e
      CommandState.off("changed", onChange);
Packit f0b94e
    }
Packit f0b94e
  },
Packit f0b94e
];
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * Lookup l10n string from a string bundle.
Packit f0b94e
 *
Packit f0b94e
 * @param {string} name
Packit f0b94e
 *        The key to lookup.
Packit f0b94e
 * @param {string} arg
Packit f0b94e
 *        Optional format argument.
Packit f0b94e
 * @returns A localized version of the given key.
Packit f0b94e
 */
Packit f0b94e
function l10n(name, arg) {
Packit f0b94e
  try {
Packit f0b94e
    return arg ? L10N.getFormatStr(name, arg) : L10N.getStr(name);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    console.log("Error reading '" + name + "'");
Packit f0b94e
    throw new Error("l10n error with " + name);
Packit f0b94e
  }
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function functionkey(shortkey) {
Packit f0b94e
  return shortkey.split("_")[1];
Packit f0b94e
}