diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /widget/tests/test_sizemode_events.xhtml | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'widget/tests/test_sizemode_events.xhtml')
-rw-r--r-- | widget/tests/test_sizemode_events.xhtml | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/widget/tests/test_sizemode_events.xhtml b/widget/tests/test_sizemode_events.xhtml new file mode 100644 index 0000000000..bd1e3a38d1 --- /dev/null +++ b/widget/tests/test_sizemode_events.xhtml @@ -0,0 +1,148 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window title="Test for bug 715867" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" /> + +<body xmlns="http://www.w3.org/1999/xhtml"> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +</body> + +<script class="testbody"> +<![CDATA[ + +const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +let gWindow = null; + +const kIsLinux = navigator.platform.includes("Lin"); +const kIsMacOS = navigator.platform.includes("Mac"); +// On Linux and macOS sizemode changes might be async. +const kAsyncChanges = kIsLinux || kIsMacOS; + +let gSizeModeDidChange = false; +let gSizeModeDidChangeTo = 0; + +function sizemodeChanged(e) { + gSizeModeDidChange = true; + gSizeModeDidChangeTo = gWindow.windowState; +} + +async function expectSizeModeChange(newMode, duringActionCallback) { + gSizeModeDidChange = false; + + let promise = null; + if (kAsyncChanges) { + if (newMode) { + promise = new Promise(resolve => { + gWindow.addEventListener("sizemodechange", function() { + SimpleTest.executeSoon(resolve); + }, { once: true }) + }); + } else { + promise = new Promise(SimpleTest.executeSoon); + } + } + + duringActionCallback(); + + if (promise) { + await promise; + } + + if (newMode == 0) { + // No change should have taken place, no event should have fired. + ok(!gSizeModeDidChange, "No sizemodechange event should have fired."); + } else { + // Size mode change event was expected to fire. + ok(gSizeModeDidChange, "A sizemodechanged event should have fired."); + is(gSizeModeDidChangeTo, newMode, "The new sizemode should have the expected value."); + const expectedHidden = newMode == gWindow.STATE_MINIMIZED || gWindow.isFullyOccluded; + if (gWindow.document.hidden != expectedHidden) { + await new Promise(resolve => { + gWindow.addEventListener("visibilitychange", resolve, { once: true }); + }); + } + is(gWindow.document.hidden, expectedHidden, "Should be inactive if minimized or occluded."); + } +} + +function startTest() { + openWindow(); +} + +function openWindow() { + gWindow = window.browsingContext.topChromeWindow + .open('empty_window.xhtml', '_blank', 'chrome,screenX=50,screenY=50,width=200,height=200,resizable'); + SimpleTest.waitForFocus(runTest, gWindow); +} + +async function runTest() { + // Install event handler. + gWindow.addEventListener("sizemodechange", sizemodeChanged); + + // Run tests. + info("Testing minimize()"); + await expectSizeModeChange(gWindow.STATE_MINIMIZED, function () { + gWindow.minimize(); + }); + + info("Testing restore() after minimize()"); + await expectSizeModeChange(gWindow.STATE_NORMAL, function () { + gWindow.restore(); + }); + + info("Testing maximize()"); + await expectSizeModeChange(gWindow.STATE_MAXIMIZED, function () { + gWindow.maximize(); + }); + + info("Testing restore() after maximize()"); + await expectSizeModeChange(gWindow.STATE_NORMAL, function () { + gWindow.restore(); + }); + + // Normal window resizing shouldn't fire a sizemodechanged event, bug 715867. + info("Testing resizeTo() horizontal"); + await expectSizeModeChange(0, function () { + gWindow.resizeTo(gWindow.outerWidth + 10, gWindow.outerHeight); + }); + + info("Testing resizeTo() vertical"); + await expectSizeModeChange(0, function () { + gWindow.resizeTo(gWindow.outerWidth, gWindow.outerHeight + 10); + }); + + // Resizing a maximized window should change to normal sizemode. + info("maximize() in preparation for resize"); + await expectSizeModeChange(gWindow.STATE_MAXIMIZED, function () { + gWindow.maximize(); + }); + + info("Testing resizeTo() from maximized"); + await expectSizeModeChange(gWindow.STATE_NORMAL, function () { + // MacOS treats windows close to the available screen size as maximized. + // Shrinking the window by only 10px isn't enough to change the sizemode. + gWindow.resizeTo(gWindow.outerWidth / 2, gWindow.outerHeight / 2); + }); + + gWindow.removeEventListener("sizemodechange", sizemodeChanged); + gWindow.close(); + SimpleTest.finish(); +} + +SimpleTest.waitForExplicitFinish(); +SimpleTest.waitForFocus(startTest); + +]]> +</script> + +</window> |