pointerevent_pointerlock_after_pointercapture.html (4444B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>Pointer Events pointer lock test</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 got_capture = false; 16 var lost_capture = false; 17 var lock_requested = false; 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 }); 30 on_event(document, 'contextmenu', function(event) { 31 event.preventDefault(); 32 }); 33 on_event(div2, 'pointermove', function(event) { 34 if (event.button == 2 && got_capture && !lock_requested) { 35 div1.requestPointerLock(); 36 lock_requested = true; 37 } 38 }); 39 on_event(div2, 'gotpointercapture', function(event) { 40 got_capture = true; 41 }); 42 on_event(div2, 'lostpointercapture', function(event) { 43 lost_capture = true; 44 }); 45 on_event(document,"pointerlockerror", function() { 46 assert_unreached("Pointer lock error"); 47 }) 48 49 injectInput().then(function(){ 50 test_pointerEvent.step(function(){ 51 assert_true(lost_capture, "Pointer capture was lost after got a pointer lock."); 52 assert_equals(document.pointerLockElement, div1, "document.pointerLockElement should be div1."); 53 }); 54 test_pointerEvent.done(); 55 }) 56 } 57 58 // Inject mouse input 59 function injectInput() { 60 var actions = new test_driver.Actions(); 61 return actions.pointerMove(0, 0, {origin: div1}) 62 .pointerDown({button: actions.ButtonType.LEFT}) 63 .pointerMove(30, 30, {origin: div1}) 64 .pointerMove(30, 0, {origin: div1}) 65 .pointerDown({button: actions.ButtonType.RIGHT}) 66 .pointerMove(60, 30, {origin: div1}) 67 .pointerMove(20, 20, {origin: div1}) 68 .pointerUp({button: actions.ButtonType.RIGHT}) 69 .pointerUp({button: actions.ButtonType.LEFT}) 70 .send(); 71 } 72 </script> 73 </head> 74 <body onload="run()"> 75 <h1>Pointer Events pointer lock test</h1> 76 <h2 id="pointerTypeDescription"></h2> 77 <h4> 78 Test Description: This test checks that we release the exsiting pointer capture when any element in the page gets a pointer lock. 79 <ol> 80 <li>Press left button down on the green rectangle and hold it.</li> 81 <li>Move the mouse inside the green rectangle.</li> 82 <li>Click right button while keeping left button down</li> 83 <li>Keep moving the mouse inside the green rectangle.</li> 84 </ol> 85 86 Test passes if the pointer capture is released on the yellow rectangle when the green rectangle gets the pointer lock. 87 </h4> 88 <div id="testContainer"> 89 <div id="div1" style="width:800px;height:250px;background:green"></div> 90 <div id="div2" style="width:800px;height:250px;background:yellow"></div> 91 </div> 92 <div class="spacer"></div> 93 </body> 94 </html>