pointerevent_pointermove_in_pointerlock.html (7036B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>pointermove</title> 5 <meta charset="utf-8"/> 6 <meta name="viewport" content="width=device-width"> 7 <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css"> 8 <script type="text/javascript" src="/resources/testharness.js"></script> 9 <script type="text/javascript" src="/resources/testharnessreport.js"></script> 10 <script type="text/javascript" src="/resources/testdriver.js"></script> 11 <script type="text/javascript" src="/resources/testdriver-actions.js"></script> 12 <script type="text/javascript" src="/resources/testdriver-vendor.js"></script> 13 <!-- Additional helper script for common checks across event types --> 14 <script type="text/javascript" src="../pointerevent_support.js"></script> 15 </head> 16 <body onload="run()"> 17 <h2>pointerlock</h2> 18 <h4>Test Description: This test checks if pointermove is dispatched correctly while in pointerlock mode. 19 <ol> 20 <li>Click in the black box (and accept the pointerlock permission if asked).</li> 21 <li>Move your mouse.</li> 22 <li>Click in the purple box inside the iframe</li> 23 <li>Move your mouse.</li> 24 </ol> 25 </h4> 26 <div id="target0"></div> 27 <iframe id="innerframe" onload="iframe_loaded()" src="resources/pointerevent_pointermove_in_pointerlock-iframe.html"></iframe> 28 <script> 29 window.name="outerframe"; 30 var test_pointermove = async_test("pointermove event received"); 31 var test_pointermove_innerframe = async_test("pointermove event received inner frame"); 32 var actions_promise1; 33 var actions_promise2; 34 var actions_promise3; 35 var actions_promise4; 36 PhaseEnum = { 37 Start: 0, 38 Lock1: 1, 39 Lock2: 2, 40 Done: 3, 41 }; 42 var iframe_loaded_promise; 43 var iframe_loaded_resolve; 44 45 iframe_loaded_promise = new Promise((resolve, reject)=>{ 46 iframe_loaded_resolve = resolve; 47 }); 48 49 function iframe_loaded(){ 50 iframe_loaded_resolve(); 51 } 52 53 async function run() { 54 // wait for iframe to fully load 55 await iframe_loaded_promise; 56 var target0 = document.getElementById("target0"); 57 var innerframe = document.getElementById('innerframe'); 58 var target1 = innerframe.contentDocument.getElementById('target1'); 59 innerframe.contentWindow.name = "innerframe"; 60 phase = PhaseEnum.Start; 61 62 on_event(target0, "click", async (event)=>{ 63 if(phase === PhaseEnum.Start){ 64 target0.requestPointerLock(); 65 }else{ 66 await actions_promise2; 67 document.exitPointerLock(); 68 } 69 }); 70 71 on_event(target1, "click", async (event)=>{ 72 if(phase === PhaseEnum.Lock1){ 73 target1.requestPointerLock(); 74 } 75 else{ 76 await actions_promise4; 77 innerframe.contentDocument.exitPointerLock(); 78 } 79 }); 80 81 on_event(target0, "pointermove", async (event)=> { 82 if (phase === PhaseEnum.Lock1) { 83 test_pointermove.step(()=> { 84 assert_equals(document.pointerLockElement, target0); 85 assert_equals(event.view.name, "outerframe", "View attribute of pointermove should be the target frame."); 86 }, "View attribute of pointermove should be the target frame."); 87 } 88 }); 89 90 on_event(target1, "pointermove", async (event)=> { 91 if (phase === PhaseEnum.Lock2) { 92 test_pointermove_innerframe.step(()=> { 93 assert_equals(innerframe.contentDocument.pointerLockElement, target1); 94 assert_equals(event.view.name, "innerframe", "View attribute of pointermove should be the target frame."); 95 }, "View attribute of pointermove should be the target frame."); 96 } 97 }); 98 99 on_event(document, "pointerlockchange", async (event)=> { 100 await actions_promise1; 101 if (phase === PhaseEnum.Start) { 102 test_pointermove.step(()=>{ 103 assert_equals(document.pointerLockElement, target0); 104 }); 105 phase++; 106 // Send moves in main frame target and then click on target0 107 actions_promise2 = new test_driver.Actions() 108 .pointerMove(10, 30, {origin: target0}) 109 .pointerMove(0, 0, {origin: target0}) 110 .pointerDown() 111 .pointerUp() 112 .send(); 113 }else{ 114 // when we exit pointerlock we are done 115 test_pointermove.done(); 116 // user activate innerframe 117 actions_promise3 = clickInTarget("mouse", target1); 118 } 119 }); 120 121 on_event(innerframe.contentDocument, "pointerlockchange", async (event)=> { 122 await actions_promise3; 123 if (phase === PhaseEnum.Lock1) { 124 test_pointermove_innerframe.step(()=> 125 assert_equals(innerframe.contentDocument.pointerLockElement, target1)); 126 phase++; 127 // Send moves in inner frame target and then click anywhere in the inner frame 128 await new test_driver.Actions() 129 .pointerMove(10, 30, {origin: target1}) 130 .send(); 131 actions_promise4 = clickInTarget("mouse", target1); 132 } 133 else{ 134 // when we exit pointerlock we are done 135 test_pointermove_innerframe.done(); 136 } 137 }); 138 139 on_event(document, "pointerlockerror", test_pointermove.unreached_func("pointer lock request should not fail in document!")); 140 on_event(innerframe.contentDocument, "pointerlockerror", test_pointermove_innerframe.unreached_func("pointer lock request should not fail in innerframe.contentDocument!")); 141 142 // Click the outer frame target to lock. 143 actions_promise1 = clickInTarget("mouse", target0); 144 } 145 </script> 146 <div id="complete-notice"> 147 </div> 148 </body> 149 </html>