Bug 1456663 - Add a preference to open webconsole.html directly in the Browser Console;r=nchevobbe draft
authorBrian Grinstead <bgrinstead@mozilla.com>
Thu, 26 Apr 2018 10:35:14 -0700
changeset 788623 b2a6d191d95088b95b22d9d0e146172912c9e8da
parent 788440 ccfd7b716a91241ddbc084cb7116ec561e56d5d1
push id108037
push userbgrinstead@mozilla.com
push dateThu, 26 Apr 2018 17:35:44 +0000
reviewersnchevobbe
bugs1456663
milestone61.0a1
Bug 1456663 - Add a preference to open webconsole.html directly in the Browser Console;r=nchevobbe This makes it easier to test top-level HTML window support. We continue to use the XUL wrapper document unless if the pref is changed. MozReview-Commit-ID: LUunCOCSyMN
devtools/client/definitions.js
devtools/client/preferences/devtools-client.js
devtools/client/webconsole/hudservice.js
--- a/devtools/client/definitions.js
+++ b/devtools/client/definitions.js
@@ -96,17 +96,24 @@ Tools.inspector = {
     return new InspectorPanel(iframeWindow, toolbox);
   }
 };
 Tools.webConsole = {
   id: "webconsole",
   accesskey: l10n("webConsoleCmd.accesskey"),
   ordinal: 2,
   url: "chrome://devtools/content/webconsole/webconsole.html",
-  browserConsoleURL: "chrome://devtools/content/webconsole/browserconsole.xul",
+  get browserConsoleUsesHTML() {
+    return Services.prefs.getBoolPref("devtools.browserconsole.html");
+  },
+  get browserConsoleURL() {
+    return this.browserConsoleUsesHTML ?
+      "chrome://devtools/content/webconsole/webconsole.html" :
+      "chrome://devtools/content/webconsole/browserconsole.xul";
+  },
   icon: "chrome://devtools/skin/images/tool-webconsole.svg",
   label: l10n("ToolboxTabWebconsole.label"),
   menuLabel: l10n("MenuWebconsole.label"),
   panelLabel: l10n("ToolboxWebConsole.panelLabel"),
   get tooltip() {
     return l10n("ToolboxWebconsole.tooltip2",
     (osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
     l10n("webconsole.commandkey"));
--- a/devtools/client/preferences/devtools-client.js
+++ b/devtools/client/preferences/devtools-client.js
@@ -237,16 +237,19 @@ pref("devtools.scratchpad.enabled", fals
 pref("devtools.dom.enabled", false);
 
 // Make sure the Accessibility panel is hidden by default
 pref("devtools.accessibility.enabled", false);
 
 // Web Audio Editor Inspector Width should be a preference
 pref("devtools.webaudioeditor.inspectorWidth", 300);
 
+// Experimental UI for the browser console that doesn't use a XUL wrapper doc
+pref("devtools.browserconsole.html", false);
+
 // Web console filters
 pref("devtools.webconsole.filter.error", true);
 pref("devtools.webconsole.filter.warn", true);
 pref("devtools.webconsole.filter.info", true);
 pref("devtools.webconsole.filter.log", true);
 pref("devtools.webconsole.filter.debug", true);
 pref("devtools.webconsole.filter.css", false);
 pref("devtools.webconsole.filter.net", false);
--- a/devtools/client/webconsole/hudservice.js
+++ b/devtools/client/webconsole/hudservice.js
@@ -178,31 +178,37 @@ HUD_SERVICE.prototype =
 
       let client = new DebuggerClient(DebuggerServer.connectPipe());
       await client.connect();
       let response = await client.getProcess();
       return { form: response.form, client, chrome: true, isTabActor: true };
     }
 
     async function openWindow(t) {
-      let browserConsoleURL = Tools.webConsole.browserConsoleURL;
-      let win = Services.ww.openWindow(null, browserConsoleURL, "_blank",
-                                       BC_WINDOW_FEATURES, null);
+      let win = Services.ww.openWindow(null, Tools.webConsole.browserConsoleURL,
+                                       "_blank", BC_WINDOW_FEATURES, null);
+      let iframeWindow = win;
+
       await new Promise(resolve => {
         win.addEventListener("DOMContentLoaded", resolve, {once: true});
       });
 
       win.document.title = l10n.getStr("browserConsole.title");
 
-      let iframe = win.document.querySelector("iframe");
-      await new Promise(resolve => {
-        iframe.addEventListener("DOMContentLoaded", resolve, {once: true});
-      });
+      // With a XUL wrapper doc, we host webconsole.html in an iframe.
+      // Wait for that to be ready before resolving:
+      if (!Tools.webConsole.browserConsoleUsesHTML) {
+        let iframe = win.document.querySelector("iframe");
+        await new Promise(resolve => {
+          iframe.addEventListener("DOMContentLoaded", resolve, {once: true});
+        });
+        iframeWindow = iframe.contentWindow;
+      }
 
-      return {iframeWindow: iframe.contentWindow, chromeWindow: win};
+      return {iframeWindow, chromeWindow: win};
     }
 
     // Temporarily cache the async startup sequence so that if toggleBrowserConsole
     // gets called again we can return this console instead of opening another one.
     this._browserConsoleInitializing = (async () => {
       let connection = await connect();
       let target = await TargetFactory.forRemoteTab(connection);
       let {iframeWindow, chromeWindow} = await openWindow(target);