Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<html>
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<title>Tests that :active state is changed with `touchstart` event listener</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/paint_listener.js"></script>
<script src="apz_test_utils.js"></script>
<script src="apz_test_native_event_utils.js"></script>
<style>
#button {
width: 100px;
height: 100px;
}
</style>
<button id="button">Button</button>
<script>
async function test() {
// Set up an active touchstart event listner.
let eventPromise = promiseOneEvent(document.documentElement, "touchstart");
await promiseApzFlushedRepaints();
await synthesizeNativeTouch(button, 10, 10, SpecialPowers.DOMWindowUtils.TOUCH_CONTACT);
await eventPromise;
// In JS there's no way to ensure `APZStateChange::eStartTouch` notification
// has been processed. So we wait for `:active` state change here.
await SimpleTest.promiseWaitForCondition(
() => button.matches(":active"),
"Waiting for :active state change");
ok(button.matches(":active"), "should be active");
eventPromise = promiseOneEvent(button, "touchend");
await synthesizeNativeTouch(button, 10, 10, SpecialPowers.DOMWindowUtils.TOUCH_REMOVE);
await eventPromise;
// Same as above. We need to wait for not `:active` state here.
await SimpleTest.promiseWaitForCondition(
() => !button.matches(":active"),
"Waiting for :active state change");
ok(!button.matches(":active"), "should not be active");
}
if (getPlatform() == "windows") {
// Bug 1875916. On Windows synthesizeNativeTouch(TOUCH_REMOVE) causes
// `InjectTouchInput failure` with ERROR_TIMEOUT.
ok(true, "Test doesn't need to run on Windows");
subtestDone();
} else {
waitUntilApzStable()
.then(test)
.then(subtestDone, subtestFailed);
}
</script>
</html>