Bug 1354883 - convert uses of 'defer' to 'new Promise' in client/canvasdebugger draft
authorMichael Kohler <mkohler@picobudget.com>
Sun, 09 Apr 2017 13:21:07 +0200
changeset 559279 339b114784e0c4efea528954922b0cf099a7c2fa
parent 558673 35c7be9c2db288d1d449e3cc586c4164d642c5fd
child 623345 04c78678c244ca1a139fa5eab07899bb552df879
push id53039
push userbmo:me@michaelkohler.info
push dateSun, 09 Apr 2017 11:21:48 +0000
bugs1354883
milestone55.0a1
Bug 1354883 - convert uses of 'defer' to 'new Promise' in client/canvasdebugger MozReview-Commit-ID: 8mVRs0v6CKu
devtools/client/canvasdebugger/canvasdebugger.js
devtools/client/canvasdebugger/panel.js
devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-02.js
devtools/client/canvasdebugger/test/head.js
--- a/devtools/client/canvasdebugger/canvasdebugger.js
+++ b/devtools/client/canvasdebugger/canvasdebugger.js
@@ -3,17 +3,16 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
 const { SideMenuWidget } = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
-const promise = require("promise");
 const Services = require("Services");
 const EventEmitter = require("devtools/shared/event-emitter");
 const { CallWatcherFront } = require("devtools/shared/fronts/call-watcher");
 const { CanvasFront } = require("devtools/shared/fronts/canvas");
 const DevToolsUtils = require("devtools/shared/DevToolsUtils");
 const flags = require("devtools/shared/flags");
 const { LocalizationHelper } = require("devtools/shared/l10n");
 const { PluralForm } = require("devtools/shared/plural-form");
@@ -96,28 +95,28 @@ const CALLS_LIST_SLOW_SAVE_DELAY = 100; 
  * The current target and the Canvas front, set by this tool's host.
  */
 var gToolbox, gTarget, gFront;
 
 /**
  * Initializes the canvas debugger controller and views.
  */
 function startupCanvasDebugger() {
-  return promise.all([
+  return Promise.all([
     EventsHandler.initialize(),
     SnapshotsListView.initialize(),
     CallsListView.initialize()
   ]);
 }
 
 /**
  * Destroys the canvas debugger controller and views.
  */
 function shutdownCanvasDebugger() {
-  return promise.all([
+  return Promise.all([
     EventsHandler.destroy(),
     SnapshotsListView.destroy(),
     CallsListView.destroy()
   ]);
 }
 
 /**
  * Functions handling target-related lifetime events.
--- a/devtools/client/canvasdebugger/panel.js
+++ b/devtools/client/canvasdebugger/panel.js
@@ -1,17 +1,16 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* 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/. */
 "use strict";
 
 const { Cc, Ci, Cu, Cr } = require("chrome");
-const promise = require("promise");
 const EventEmitter = require("devtools/shared/event-emitter");
 const { CanvasFront } = require("devtools/shared/fronts/canvas");
 const DevToolsUtils = require("devtools/shared/DevToolsUtils");
 
 function CanvasDebuggerPanel(iframeWindow, toolbox) {
   this.panelWin = iframeWindow;
   this._toolbox = toolbox;
   this._destroyer = null;
@@ -30,17 +29,17 @@ CanvasDebuggerPanel.prototype = {
    */
   open: function () {
     let targetPromise;
 
     // Local debugging needs to make the target remote.
     if (!this.target.isRemote) {
       targetPromise = this.target.makeRemote();
     } else {
-      targetPromise = promise.resolve(this.target);
+      targetPromise = Promise.resolve(this.target);
     }
 
     return targetPromise
       .then(() => {
         this.panelWin.gToolbox = this._toolbox;
         this.panelWin.gTarget = this.target;
         this.panelWin.gFront = new CanvasFront(this.target.client, this.target.form);
         return this.panelWin.startupCanvasDebugger();
--- a/devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-02.js
+++ b/devtools/client/canvasdebugger/test/browser_canvas-frontend-slider-02.js
@@ -74,19 +74,19 @@ function* ifTestingSupported() {
   yield once(window, EVENTS.CALL_SCREENSHOT_DISPLAYED);
   ok(true, "The full-sized screenshot was displayed for the item at index 0.");
 
   yield teardown(panel);
   finish();
 }
 
 function waitForMozSetImageElement(panel) {
-  let deferred = promise.defer();
-  panel._onMozSetImageElement = deferred.resolve;
-  return deferred.promise;
+  return new Promise((resolve, reject) => {
+    panel._onMozSetImageElement = resolve;
+  });
 }
 
 function sameArray(a, b) {
   if (a.length != b.length) {
     return false;
   }
   for (let i = 0; i < a.length; i++) {
     if (a[i] !== b[i]) {
--- a/devtools/client/canvasdebugger/test/head.js
+++ b/devtools/client/canvasdebugger/test/head.js
@@ -3,17 +3,16 @@
 "use strict";
 
 var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 var { generateUUID } = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
 var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
 
 var Services = require("Services");
-var promise = require("promise");
 var { gDevTools } = require("devtools/client/framework/devtools");
 var { DebuggerClient } = require("devtools/shared/client/main");
 var { DebuggerServer } = require("devtools/server/main");
 var { CallWatcherFront } = require("devtools/shared/fronts/call-watcher");
 var { CanvasFront } = require("devtools/shared/fronts/canvas");
 var { setTimeout } = require("sdk/timers");
 var DevToolsUtils = require("devtools/shared/DevToolsUtils");
 var flags = require("devtools/shared/flags");
@@ -68,48 +67,47 @@ registerCleanupFunction(() => {
 function loadFrameScripts() {
   mm = gBrowser.selectedBrowser.messageManager;
   mm.loadFrameScript(FRAME_SCRIPT_UTILS_URL, false);
 }
 
 function addTab(aUrl, aWindow) {
   info("Adding tab: " + aUrl);
 
-  let deferred = promise.defer();
   let targetWindow = aWindow || window;
   let targetBrowser = targetWindow.gBrowser;
 
   targetWindow.focus();
   let tab = targetBrowser.selectedTab = targetBrowser.addTab(aUrl);
   let linkedBrowser = tab.linkedBrowser;
 
-  BrowserTestUtils.browserLoaded(linkedBrowser)
-    .then(function () {
-      info("Tab added and finished loading: " + aUrl);
-      deferred.resolve(tab);
-    });
-
-  return deferred.promise;
+  return new Promise((resolve, reject) => {
+    BrowserTestUtils.browserLoaded(linkedBrowser)
+      .then(function () {
+        info("Tab added and finished loading: " + aUrl);
+        resolve(tab);
+      });
+  });
 }
 
 function removeTab(aTab, aWindow) {
   info("Removing tab.");
 
-  let deferred = promise.defer();
   let targetWindow = aWindow || window;
   let targetBrowser = targetWindow.gBrowser;
   let tabContainer = targetBrowser.tabContainer;
 
-  tabContainer.addEventListener("TabClose", function (aEvent) {
-    info("Tab removed and finished closing.");
-    deferred.resolve();
-  }, {once: true});
+  return new Promise((resolve, reject) => {
+    tabContainer.addEventListener("TabClose", function (aEvent) {
+      info("Tab removed and finished closing.");
+      resolve();
+    }, {once: true});
 
-  targetBrowser.removeTab(aTab);
-  return deferred.promise;
+    targetBrowser.removeTab(aTab);
+  });
 }
 
 function handleError(aError) {
   ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
   finish();
 }
 
 var gRequiresWebGL = false;
@@ -144,40 +142,38 @@ function isTestingSupported() {
   info("This test requires WebGL support.");
   info("Apparently, WebGL is" + (supported ? "" : " not") + " supported.");
   return supported;
 }
 
 function once(aTarget, aEventName, aUseCapture = false) {
   info("Waiting for event: '" + aEventName + "' on " + aTarget + ".");
 
-  let deferred = promise.defer();
-
-  for (let [add, remove] of [
-    ["on", "off"], // Use event emitter before DOM events for consistency
-    ["addEventListener", "removeEventListener"],
-    ["addListener", "removeListener"]
-  ]) {
-    if ((add in aTarget) && (remove in aTarget)) {
-      aTarget[add](aEventName, function onEvent(...aArgs) {
-        info("Got event: '" + aEventName + "' on " + aTarget + ".");
-        aTarget[remove](aEventName, onEvent, aUseCapture);
-        deferred.resolve(...aArgs);
-      }, aUseCapture);
-      break;
+  return new Promise((resolve, reject) => {
+    for (let [add, remove] of [
+      ["on", "off"], // Use event emitter before DOM events for consistency
+      ["addEventListener", "removeEventListener"],
+      ["addListener", "removeListener"]
+    ]) {
+      if ((add in aTarget) && (remove in aTarget)) {
+        aTarget[add](aEventName, function onEvent(...aArgs) {
+          info("Got event: '" + aEventName + "' on " + aTarget + ".");
+          aTarget[remove](aEventName, onEvent, aUseCapture);
+          resolve(...aArgs);
+        }, aUseCapture);
+        break;
+      }
     }
-  }
-
-  return deferred.promise;
+  });
 }
 
 function waitForTick() {
-  let deferred = promise.defer();
-  executeSoon(deferred.resolve);
-  return deferred.promise;
+  return new Promise((resolve, reject) => {
+    executeSoon(resolve);
+  });
 }
 
 function navigateInHistory(aTarget, aDirection, aWaitForTargetEvent = "navigate") {
   executeSoon(() => content.history[aDirection]());
   return once(aTarget, aWaitForTargetEvent);
 }
 
 function navigate(aTarget, aUrl, aWaitForTargetEvent = "navigate") {
@@ -252,36 +248,34 @@ function teardown({target}) {
   });
 }
 
 /**
  * Takes a string `script` and evaluates it directly in the content
  * in potentially a different process.
  */
 function evalInDebuggee(script) {
-  let deferred = promise.defer();
-
   if (!mm) {
     throw new Error("`loadFrameScripts()` must be called when using MessageManager.");
   }
 
-  let id = generateUUID().toString();
-  mm.sendAsyncMessage("devtools:test:eval", { script: script, id: id });
-  mm.addMessageListener("devtools:test:eval:response", handler);
+  return new Promise((resolve, reject) => {
+    let id = generateUUID().toString();
+    mm.sendAsyncMessage("devtools:test:eval", { script: script, id: id });
+    mm.addMessageListener("devtools:test:eval:response", handler);
 
-  function handler({ data }) {
-    if (id !== data.id) {
-      return;
-    }
+    function handler({ data }) {
+      if (id !== data.id) {
+        return;
+      }
 
-    mm.removeMessageListener("devtools:test:eval:response", handler);
-    deferred.resolve(data.value);
-  }
-
-  return deferred.promise;
+      mm.removeMessageListener("devtools:test:eval:response", handler);
+      resolve(data.value);
+    }
+  });
 }
 
 function getSourceActor(aSources, aURL) {
   let item = aSources.getItemForAttachment(a => a.source.url === aURL);
   return item ? item.value : null;
 }
 
 /**
@@ -291,14 +285,15 @@ function getSourceActor(aSources, aURL) 
  *        Invoked once in a while until it returns true.
  * @param number interval [optional]
  *        How often the predicate is invoked, in milliseconds.
  */
 function* waitUntil(predicate, interval = 10) {
   if (yield predicate()) {
     return Promise.resolve(true);
   }
-  let deferred = Promise.defer();
-  setTimeout(function () {
-    waitUntil(predicate).then(() => deferred.resolve(true));
-  }, interval);
-  return deferred.promise;
+
+  return new Promise((resolve, reject) => {
+    setTimeout(function () {
+      waitUntil(predicate).then(() => resolve(true));
+    }, interval);
+  });
 }