blob: 231b76f8e5a8d675351b32e4e174efb9d9bf640d [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="../../../../resources/js-test.js"></script>
<script src="../../../../resources/ui-helper.js"></script>
<style>
.target {
width: 150px;
height: 150px;
margin-bottom: 1em;
border: 4px solid black;
color: white;
font-size: 20px;
}
#target1 {
background-color: rgb(52, 199, 89);
}
#target2 {
background-color: rgb(52, 199, 89);
}
</style>
<script>
jsTestIsAsync = true;
handledFirstTouch = false;
handledSecondTouch = false;
function spinForDuration(duration) {
const startTime = Date.now();
while (true) {
if (Date.now() - startTime > duration)
break;
}
}
function handleClick(event) {
event.target.style.backgroundColor = "rgb(255, 59, 48)";
event.target.textContent = "A click event was dispatched.";
testFailed("Should not have handled a click");
}
addEventListener("load", async () => {
const target1 = document.getElementById("target1");
target1.addEventListener("touchstart", event => {
spinForDuration(100);
event.preventDefault();
});
target1.addEventListener("touchend", event => handledFirstTouch = true);
target1.addEventListener("click", handleClick);
const target2 = document.getElementById("target2");
target2.addEventListener("touchstart", () => spinForDuration(100));
target2.addEventListener("touchend", event => {
event.preventDefault();
handledSecondTouch = true;
});
target2.addEventListener("click", handleClick);
description("Verifies that calling preventDefault() in touchstart and touchend listeners prevents click events from being dispatched when the web page takes a long time to process the touchstart event. To manually run the test, tap the two boxes and verify that no click events are dispatched.");
if (!window.testRunner)
return;
await UIHelper.activateElement(target1);
await new Promise(resolve => shouldBecomeEqual("handledFirstTouch", "true", resolve));
await UIHelper.activateElement(target2);
await new Promise(resolve => shouldBecomeEqual("handledSecondTouch", "true", resolve));
finishJSTest();
});
</script>
</head>
<body>
<div class="target" id="target1"></div>
<div class="target" id="target2"></div>
</body>
</html>