file_removedFromDOM.html (2558B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=633602 5 6 Test DOM tree in full screen 7 --> 8 <head> 9 <title>Bug 633602 - file_DOMtree.html</title> 10 <script src="/tests/SimpleTest/EventUtils.js"></script> 11 <script src="/tests/SimpleTest/SimpleTest.js"></script> 12 <script type="application/javascript" src="pointerlock_utils.js"></script> 13 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 14 </head> 15 <body> 16 <a target="_blank" 17 href="https://bugzilla.mozilla.org/show_bug.cgi?id=633602"> 18 Mozilla Bug 633602 19 </a> 20 <div id="div"></div> 21 <div id="outer"><div id="inner"></div></div> 22 <pre id="test"> 23 <script type="text/javascript"> 24 /* 25 * Test for Bug 633602 26 * Checks if pointer is unlocked when element is removed from 27 * the DOM Tree 28 */ 29 30 SimpleTest.waitForExplicitFinish(); 31 32 var div = document.getElementById("div"); 33 var outer = document.getElementById("outer"); 34 var inner = document.getElementById("inner"); 35 36 function listenOneDocEvent(type, handler) { 37 function callback(event) { 38 document.removeEventListener(type, callback); 39 SimpleTest.executeSoon(() => handler(event)); 40 } 41 document.addEventListener(type, callback); 42 } 43 44 function checkPointerLockElement(elem) { 45 if (elem) { 46 is(document.pointerLockElement, elem, 47 `#${elem.id} should have locked the pointer`); 48 } else { 49 ok(!document.pointerLockElement, "Pointer should have been unlocked"); 50 } 51 } 52 53 function start() { 54 addFullscreenChangeContinuation("enter", enteredFullscreen); 55 document.documentElement.requestFullscreen(); 56 } 57 58 function enteredFullscreen() { 59 is(document.fullscreenElement, document.documentElement, 60 "Root element should have entered fullscreen"); 61 listenOneDocEvent("pointerlockchange", lockedPointerOnDiv); 62 div.requestPointerLock(); 63 } 64 65 function lockedPointerOnDiv() { 66 checkPointerLockElement(div); 67 listenOneDocEvent("pointerlockchange", unlockedPointerFromDiv); 68 document.body.removeChild(div); 69 } 70 71 function unlockedPointerFromDiv() { 72 checkPointerLockElement(null); 73 listenOneDocEvent("pointerlockchange", lockedPointerOnInner); 74 inner.requestPointerLock(); 75 } 76 77 function lockedPointerOnInner() { 78 checkPointerLockElement(inner); 79 listenOneDocEvent("pointerlockchange", unlockedPointerFromInner); 80 document.body.removeChild(outer); 81 } 82 83 function unlockedPointerFromInner() { 84 checkPointerLockElement(null); 85 addFullscreenChangeContinuation("exit", exitedFullscreen); 86 document.exitFullscreen(); 87 } 88 89 function exitedFullscreen() { 90 SimpleTest.finish(); 91 } 92 </script> 93 </pre> 94 </body> 95 </html>