Bug 1260718 - use plain promise in ScrollbarSampler.jsm; r?Gijs
MozReview-Commit-ID: 5DBKag1EgjA
--- 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);