diff options
Diffstat (limited to '')
-rw-r--r-- | dom/tests/mochitest/pointerlock/file_screenClientXYConst.html | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/dom/tests/mochitest/pointerlock/file_screenClientXYConst.html b/dom/tests/mochitest/pointerlock/file_screenClientXYConst.html new file mode 100644 index 0000000000..31bd232a57 --- /dev/null +++ b/dom/tests/mochitest/pointerlock/file_screenClientXYConst.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=633602 +--> +<head> + <title>Bug 633602 - constantXY.html</title> + <script src="/tests/SimpleTest/SimpleTest.js"> + </script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <script type="application/javascript" src="pointerlock_utils.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> + <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=633602"> + Mozilla Bug 633602 + </a> + <div id="div"></div> + <script type="application/javascript"> + /* + * Test for Bug 633602 + * Confirm that screenX/Y and clientX/Y are constants when the pointer + * is locked. + */ + + SimpleTest.waitForExplicitFinish(); + SimpleTest.requestFlakyTimeout("We may need to wait for window's moving"); + + var div + , divRect + , unLockedCoords + , lockedCoords + , mouseMoveIntervalID + , isUnlocked = false + , isLocked = false; + + function runTests () { + ok(isUnlocked, "Pointer should be unlocked"); + ok(isLocked, "Pointer should be locked"); + + // Confirm that pointer coords are constant while locked + is(unLockedCoords.clientX, lockedCoords.clientX, + "clientX should be equal to where the mouse was originaly locked"); + is(unLockedCoords.clientY, lockedCoords.clientY, + "clientY should be equal to where the mouse was originaly locked"); + is(unLockedCoords.screenX, lockedCoords.screenX, + "screenX should be equal to where the mouse was originaly locked"); + is(unLockedCoords.screenY, lockedCoords.screenY, + "screenY should be equal to where the mouse was originaly locked"); + } + + function moveUnlocked(e) { + info("Got mousemove via moveUnlocked"); + clearInterval(mouseMoveIntervalID); + var firstCall = !unLockedCoords; + if (!firstCall) { + todo(false, "mousemove is fired twice."); + } + + unLockedCoords = { + screenX: e.screenX, + screenY: e.screenY, + clientX: e.clientX, + clientY: e.clientY + }; + + if (!firstCall) { + return; + } + + isUnlocked = !document.pointerLockElement; + div.requestPointerLock(); + } + + function moveLocked(e) { + info("Got mousemove via moveLocked"); + clearInterval(mouseMoveIntervalID); + div.removeEventListener("mousemove", moveLocked); + + isLocked = !!document.pointerLockElement; + lockedCoords = { + screenX: e.screenX, + screenY: e.screenY, + clientX: e.clientX, + clientY: e.clientY + }; + + addFullscreenChangeContinuation("exit", function() { + info("Got fullscreenchange for exiting"); + runTests(); + SimpleTest.finish(); + }); + document.exitFullscreen(); + } + + document.addEventListener("pointerlockchange", function (e) { + if (document.pointerLockElement === div) { + info("Got pointerlockchange for entering"); + div.removeEventListener("mousemove", moveUnlocked); + div.addEventListener("mousemove", moveLocked); + divRect = div.getBoundingClientRect(); + // Bug 1295815 + // Retrigger synthesizeNativeMouseEvent until it actually happens. + mouseMoveIntervalID = setInterval(() => { + synthesizeNativeMouseEvent({ + type: "mousemove", + target: div, + offsetX: (divRect.width / 4) * 3, + offsetY: (divRect.height / 4) * 3, + }); + }, 100); + } else { + info("Got pointerlockchange for exiting"); + } + }); + + function start() { + div = document.getElementById("div"); + info("Requesting fullscreen on parent"); + addFullscreenChangeContinuation("enter", async () => { + info("Got fullscreenchange for entering"); + await promiseNativeMouseEvent({ + type: "mousemove", + target: div, + offsetX: 0, + offsetY: 0, + }); + div.addEventListener("mousemove", moveUnlocked); + // Bug 1295815 + // Retrigger synthesizeNativeMouseEvent until it actually happens. + mouseMoveIntervalID = setInterval(() => { + synthesizeNativeMouseEvent({ + type: "mousemove", + target: div, + atCenter: true, + }); + }, 100); + }); + div.requestFullscreen(); + } + </script> +</body> +</html> |