/* 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; const kTimeoutInMS = 20000; async function testZoomButtonAppearsAndDisappearsBasedOnZoomChanges( zoomEventType ) { let tab = await BrowserTestUtils.openNewForegroundTab({ gBrowser, opening: "https://example.com/", waitForStateStop: true, }); info("Running this test with " + zoomEventType.substring(0, 9)); info("Confirm whether the browser zoom is set to the default level"); is(initialPageZoom, 1, "Page zoom is set to default (100%)"); let zoomResetButton = document.getElementById("urlbar-zoom-button"); is(zoomResetButton.hidden, true, "Zoom reset button is currently hidden"); info("Change zoom and confirm zoom button appears"); let labelUpdatePromise = BrowserTestUtils.waitForAttribute( "label", zoomResetButton ); FullZoom.enlarge(); await labelUpdatePromise; info("Zoom increased to " + Math.floor(ZoomManager.zoom * 100) + "%"); is(zoomResetButton.hidden, false, "Zoom reset button is now visible"); let pageZoomLevel = Math.floor(ZoomManager.zoom * 100); let expectedZoomLevel = 110; let buttonZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10); is( buttonZoomLevel, expectedZoomLevel, "Button label updated successfully to " + Math.floor(ZoomManager.zoom * 100) + "%" ); let zoomResetPromise = BrowserTestUtils.waitForEvent(window, zoomEventType); zoomResetButton.click(); await zoomResetPromise; pageZoomLevel = Math.floor(ZoomManager.zoom * 100); expectedZoomLevel = 100; is( pageZoomLevel, expectedZoomLevel, "Clicking zoom button successfully resets browser zoom to 100%" ); is(zoomResetButton.hidden, true, "Zoom reset button returns to being hidden"); BrowserTestUtils.removeTab(tab); } add_task(async function () { await testZoomButtonAppearsAndDisappearsBasedOnZoomChanges("FullZoomChange"); await SpecialPowers.pushPrefEnv({ set: [["browser.zoom.full", false]] }); await testZoomButtonAppearsAndDisappearsBasedOnZoomChanges("TextZoomChange"); await SpecialPowers.pushPrefEnv({ set: [["browser.zoom.full", true]] }); }); add_task(async function () { info( "Confirm that URL bar zoom button doesn't appear when customizable zoom widget is added to toolbar" ); CustomizableUI.addWidgetToArea("zoom-controls", CustomizableUI.AREA_NAVBAR); let zoomCustomizableWidget = document.getElementById("zoom-reset-button"); let zoomResetButton = document.getElementById("urlbar-zoom-button"); let zoomChangePromise = BrowserTestUtils.waitForEvent( window, "FullZoomChange" ); FullZoom.enlarge(); await zoomChangePromise; is( zoomResetButton.hidden, true, "URL zoom button remains hidden despite zoom increase" ); is( parseInt(zoomCustomizableWidget.label, 10), 110, "Customizable zoom widget's label has updated to " + zoomCustomizableWidget.label ); }); add_task(async function asyncCleanup() { // reset zoom level and customizable widget ZoomManager.zoom = initialPageZoom; is(ZoomManager.zoom, 1, "Zoom level was restored"); if (document.getElementById("zoom-controls")) { CustomizableUI.removeWidgetFromArea( "zoom-controls", CustomizableUI.AREA_NAVBAR ); ok( !document.getElementById("zoom-controls"), "Customizable zoom widget removed from toolbar" ); } });