Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /html/user-activation/activation-trigger-touch.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#activation-triggering-input-event">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/utils.js"></script>
</head>
<body onload="runTests()">
<p>Tests user activation from a touch actions.</p>
<div id="scroller" style="width: 100%; height: 500px; overflow-y: scroll;">
<div id="content" style="width: 100%; height: 2000px;"></div>
</div>
<script>
async function onEventReceived(event) {
let shouldResultInActivation = event.type === "pointerup";
assert_equals(navigator.userActivation.isActive, shouldResultInActivation,
`${event.type} event should ${shouldResultInActivation ? "" : "not "}result in activation`);
await consumeTransientActivation();
}
async function onEventUnreached(event) {
assert_unreached(`should not receive ${event.type} event`);
}
function touchScrollInTarget(target) {
const deltaY = -1;
const x = 0;
let currentY = 0;
let actions = new test_driver.Actions()
.addPointer("TestPointer", "touch")
.pointerMove(x, currentY, {origin: target, sourceName: "TestPointer"})
.pointerDown({sourceName: "TestPointer"});
for (let i = 0; i < 20; i++) {
actions = actions.pointerMove(x, currentY, {origin: target, sourceName: "TestPointer"});
currentY += deltaY;
}
return actions.pause(100)
.pointerUp({sourceName: "TestPointer"})
.send();
}
function runTests() {
promise_test(async () => {
document.body.addEventListener("pointerdown", onEventReceived);
document.body.addEventListener("pointerup", onEventUnreached);
document.body.addEventListener("pointercancel", onEventReceived);
document.body.addEventListener("touchend", onEventReceived);
const touchend_event = getEvent('touchend');
await touchScrollInTarget(document.getElementById("scroller"));
await touchend_event;
document.body.removeEventListener("pointerdown", onEventReceived);
document.body.removeEventListener("pointerup", onEventUnreached);
document.body.removeEventListener("pointercancel", onEventReceived);
document.body.removeEventListener("touchend", onEventReceived);
}, "Activation through touch actions which cause scrolling");
promise_test(async () => {
document.body.addEventListener("pointerdown", onEventReceived);
document.body.addEventListener("pointerup", onEventUnreached);
document.body.addEventListener("pointercancel", onEventReceived);
document.body.addEventListener("touchend", onEventReceived);
document.body.addEventListener("touchmove", (event) => {
event.preventDefault();
}, {once: true, passive: false});
const touchend_event = getEvent('touchend');
await touchScrollInTarget(document.getElementById("scroller"));
await touchend_event;
document.body.removeEventListener("pointerdown", onEventReceived);
document.body.removeEventListener("pointerup", onEventReceived);
document.body.removeEventListener("pointercancel", onEventUnreached);
document.body.removeEventListener("touchend", onEventReceived);
}, "Activation through touch actions which doesn't cause scrolling");
}
</script>
</body>
</html>