blob: a4107fd707a2ec4cb40d22fcad786db0b42471d6 [file] [log] [blame]
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script type="text/javascript" src="pointerevent_support.js"></script>
<style>
iframe {
width: 300px;
height: 300px;
top: 100px;
left: 100px;
border: 0;
position: absolute;
background: green;
}
#outerFrame {
width: 500px;
height: 500px;
background: blue;
}
body {
touch-action:none;
}
</style>
<body id="outerFrame body" onload="run()">
<div id='outerFrame'>
<iframe id='innerFrameElement' src="resources/pointerevent_pointercapture-iframe.html"></iframe>
</div>
</body>
<script>
var receivedEventList = [];
var start_logging = false;
function handleEvent(event) {
if (event.type == 'pointerdown') {
start_logging = true;
if (document.setPointerCaptureOnPointerDown) {
event.target.setPointerCapture(event.pointerId);
}
}
if (event.type == "pointermove") {
if (document.releasePointerCaptureOnFirstMove && event.target.hasPointerCapture(event.pointerId))
event.target.releasePointerCapture(event.pointerId);
}
if (start_logging)
receivedEventList.push(event.target.id + ' received ' + event.type);
};
document.testEventList = ['pointerup', 'pointerdown', 'pointermove', 'gotpointercapture', 'lostpointercapture'];
document.testEventList.forEach(function(eventName) {
document.getElementById('outerFrame').addEventListener(eventName, handleEvent);
});
function Reset() {
document.setPointerCaptureOnPointerDown = false;
document.releasePointerCaptureOnFirstMove = false;
receivedEventList = [];
start_logging = false;
}
function run() {
ALL_POINTERS.forEach(function(pointerType) {
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
expectedEventList = ["innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received pointermove",
"innerFrame received pointerup",
"innerFrame received lostpointercapture"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at inner frame and set pointer capture.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
expectedEventList = ["outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received pointerup",
"outerFrame received lostpointercapture"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(25, 25)
.pointerDown()
.pointerMove(200, 200)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
// Mouse event has the frame capture, so after pointer capture released, events are
// dispatched to innerFrameDocument.
expectedEventList = ["innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received lostpointercapture",
(pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointermove",
(pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointerup",];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
expectedEventList = ["outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received lostpointercapture",
"innerFrame received pointermove",
"innerFrame received pointerup"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(50, 50)
.pointerDown()
.pointerMove(200, 200)
.pointerMove(250, 250)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove.");
});
}
</script>