summaryrefslogtreecommitdiffstats
path: root/comm/suite/browser/webDeveloperOverlay.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/browser/webDeveloperOverlay.js')
-rw-r--r--comm/suite/browser/webDeveloperOverlay.js197
1 files changed, 197 insertions, 0 deletions
diff --git a/comm/suite/browser/webDeveloperOverlay.js b/comm/suite/browser/webDeveloperOverlay.js
new file mode 100644
index 0000000000..41277681f6
--- /dev/null
+++ b/comm/suite/browser/webDeveloperOverlay.js
@@ -0,0 +1,197 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+ChromeUtils.defineModuleGetter(this, "BrowserToolboxProcess",
+ "resource://devtools/client/framework/ToolboxProcess.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "DeveloperToolbar", function() {
+ var tmp = {};
+ ChromeUtils.import("resource://devtools/shared/Loader.jsm", tmp);
+ var DeveloperToolbar = tmp.require("devtools/client/shared/developer-toolbar").DeveloperToolbar;
+ return new DeveloperToolbar(window);
+});
+
+var ResponsiveUI = {
+ toggle() {
+ this.ResponsiveUIManager.toggle(window, getBrowser().selectedTab);
+ }
+};
+
+XPCOMUtils.defineLazyGetter(ResponsiveUI, "ResponsiveUIManager", function() {
+ var tmp = {};
+ ChromeUtils.import("resource://devtools/client/responsivedesign/responsivedesign.jsm", tmp);
+ return tmp.ResponsiveUIManager;
+});
+
+var Scratchpad = {
+ openScratchpad() {
+ return this.ScratchpadManager.openScratchpad();
+ }
+};
+
+XPCOMUtils.defineLazyGetter(Scratchpad, "ScratchpadManager", function() {
+ var tmp = {};
+ ChromeUtils.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", tmp);
+ return tmp.ScratchpadManager;
+});
+
+ChromeUtils.defineModuleGetter(this, "gDevTools",
+ "resource://devtools/client/framework/gDevTools.jsm");
+
+ChromeUtils.defineModuleGetter(this, "gDevToolsBrowser",
+ "resource://devtools/client/framework/gDevTools.jsm");
+
+function openEyedropper() {
+ var eyedropper = new this.Eyedropper(this, { context: "menu",
+ copyOnSelect: true });
+ eyedropper.open();
+}
+
+Object.defineProperty(this, "Eyedropper", {
+ get() {
+ var tmp = {};
+ ChromeUtils.import("resource://devtools/shared/Loader.jsm", tmp);
+ return tmp.require("devtools/client/eyedropper/eyedropper").Eyedropper;
+ },
+ configurable: true,
+ enumerable: true
+});
+
+Object.defineProperty(this, "HUDService", {
+ get() {
+ var tmp = {};
+ ChromeUtils.import("resource://devtools/shared/Loader.jsm", tmp);
+ return tmp.require("devtools/client/webconsole/hudservice").HUDService;
+ },
+ configurable: true,
+ enumerable: true
+});
+
+var gWebDeveloper = {
+ validateThisPage: function() {
+ var service = GetLocalizedStringPref("browser.validate.html.service");
+ var uri = getBrowser().currentURI;
+ var checkURL = service + encodeURIComponent(uri.spec);
+ var opentab = Services.prefs.getBoolPref("browser.tabs.opentabfor.middleclick");
+ openUILinkIn(checkURL, opentab ? "tabfocused" : "window",
+ { referrerURI: uri, relatedToCurrent: true });
+ },
+
+ enableDebugger: function(aItem) {
+ var shouldEnable = aItem.getAttribute("checked") == "true";
+ Services.prefs.setBoolPref("devtools.debugger.remote-enabled", shouldEnable);
+ },
+
+ handleEvent: function(aEvent) {
+ switch (aEvent.type) {
+ case "load":
+ window.removeEventListener("load", gWebDeveloper);
+ window.addEventListener("unload", gWebDeveloper);
+ var popup = document.getElementById("toolsPopup");
+ popup.addEventListener("popupshowing", gWebDeveloper);
+ // Don't use gDevToolsBrowser.updateCommandAvailability() at the moment
+ // because some tools aren't working.
+ if (!gDevToolsBrowser._old_updateCommandAvailability) {
+ gDevToolsBrowser._old_updateCommandAvailability = gDevToolsBrowser.updateCommandAvailability;
+ gDevToolsBrowser.updateCommandAvailability = this.updateCommandAvailability;
+ }
+ // Add Devtools menuitems, observers, and listeners
+ gDevToolsBrowser.registerBrowserWindow(window);
+ Services.prefs.addObserver(this.devtoolsThemePref, this);
+ this.updateDevtoolsThemeAttribute();
+ break;
+
+ case "unload":
+ window.removeEventListener("unload", gWebDeveloper);
+ gDevToolsBrowser.forgetBrowserWindow(window);
+ Services.prefs.removeObserver(this.devtoolsThemePref, this);
+
+ var desc = Object.getOwnPropertyDescriptor(window, "DeveloperToolbar");
+ if (desc && !desc.get)
+ DeveloperToolbar.destroy();
+ break;
+
+ case "popupshowing":
+ this.initMenuItems();
+ this.updateCommandAvailability(window);
+ break;
+ }
+ },
+
+ initMenuItems: function() {
+ var menuitem = document.getElementById("validatePage");
+ var uri = getBrowser().currentURI;
+ if (uri && (uri.schemeIs("http") || uri.schemeIs("https")))
+ menuitem.removeAttribute("disabled");
+ else
+ menuitem.setAttribute("disabled", true);
+
+ var enabled = Services.prefs
+ .getBoolPref("devtools.debugger.remote-enabled");
+ document.getElementById("devtoolsDebugger")
+ .setAttribute("checked", enabled);
+ },
+
+ devtoolsThemePref: "devtools.theme",
+
+ observe: function (subject, topic, data) {
+ if (topic == "nsPref:changed" && data == this.devtoolsThemePref) {
+ this.updateDevtoolsThemeAttribute();
+ }
+ },
+
+ updateDevtoolsThemeAttribute: function() {
+ // Set an attribute on root element to make it possible
+ // to change colors based on the selected devtools theme.
+ var devtoolsTheme = Services.prefs.getCharPref(this.devtoolsThemePref);
+ // Bug 1096469 - Make devedition theme work with custom devtools themes.
+ if (devtoolsTheme != "dark")
+ devtoolsTheme = "light";
+
+ document.documentElement.setAttribute("devtoolstheme", devtoolsTheme);
+ // document.getElementById("developer-toolbar").setAttribute("devtoolstheme", devtoolsTheme);
+ },
+
+ updateCommandAvailability: function(win) {
+ var doc = win.document;
+
+ function toggleCmd(id, isEnabled) {
+ var cmd = doc.getElementById(id);
+ if (isEnabled) {
+ cmd.removeAttribute("disabled");
+ cmd.removeAttribute("hidden");
+ } else {
+ cmd.setAttribute("disabled", "true");
+ cmd.setAttribute("hidden", "true");
+ }
+ };
+
+ // Enable developer toolbar?
+ var devToolbarEnabled = Services.prefs.getBoolPref("devtools.toolbar.enabled");
+ toggleCmd("Tools:DevToolbar", devToolbarEnabled);
+ var focusEl = doc.getElementById("Tools:DevToolbarFocus");
+ if (devToolbarEnabled)
+ focusEl.removeAttribute("disabled");
+ else
+ focusEl.setAttribute("disabled", "true");
+
+ if (devToolbarEnabled && Services.prefs.getBoolPref("devtools.toolbar.visible"))
+ win.DeveloperToolbar.show(false).catch(console.error);
+
+ // Enable Browser Toolbox?
+ var chromeEnabled = Services.prefs.getBoolPref("devtools.chrome.enabled");
+ var devtoolsRemoteEnabled = Services.prefs.getBoolPref("devtools.debugger.remote-enabled");
+ var remoteEnabled = chromeEnabled && devtoolsRemoteEnabled;
+ toggleCmd("Tools:BrowserToolbox", remoteEnabled);
+ // Currently "gMultiProcessBrowser" is always falsey.
+ //toggleCmd("Tools:BrowserContentToolbox", remoteEnabled && win.gMultiProcessBrowser);
+ toggleCmd("Tools:BrowserContentToolbox", false);
+
+ // Enable DevTools connection screen, if the preference allows this.
+ toggleCmd("Tools:DevToolsConnect", devtoolsRemoteEnabled);
+ },
+}
+
+window.addEventListener("load", gWebDeveloper);