gecko-dev/layout/forms/test/test_bug665540.html

134 lines
4.0 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=665540
-->
<head>
<title>Test for Bug 665540 Select dropdown position in fullscreen window</title>
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
</head>
<body onload="openFullscreenWindow()">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=665540">Mozilla Bug 665540</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 665540 **/
SimpleTest.waitForExplicitFinish();
var win;
var select;
var optiona;
var eventType = "mouseover";
var timeoutID;
var eventOffsetX = 2;
var eventOffsetY = 2;
let sizemodeChanged = false;
let fullscreenChanged = false;
let childHasFocused = false;
function openFullscreenWindow() {
win = window.browsingContext.topChromeWindow
.openDialog("bug665540_window.xhtml", "_blank", "resizable=yes,chrome");
win.addEventListener("sizemodechange", () => {
info("sizemodechange. windowState = " + win.windowState + " fullScreen = " + win.fullScreen);
sizemodeChanged = true;
tryStart();
}, { once: true });
win.addEventListener("fullscreen", () => {
info("fullscreen event. windowState = " + win.windowState + " fullScreen = " + win.fullScreen);
fullscreenChanged = true;
tryStart();
}, { once: true });
SimpleTest.waitForFocus(() => {
win.fullScreen = true;
}, win);
// Close our window if the test times out so that it doesn't interfere
// with later tests.
timeoutID = setTimeout(function () {
ok(false, "Test timed out.");
// Provide some time for a screenshot
setTimeout(finish, 1000);
}, 20000);
}
function tryStart() {
// wait until the window goes full screen and its size mode actually changes.
if (!sizemodeChanged || !fullscreenChanged) {
return;
}
SimpleTest.waitForFocus(start, win);
}
function start() {
// The select doesn't open if the mouse click is fired too soon
// (on X11 at least).
setTimeout(openSelect, 1000);
}
function openSelect() {
select = win.document.getElementById("select");
synthesizeMouseAtCenter(select, {}, win);
// A yield was required on X11 tinderbox machines.
// (Wasn't required on other platforms nor on an X11 system with kwin.)
setTimeout(checkPosition, 1000);
}
function checkPosition() {
optiona = win.document.getElementById("optiona");
optiona.addEventListener(eventType, eventReceived);
// If the select dropdown is opened in the position where
// getBoundingClientRect() predicts, then optiona will receive the event.
// The event is received asynchronously (I don't know why), so the handler
// is removed later.
synthesizeMouse(optiona, eventOffsetX, eventOffsetY,
{ type: eventType }, win);
}
function eventReceived(event) {
clearTimeout(timeoutID);
optiona.removeEventListener(eventType, eventReceived);
var rect = optiona.getBoundingClientRect();
// Note that fullscreen only fully covers one monitor, so win.screenX can
// be non-zero.
is(event.screenX, win.screenX + rect.left + eventOffsetX,
"event.screenX should match sent event");
is(event.screenY, win.screenY + rect.top + eventOffsetY,
"event.screenY should match sent event");
finish();
}
function finish() {
if (select && navigator.platform.includes("Win")) {
todo(false,
"Should not have to close select before closing its window");
// This avoids mochitest "Unable to restore focus" errors (bug 670053).
synthesizeMouseAtCenter(select, {}, win);
}
is(win.windowState, win.STATE_FULLSCREEN,
"window state should still be fullscreen");
win.close();
SimpleTest.finish();
}
</script>
</pre>
</body>
</html>