<!DOCTYPE html>
<head>
<link rel="help" href="https://w3c.github.io/pointerlock/#extensions-to-the-element-interface">
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/gesture-util.js"></script>
</head>
<body>
<h1>Verify wheel events are sent to the pointerlock target instead of the hittest element when pointer is locked</h1>
<canvas id="target" style="touch-action:none" width="640" height="360">
Your browser does not support HTML5 canvas
</canvas>
<div id="text">
Click here to lock the pointer.
Using mousewheel in this area when pointer is locked should direct wheel
events to target.
</div>
<script type="text/javascript">
let target = document.getElementById("target");
let textDiv = document.getElementById("text");
let didTargetReceiveWheel = false;
textDiv.addEventListener("click",()=>{
target.requestPointerLock();
});
async function runTest(){
target.addEventListener("wheel",()=>{
didTargetReceiveWheel = true;
});
textDiv.addEventListener("wheel",
testObject.unreached_func("wheel event should not fire on element with id = text!"));
let rect = textDiv.getBoundingClientRect();
let x = rect.left + 5;
let y = rect.top + 5;
await mouseMoveTo(x, y);
await smoothScrollWithXY(5, 5, x, y, GestureSourceType.MOUSE_INPUT, SPEED_INSTANT);
if(didTargetReceiveWheel)
testPromiseResolve();
else
testPromiseReject("wheel event should fire on element with id = target !");
}
let testPromiseResolve;
let testPromiseReject;
let testObject;
promise_test(function(test){
return new Promise(async (resolve,reject)=>{
testPromiseResolve = resolve;
testPromiseReject = reject;
testObject = test;
let runTestFirstPointerLockChange = true;
document.addEventListener("pointerlockchange", async (e)=>{
if(runTestFirstPointerLockChange){
runTestFirstPointerLockChange = false;
await runTest();
}
});
document.addEventListener("pointerlockerror",
test.unreached_func("PointerLock should succeed!"));
let rect = textDiv.getBoundingClientRect();
let x = rect.left;
let y = rect.top;
await mouseMoveTo(x,y);
await mouseClickOn(x,y);
});
});
</script>
</body>