зеркало из https://github.com/mozilla/gecko-dev.git
96 строки
2.6 KiB
HTML
96 строки
2.6 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=633602
|
|
|
|
Test DOM tree in full screen
|
|
-->
|
|
<head>
|
|
<title>Bug 633602 - file_DOMtree.html</title>
|
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.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>
|
|
<div id="outer"><div id="inner"></div></div>
|
|
<pre id="test">
|
|
<script type="text/javascript">
|
|
/*
|
|
* Test for Bug 633602
|
|
* Checks if pointer is unlocked when element is removed from
|
|
* the DOM Tree
|
|
*/
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var div = document.getElementById("div");
|
|
var outer = document.getElementById("outer");
|
|
var inner = document.getElementById("inner");
|
|
|
|
function listenOneDocEvent(type, handler) {
|
|
function callback(event) {
|
|
document.removeEventListener(type, callback);
|
|
SimpleTest.executeSoon(() => handler(event));
|
|
}
|
|
document.addEventListener(type, callback);
|
|
}
|
|
|
|
function checkPointerLockElement(elem) {
|
|
if (elem) {
|
|
is(document.pointerLockElement, elem,
|
|
`#${elem.id} should have locked the pointer`);
|
|
} else {
|
|
ok(!document.pointerLockElement, "Pointer should have been unlocked");
|
|
}
|
|
}
|
|
|
|
function start() {
|
|
addFullscreenChangeContinuation("enter", enteredFullscreen);
|
|
document.documentElement.requestFullscreen();
|
|
}
|
|
|
|
function enteredFullscreen() {
|
|
is(document.fullscreenElement, document.documentElement,
|
|
"Root element should have entered fullscreen");
|
|
listenOneDocEvent("pointerlockchange", lockedPointerOnDiv);
|
|
div.requestPointerLock();
|
|
}
|
|
|
|
function lockedPointerOnDiv() {
|
|
checkPointerLockElement(div);
|
|
listenOneDocEvent("pointerlockchange", unlockedPointerFromDiv);
|
|
document.body.removeChild(div);
|
|
}
|
|
|
|
function unlockedPointerFromDiv() {
|
|
checkPointerLockElement(null);
|
|
listenOneDocEvent("pointerlockchange", lockedPointerOnInner);
|
|
inner.requestPointerLock();
|
|
}
|
|
|
|
function lockedPointerOnInner() {
|
|
checkPointerLockElement(inner);
|
|
listenOneDocEvent("pointerlockchange", unlockedPointerFromInner);
|
|
document.body.removeChild(outer);
|
|
}
|
|
|
|
function unlockedPointerFromInner() {
|
|
checkPointerLockElement(null);
|
|
addFullscreenChangeContinuation("exit", exitedFullscreen);
|
|
document.exitFullscreen();
|
|
}
|
|
|
|
function exitedFullscreen() {
|
|
SimpleTest.finish();
|
|
}
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|