Bug 1032243 - about:newtab should use native Promise implementation r=adw

This commit is contained in:
Tim Taubert 2014-07-02 16:38:20 -07:00
parent 3413ceb06b
commit 59aa45bbe8
4 changed files with 32 additions and 35 deletions

View File

@ -13,7 +13,6 @@ Cu.import("resource://gre/modules/PageThumbs.jsm");
Cu.import("resource://gre/modules/BackgroundPageThumbs.jsm");
Cu.import("resource://gre/modules/DirectoryLinksProvider.jsm");
Cu.import("resource://gre/modules/NewTabUtils.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Rect",
"resource://gre/modules/Geometry.jsm");

View File

@ -179,19 +179,18 @@ let gTransformation = {
if (!aSite || aSite == gDrag.draggedSite)
return;
let deferred = Promise.defer();
batch.push(deferred.promise);
let cb = deferred.resolve;
if (!cells[aIndex])
// The site disappeared from the grid, hide it.
this.hideSite(aSite, cb);
else if (this._getNodeOpacity(aSite.node) != 1)
// The site disappeared before but is now back, show it.
this.showSite(aSite, cb);
else
// The site's position has changed, move it around.
this._moveSite(aSite, aIndex, {unfreeze: unfreeze, callback: cb});
batch.push(new Promise(resolve => {
if (!cells[aIndex]) {
// The site disappeared from the grid, hide it.
this.hideSite(aSite, resolve);
} else if (this._getNodeOpacity(aSite.node) != 1) {
// The site disappeared before but is now back, show it.
this.showSite(aSite, resolve);
} else {
// The site's position has changed, move it around.
this._moveSite(aSite, aIndex, {unfreeze: unfreeze, callback: resolve});
}
}));
}, this);
if (callback) {

View File

@ -134,17 +134,16 @@ let gUpdater = {
if (!aSite || aSites.indexOf(aSite) != -1)
return;
let deferred = Promise.defer();
batch.push(deferred.promise);
batch.push(new Promise(resolve => {
// Fade out the to-be-removed site.
gTransformation.hideSite(aSite, function () {
let node = aSite.node;
// Fade out the to-be-removed site.
gTransformation.hideSite(aSite, function () {
let node = aSite.node;
// Remove the site from the DOM.
node.parentNode.removeChild(node);
deferred.resolve();
});
// Remove the site from the DOM.
node.parentNode.removeChild(node);
resolve();
});
}));
});
Promise.all(batch).then(aCallback);
@ -164,19 +163,18 @@ let gUpdater = {
if (aSite || !aLinks[aIndex])
return;
let deferred = Promise.defer();
batch.push(deferred.promise);
batch.push(new Promise(resolve => {
// Create the new site and fade it in.
let site = gGrid.createSite(aLinks[aIndex], cells[aIndex]);
// Create the new site and fade it in.
let site = gGrid.createSite(aLinks[aIndex], cells[aIndex]);
// Set the site's initial opacity to zero.
site.node.style.opacity = 0;
// Set the site's initial opacity to zero.
site.node.style.opacity = 0;
// Flush all style changes for the dynamically inserted site to make
// the fade-in transition work.
window.getComputedStyle(site.node).opacity;
gTransformation.showSite(site, function () deferred.resolve());
// Flush all style changes for the dynamically inserted site to make
// the fade-in transition work.
window.getComputedStyle(site.node).opacity;
gTransformation.showSite(site, resolve);
}));
});
Promise.all(batch).then(aCallback);

View File

@ -47,6 +47,7 @@ function runTests() {
expected.action = "unpin";
expected.pinned = true;
yield EventUtils.synthesizeMouseAtCenter(pinButton, {}, getContentWindow());
yield whenPagesUpdated();
// Block the site in the 0th tile spot
let blockedSite = getCell(0).node.querySelector(".newtab-site");