55 lines
1.7 KiB
HTML
55 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<meta name="viewport" content="width=device-width; initial-scale=1.0">
|
|
<title>Tests that :active state is cleared after a longpress event</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() {
|
|
const contextmenuPromise = promiseOneEvent(button, "contextmenu", e => {
|
|
e.preventDefault();
|
|
return true;
|
|
});
|
|
await synthesizeNativeTouch(button, 10, 10, SpecialPowers.DOMWindowUtils.TOUCH_CONTACT);
|
|
|
|
// 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");
|
|
|
|
await contextmenuPromise;
|
|
|
|
await synthesizeNativeTouch(button, 10, 10, SpecialPowers.DOMWindowUtils.TOUCH_REMOVE);
|
|
|
|
// 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") {
|
|
// On Windows every context menu on touch screens opens __after__ lifting the
|
|
// finger.
|
|
ok(true, "Test doesn't need to run on Windows");
|
|
subtestDone();
|
|
} else {
|
|
waitUntilApzStable()
|
|
.then(test)
|
|
.then(subtestDone, subtestFailed);
|
|
}
|
|
</script>
|
|
</html>
|