pointerevent_pointerlock_supercedes_capture.html (5448B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>Pointer Events pointer lock tests</title> 5 <meta name="viewport" content="width=device-width"> 6 <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script src="/resources/testdriver.js"></script> 10 <script src="/resources/testdriver-actions.js"></script> 11 <script src="/resources/testdriver-vendor.js"></script> 12 <!-- Additional helper script for common checks across event types --> 13 <script type="text/javascript" src="../pointerevent_support.js"></script> 14 <script> 15 var lock_change_count = 0; 16 var capture_count = 0; 17 var mouse_move_count = 0; 18 19 function resetTestState() { 20 } 21 22 function run() { 23 var test_pointerEvent = setup_pointerevent_test("no pointercapture while pointerlock", ['mouse']); 24 var div1 = document.getElementById("div1"); 25 var div2 = document.getElementById("div2"); 26 27 on_event(div1, 'pointerdown', function(event) { 28 div2.setPointerCapture(event.pointerId); 29 div1.requestPointerLock(); 30 }); 31 on_event(div1, 'pointermove', function(event) { 32 mouse_move_count++ 33 if (lock_change_count == 1) { 34 if (mouse_move_count == 2) { 35 try { 36 div2.setPointerCapture(event.pointerId); 37 test_pointerEvent.step(function () { 38 assert_unreached("DOMException: InvalidStateError should have been thrown."); 39 }); 40 } catch (e) { 41 test_pointerEvent.step(function () { 42 assert_equals(e.name, "InvalidStateError", "DOMException should be InvalidStateError"); 43 }); 44 } 45 } else if (mouse_move_count == 3) { 46 document.exitPointerLock(); 47 mouse_move_count = 0; 48 } 49 50 } 51 }); 52 on_event(div2, 'gotpointercapture', function(event) { 53 capture_count++; 54 }); 55 on_event(div2, 'lostpointercapture', function(event) { 56 capture_count++; 57 }); 58 on_event(document, 'pointerlockchange', function(event) { 59 lock_change_count++; 60 test_pointerEvent.step(function() { 61 if (lock_change_count == 1) 62 assert_equals(document.pointerLockElement, div1, "document.pointerLockElement should be div1."); 63 else if (lock_change_count == 2) 64 assert_equals(document.pointerLockElement, null, "document.pointerLockElement should be null."); 65 }); 66 }); 67 68 injectInput().then(function(){ 69 test_pointerEvent.step(function(){ 70 assert_equals(lock_change_count, 2, "Pointer is unlocked"); 71 assert_greater_than(mouse_move_count, 1, "More than 1 pointermove has been received after unlocked"); 72 assert_equals(capture_count, 0, "There shouldn't be any capture events fired."); 73 }); 74 test_pointerEvent.done(); 75 }) 76 } 77 // Inject mouse input 78 function injectInput() { 79 var actions = new test_driver.Actions(); 80 return actions.pointerMove(0, 0, {origin: div1}) 81 .pointerDown() 82 .pointerMove(30, 30, {origin: div1}) 83 .pointerMove(60, 30, {origin: div1}) 84 .pointerMove(30, 20, {origin: div1}) 85 .pointerMove(10, 50, {origin: div1}) 86 .pointerMove(40, 10, {origin: div1}) 87 .pointerMove(5, 30, {origin: div1}) 88 .pointerMove(-5, 15, {origin: div1}) 89 .pointerUp() 90 .send(); 91 } 92 </script> 93 </head> 94 <body onload="run()"> 95 <h1>Pointer Events pointer lock test</h1> 96 <h2 id="pointerTypeDescription"></h2> 97 <h4> 98 Test Description: This test checks that we do not set the pointer capture when any element in the page gets a pointer lock. 99 <ol> 100 <li>Press left button down on the green rectangle and hold it.</li> 101 <li>Move the mouse inside the green rectangle.</li> 102 </ol> 103 104 Test passes if the pointer capture is not set when the green rectangle gets the pointer lock. 105 </h4> 106 <div id="testContainer"> 107 <div id="div1" style="width:800px;height:250px;background:green"></div> 108 <div id="div2" style="width:800px;height:250px;background:yellow"></div> 109 </div> 110 <div class="spacer"></div> 111 </body> 112 </html>