file_pointerlock-api.html (3651B)
1 <!DOCTYPE HTML> 2 <html> 3 <!--https://bugzilla.mozilla.org/show_bug.cgi?id=633602--> 4 <head> 5 <title>Bug 633602</title> 6 <script src="/tests/SimpleTest/EventUtils.js"> 7 </script> 8 <script src="/tests/SimpleTest/SimpleTest.js"> 9 </script> 10 <script type="application/javascript" src="pointerlock_utils.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 12 </head> 13 <body> 14 <a target="_blank" 15 href="https://bugzilla.mozilla.org/show_bug.cgi?id=633602"> 16 Mozilla Bug 633602 17 </a> 18 <div id="div"></div> 19 <pre id="test"> 20 <script type="text/javascript"> 21 /* 22 * Test for Bug 633602 23 * Make sure DOM API is correct. 24 */ 25 26 SimpleTest.waitForExplicitFinish(); 27 28 var div, 29 hasRequestPointerLock = false, 30 pointerLockChangeEventFired = false, 31 pointerUnlocked = false, 32 pointerLocked = false, 33 hasExitPointerLock = false, 34 pointerLockElement = false, 35 hasMovementX = false, 36 hasMovementY = false; 37 gotContextMenuEvent = false; 38 39 function runTests () { 40 ok(hasRequestPointerLock, "Element should have requestPointerLock."); 41 ok(pointerLockChangeEventFired, "pointerlockchange event should fire."); 42 ok(pointerUnlocked, "Should be able to unlock pointer locked element."); 43 ok(pointerLocked, "Requested element should be able to lock."); 44 ok(hasExitPointerLock, "Document should have exitPointerLock"); 45 ok(pointerLockElement, "Document should keep track of correct pointer locked element"); 46 ok(hasMovementX, "Mouse Event should have movementX."); 47 ok(hasMovementY, "Mouse Event should have movementY."); 48 ok(!gotContextMenuEvent, "Shouldn't have got a contextmenu event."); 49 } 50 51 function mouseMoveHandler(e) { 52 info("Got mousemove"); 53 document.removeEventListener("mousemove", mouseMoveHandler); 54 55 hasMovementX = "movementX" in e; 56 hasMovementY = "movementY" in e; 57 58 hasExitPointerLock = "exitPointerLock" in document; 59 document.exitPointerLock(); 60 } 61 62 document.addEventListener("pointerlockchange", function (e) { 63 pointerLockChangeEventFired = true; 64 65 if (document.pointerLockElement) { 66 info("Got pointerlockchange for entering"); 67 pointerLocked = true; 68 pointerLockElement = document.pointerLockElement === div; 69 70 window.addEventListener("contextmenu", 71 function() { gotContextMenuEvent = true; }, 72 true); 73 synthesizeMouse(document.body, 4, 4, 74 { type: "contextmenu", button: 2 }, 75 window); 76 77 document.addEventListener("mousemove", mouseMoveHandler); 78 synthesizeMouseAtCenter(div, {type: "mousemove"}, window); 79 } else { 80 info("Got pointerlockchange for exiting"); 81 pointerUnlocked = true; 82 addFullscreenChangeContinuation("exit", function() { 83 info("Got fullscreenchange for exiting"); 84 runTests(); 85 SimpleTest.finish(); 86 }); 87 document.exitFullscreen(); 88 } 89 }); 90 91 function start() { 92 div = document.getElementById("div"); 93 info("Requesting fullscreen on parent"); 94 addFullscreenChangeContinuation("enter", function() { 95 info("Got fullscreenchange for entering"); 96 hasRequestPointerLock = "requestPointerLock" in div; 97 div.requestPointerLock(); 98 }); 99 div.requestFullscreen(); 100 } 101 </script> 102 </pre> 103 </body> 104 </html>