Bug 1260718 - use plain promise in ScrollbarSampler.jsm; r?Gijs draft
authorgasolin <gasolin@gmail.com>
Wed, 06 Apr 2016 14:32:24 +0800
changeset 347937 466b29236e1f23f00f3fbbd1b4c1df244cf7fe6d
parent 347936 73e5e6bcd702fd1d057bba19d91ced93ef70456a
child 517743 1d217844fb87237e72f484be983e0e73608963e0
push id14707
push userbmo:gasolin@mozilla.com
push dateWed, 06 Apr 2016 06:33:00 +0000
reviewersGijs
bugs1260718
milestone48.0a1
Bug 1260718 - use plain promise in ScrollbarSampler.jsm; r?Gijs MozReview-Commit-ID: 5DBKag1EgjA
browser/components/customizableui/ScrollbarSampler.jsm
--- a/browser/components/customizableui/ScrollbarSampler.jsm
+++ b/browser/components/customizableui/ScrollbarSampler.jsm
@@ -5,66 +5,64 @@
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["ScrollbarSampler"];
 
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Promise",
-                                  "resource://gre/modules/Promise.jsm");
 
 var gSystemScrollbarWidth = null;
 
 this.ScrollbarSampler = {
   getSystemScrollbarWidth: function() {
-    let deferred = Promise.defer();
+    let deferred = new Promise(resolve => {
+      if (gSystemScrollbarWidth !== null) {
+        resolve(gSystemScrollbarWidth);
+        return deferred;
+      }
 
-    if (gSystemScrollbarWidth !== null) {
-      deferred.resolve(gSystemScrollbarWidth);
-      return deferred.promise;
-    }
+      this._sampleSystemScrollbarWidth().then(function(systemScrollbarWidth) {
+        gSystemScrollbarWidth = systemScrollbarWidth;
+        resolve(gSystemScrollbarWidth);
+      });
+    }).catch(err => log.error("fail to getSystemScrollbarWidth: " + err));
 
-    this._sampleSystemScrollbarWidth().then(function(systemScrollbarWidth) {
-      gSystemScrollbarWidth = systemScrollbarWidth;
-      deferred.resolve(gSystemScrollbarWidth);
-    });
-    return deferred.promise;
+    return deferred;
   },
 
   resetSystemScrollbarWidth: function() {
     gSystemScrollbarWidth = null;
   },
 
   _sampleSystemScrollbarWidth: function() {
-    let deferred = Promise.defer();
     let hwin = Services.appShell.hiddenDOMWindow;
     let hdoc = hwin.document.documentElement;
     let iframe = hwin.document.createElementNS("http://www.w3.org/1999/xhtml",
                                                "html:iframe");
     iframe.setAttribute("srcdoc", '<body style="overflow-y: scroll"></body>');
     hdoc.appendChild(iframe);
 
     let cwindow = iframe.contentWindow;
     let utils = cwindow.QueryInterface(Ci.nsIInterfaceRequestor)
                        .getInterface(Ci.nsIDOMWindowUtils);
 
-    cwindow.addEventListener("load", function onLoad(aEvent) {
-      cwindow.removeEventListener("load", onLoad);
-      let sbWidth = {};
-      try {
-        utils.getScrollbarSize(true, sbWidth, {});
-      } catch(e) {
-        Cu.reportError("Could not sample scrollbar size: " + e + " -- " +
-                       e.stack);
-        sbWidth.value = 0;
-      }
-      // Minimum width of 10 so that we have enough padding:
-      sbWidth.value = Math.max(sbWidth.value, 10);
-      deferred.resolve(sbWidth.value);
-      iframe.remove();
-    });
-
-    return deferred.promise;
+    return new Promise(resolve => {
+      cwindow.addEventListener("load", function onLoad(aEvent) {
+        cwindow.removeEventListener("load", onLoad);
+        let sbWidth = {};
+        try {
+          utils.getScrollbarSize(true, sbWidth, {});
+        } catch(e) {
+          Cu.reportError("Could not sample scrollbar size: " + e + " -- " +
+                         e.stack);
+          sbWidth.value = 0;
+        }
+        // Minimum width of 10 so that we have enough padding:
+        sbWidth.value = Math.max(sbWidth.value, 10);
+        resolve(sbWidth.value);
+        iframe.remove();
+      });
+    }).catch(err => log.error("fail to _sampleSystemScrollbarWidth: " + err));
   }
 };
 Object.freeze(this.ScrollbarSampler);