Bug 1272800: Wait for zoom event after switching tab if current value is not as expected. r=me
MozReview-Commit-ID: 4GtQMLOLZNP
--- a/browser/components/extensions/test/browser/browser_ext_tabs_zoom.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_zoom.js
@@ -45,16 +45,37 @@ add_task(function* () {
let eventPromises = [];
browser.tabs.onZoomChange.addListener(info => {
zoomEvents.push(info);
if (eventPromises.length) {
eventPromises.shift().resolve();
}
});
+ let awaitZoom = (tabId, newValue) => {
+ let listener;
+
+ return new Promise(resolve => {
+ listener = info => {
+ if (info.tabId == tabId && info.newZoomFactor == newValue) {
+ resolve();
+ }
+ };
+ browser.tabs.onZoomChange.addListener(listener);
+
+ browser.tabs.getZoom(tabId).then(zoomFactor => {
+ if (zoomFactor == newValue) {
+ resolve();
+ }
+ });
+ }).then(() => {
+ browser.tabs.onZoomChange.removeListener(listener);
+ });
+ };
+
let checkZoom = (tabId, newValue, oldValue = null) => {
let awaitEvent;
if (oldValue != null && !zoomEvents.length) {
awaitEvent = new Promise(resolve => {
eventPromises.push({resolve});
});
}
@@ -113,19 +134,20 @@ add_task(function* () {
return checkZoom(tabIds[1], 2, 1);
}).then(() => {
browser.test.log(`Update zoom in tab 2, expect changes in both tabs`);
return browser.tabs.setZoom(tabIds[1], 1.5);
}).then(() => {
return checkZoom(tabIds[1], 1.5, 2);
}).then(() => {
browser.test.log(`Switch to tab 1, expect asynchronous zoom change just after the switch`);
- return browser.tabs.update(tabIds[0], {active: true});
- }).then(() => {
- return new Promise(resolve => setTimeout(resolve, 0));
+ return Promise.all([
+ awaitZoom(tabIds[0], 1.5),
+ browser.tabs.update(tabIds[0], {active: true}),
+ ]);
}).then(() => {
return checkZoom(tabIds[0], 1.5, 2);
}).then(() => {
browser.test.log("Set zoom to 0, expect it set to 1");
return browser.tabs.setZoom(tabIds[0], 0);
}).then(() => {
return checkZoom(tabIds[0], 1, 1.5);
}).then(() => {