Bug 1438962 - Convert Browser Toolbox window to async / await. r=bgrins draft
authorJ. Ryan Stinnett <jryans@gmail.com>
Tue, 20 Feb 2018 09:11:46 -0500
changeset 758030 ead032c175f448b2f46b85be0347c70a6dd3fe6e
parent 756286 f529bbfd0f59e08b9f9f53165e590c251e2ce847
child 758031 2b72c22aa0bbb5efc780389fad8ada94d1ba6544
push id99921
push userbmo:jryans@gmail.com
push dateWed, 21 Feb 2018 19:42:05 +0000
reviewersbgrins
bugs1438962
milestone60.0a1
Bug 1438962 - Convert Browser Toolbox window to async / await. r=bgrins MozReview-Commit-ID: 1hLUhmoYQ7u
devtools/client/framework/toolbox-process-window.js
--- a/devtools/client/framework/toolbox-process-window.js
+++ b/devtools/client/framework/toolbox-process-window.js
@@ -11,119 +11,121 @@ var { loader, require } = ChromeUtils.im
 loader.require("devtools/client/framework/devtools-browser");
 
 var { gDevTools } = require("devtools/client/framework/devtools");
 var { TargetFactory } = require("devtools/client/framework/target");
 var { Toolbox } = require("devtools/client/framework/toolbox");
 var Services = require("Services");
 var { DebuggerClient } = require("devtools/shared/client/debugger-client");
 var { PrefsHelper } = require("devtools/client/shared/prefs");
-var { Task } = require("devtools/shared/task");
 
 /**
  * Shortcuts for accessing various debugger preferences.
  */
 var Prefs = new PrefsHelper("devtools.debugger", {
   chromeDebuggingHost: ["Char", "chrome-debugging-host"],
   chromeDebuggingWebSocket: ["Bool", "chrome-debugging-websocket"],
 });
 
 var gToolbox, gClient;
 
-var connect = Task.async(function* () {
+var connect = async function () {
   window.removeEventListener("load", connect);
 
   // Initiate the connection
   let env = Components.classes["@mozilla.org/process/environment;1"]
     .getService(Components.interfaces.nsIEnvironment);
   let port = env.get("MOZ_BROWSER_TOOLBOX_PORT");
   let addonID = env.get("MOZ_BROWSER_TOOLBOX_ADDONID");
 
   // A port needs to be passed in from the environment, for instance:
   //    MOZ_BROWSER_TOOLBOX_PORT=6080 ./mach run -chrome \
   //      chrome://devtools/content/framework/toolbox-process-window.xul
   if (!port) {
     throw new Error("Must pass a port in an env variable with MOZ_BROWSER_TOOLBOX_PORT");
   }
 
-  let transport = yield DebuggerClient.socketConnect({
+  let transport = await DebuggerClient.socketConnect({
     host: Prefs.chromeDebuggingHost,
     port,
     webSocket: Prefs.chromeDebuggingWebSocket,
   });
   gClient = new DebuggerClient(transport);
-  yield gClient.connect();
+  await gClient.connect();
 
   if (addonID) {
-    let { addons } = yield gClient.listAddons();
+    let { addons } = await gClient.listAddons();
     let addonActor = addons.filter(addon => addon.id === addonID).pop();
     let isTabActor = addonActor.isWebExtension;
     openToolbox({form: addonActor, chrome: true, isTabActor});
   } else {
-    let response = yield gClient.getProcess();
+    let response = await gClient.getProcess();
     openToolbox({form: response.form, chrome: true});
   }
-});
+};
 
 // Certain options should be toggled since we can assume chrome debugging here
 function setPrefDefaults() {
   Services.prefs.setBoolPref("devtools.inspector.showUserAgentStyles", true);
   Services.prefs.setBoolPref("devtools.performance.ui.show-platform-data", true);
   Services.prefs.setBoolPref("devtools.inspector.showAllAnonymousContent", true);
   Services.prefs.setBoolPref("browser.dom.window.dump.enabled", true);
   Services.prefs.setBoolPref("devtools.command-button-noautohide.enabled", true);
   Services.prefs.setBoolPref("devtools.scratchpad.enabled", true);
   // Bug 1225160 - Using source maps with browser debugging can lead to a crash
   Services.prefs.setBoolPref("devtools.debugger.source-maps-enabled", false);
   Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", true);
   Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", false);
   Services.prefs.setBoolPref("devtools.preference.new-panel-enabled", false);
   Services.prefs.setBoolPref("layout.css.emulate-moz-box-with-flex", false);
 }
-window.addEventListener("load", function () {
+window.addEventListener("load", async function () {
   let cmdClose = document.getElementById("toolbox-cmd-close");
   cmdClose.addEventListener("command", onCloseCommand);
   setPrefDefaults();
-  connect().catch(e => {
+  try {
+    await connect();
+  } catch (e) {
     let errorMessageContainer = document.getElementById("error-message-container");
     let errorMessage = document.getElementById("error-message");
     errorMessage.value = e.message || e;
     errorMessageContainer.hidden = false;
     console.error(e);
-  });
+  }
 });
 
 function onCloseCommand(event) {
   window.close();
 }
 
-function openToolbox({ form, chrome, isTabActor }) {
+async function openToolbox({ form, chrome, isTabActor }) {
   let options = {
     form: form,
     client: gClient,
     chrome: chrome,
     isTabActor: isTabActor
   };
-  TargetFactory.forRemoteTab(options).then(target => {
-    let frame = document.getElementById("toolbox-iframe");
+  let target = await TargetFactory.forRemoteTab(options);
+  let frame = document.getElementById("toolbox-iframe");
 
-    // Remember the last panel that was used inside of this profile.
-    // But if we are testing, then it should always open the debugger panel.
-    let selectedTool =
-      Services.prefs.getCharPref("devtools.browsertoolbox.panel",
-        Services.prefs.getCharPref("devtools.toolbox.selectedTool",
-                                   "jsdebugger"));
+  // Remember the last panel that was used inside of this profile.
+  // But if we are testing, then it should always open the debugger panel.
+  let selectedTool =
+    Services.prefs.getCharPref("devtools.browsertoolbox.panel",
+      Services.prefs.getCharPref("devtools.toolbox.selectedTool",
+                                  "jsdebugger"));
 
-    options = { customIframe: frame };
-    gDevTools.showToolbox(target,
-                          selectedTool,
-                          Toolbox.HostType.CUSTOM,
-                          options)
-             .then(onNewToolbox);
-  });
+  options = { customIframe: frame };
+  let toolbox = await gDevTools.showToolbox(
+    target,
+    selectedTool,
+    Toolbox.HostType.CUSTOM,
+    options
+  );
+  onNewToolbox(toolbox);
 }
 
 function onNewToolbox(toolbox) {
   gToolbox = toolbox;
   bindToolboxHandlers();
   raise();
   let env = Components.classes["@mozilla.org/process/environment;1"]
     .getService(Components.interfaces.nsIEnvironment);
@@ -142,29 +144,28 @@ function onNewToolbox(toolbox) {
 function evaluateTestScript(script, toolbox) {
   let sandbox = Cu.Sandbox(window);
   sandbox.window = window;
   sandbox.toolbox = toolbox;
   sandbox.ChromeUtils = ChromeUtils;
   Cu.evalInSandbox(script, sandbox);
 }
 
-function bindToolboxHandlers() {
+async function bindToolboxHandlers() {
   gToolbox.once("destroyed", quitApp);
   window.addEventListener("unload", onUnload);
 
   if (Services.appinfo.OS == "Darwin") {
     // Badge the dock icon to differentiate this process from the main application
     // process.
     updateBadgeText(false);
 
     // Once the debugger panel opens listen for thread pause / resume.
-    gToolbox.getPanelWhenReady("jsdebugger").then(panel => {
-      setupThreadListeners(panel);
-    });
+    let panel = await gToolbox.getPanelWhenReady("jsdebugger");
+    setupThreadListeners(panel);
   }
 }
 
 function setupThreadListeners(panel) {
   updateBadgeText(panel.isPaused());
 
   let onPaused = updateBadgeText.bind(null, true);
   let onResumed = updateBadgeText.bind(null, false);