tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>