fune/browser/components/customizableui/test/browser_947914_button_zoomReset.js
Emilio Cobos Álvarez e05d3b513e Bug 1612427 - Fix flaky browser_947914_button_zoomReset.js. r=Gijs
This is what I see when running the test:

console.log: Changing zoom for browser from 1 to 0.5
	set fullZoom@chrome://global/content/elements/browser-custom-element.js:812:19
	set fullZoom@chrome://browser/content/tabbrowser.js:526:7
	ZoomManager_setZoomForBrowser@chrome://global/content/viewZoomOverlay.js:60:7
	set zoom@chrome://global/content/viewZoomOverlay.js:49:10
	@chrome://mochitests/content/browser/browser/components/customizableui/test/browser_947914_button_zoomReset.js:26:5
	Async*Tester_execTest/<@chrome://mochikit/content/browser-test.js:1039:34
	Tester_execTest@chrome://mochikit/content/browser-test.js:1074:11
	nextTest/<@chrome://mochikit/content/browser-test.js:904:14
	SimpleTest.waitForFocus/waitForFocusInner/focusedOrLoaded/<@chrome://mochikit/content/tests/SimpleTest/SimpleTest.js:918:23

"FullZoomChange for browser"

PASS Zoom reset button exists in Panel Menu -

console.log: Changing zoom for browser from 0.5 to 1
	console.log: set fullZoom@chrome://global/content/elements/browser-custom-element.js:817:19
	ZoomManager_setZoomForBrowser@chrome://global/content/viewZoomOverlay.js:60:7
	FullZoom__applyPrefToZoom@chrome://browser/content/browser-fullZoom.js:479:19
	FullZoom_onLocationChange@chrome://browser/content/browser-fullZoom.js:247:14
	XWB_onUpdateCurrentBrowser@chrome://browser/content/browser.js:5419:16
	callListeners@chrome://browser/content/tabbrowser.js:820:31
	_callProgressListeners@chrome://browser/content/tabbrowser.js:834:22
	_callProgressListeners@chrome://browser/content/tabbrowser.js:5776:46
	onStateChange@chrome://browser/content/tabbrowser.js:6039:14
	_callProgressListeners@resource://gre/modules/RemoteWebProgress.jsm:75:31
	onStateChange@resource://gre/modules/RemoteWebProgress.jsm:88:10

Which is pretty broken (the zoom is reset way earlier than clicking the reset
button, by FullZoom.onLocationChange).

This seems to me was mostly passing by chance, but with my Fission changes
which made FullZoomChange events more async (and actually, not notify twice) it
started failing.

Wait to load a page before changing the zoom level so that the browser doesn't
reset it when navigating.

Differential Revision: https://phabricator.services.mozilla.com/D72208
2020-04-24 08:13:37 +00:00

75 lines
2.2 KiB
JavaScript

/* 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";
var initialPageZoom = ZoomManager.zoom;
add_task(async function() {
info("Check zoom reset button existence and functionality");
is(initialPageZoom, 1, "Page zoom reset correctly");
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "http://example.com", waitForLoad: true },
async function(browser) {
CustomizableUI.addWidgetToArea(
"zoom-controls",
CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
);
registerCleanupFunction(() => CustomizableUI.reset());
CustomizableUI.addWidgetToArea(
"zoom-controls",
CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
);
await waitForOverflowButtonShown();
{
let zoomChange = BrowserTestUtils.waitForEvent(
gBrowser,
"FullZoomChange"
);
ZoomManager.zoom = 0.5;
await zoomChange;
}
await document.getElementById("nav-bar").overflowable.show();
info("Menu panel was opened");
let zoomResetButton = document.getElementById("zoom-reset-button");
ok(zoomResetButton, "Zoom reset button exists in Panel Menu");
let zoomChange = BrowserTestUtils.waitForEvent(
gBrowser,
"FullZoomChange"
);
zoomResetButton.click();
await zoomChange;
let pageZoomLevel = Math.floor(ZoomManager.zoom * 100);
let expectedZoomLevel = 100;
let buttonZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10);
is(pageZoomLevel, expectedZoomLevel, "Page zoom reset correctly");
is(
pageZoomLevel,
buttonZoomLevel,
"Button displays the correct zoom level"
);
// close the panel
let panelHiddenPromise = promiseOverflowHidden(window);
document.getElementById("widget-overflow").hidePopup();
await panelHiddenPromise;
info("Menu panel was closed");
}
);
});
add_task(async function asyncCleanup() {
// reset zoom level
ZoomManager.zoom = initialPageZoom;
info("Zoom level was restored");
});