blob: d70ea500dcee4b14f503b31456ed05f705dc212f [file] [log] [blame]
<!DOCTYPE html>
<head>
<script src="/js-test-resources/ui-helper.js"></script>
<script src="/resources/js-test-pre.js"></script>
<style>
body {
margin: 0;
}
.target {
position: absolute;
width: 14px;
height: 15px;
right: 0px;
border: 0;
}
.hidden {
visibility: hidden;
}
#touch-target {
position: relative;
width: 30px;
height: 30px;
}
#alternate-click-target {
bottom: 0px;
}
#finish-target {
width: 30px;
height: 30px;
}
</style>
</head>
<body>
<div id="touch-target">
<iframe id="click-target" class="target hidden"></iframe>
<div id="alternate-click-target" class="target"></div>
</div>
<div id="finish-target"></div>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test that a synthesized mouse event is restricted to the origin that handled its underlying touch event.");
window.jsTestIsAsync = true;
(async () => {
const runTest = async (description, clickTargetSrc, shouldHandleTouchEvents, frameWasClickedExpected, alternateWasClickedExpected) => {
debug(description);
const clickTarget = document.querySelector("#click-target");
const alternateClickTarget = document.querySelector("#alternate-click-target");
const touchTarget = document.querySelector("#touch-target");
var frameWasClicked = false;
window.onmessage = () => frameWasClicked = true;
var alternateWasClicked = false;
alternateClickTarget.onclick = () => alternateWasClicked = true;
if (shouldHandleTouchEvents)
touchTarget.ontouchstart = () => { clickTarget.classList.toggle("hidden") };
else
clickTarget.classList.toggle("hidden");
await new Promise((resolve) => {
clickTarget.onload = () => resolve();
clickTarget.src = clickTargetSrc;
});
await UIHelper.activateElement(touchTarget);
await new Promise((resolve) => {
const finishTarget = document.querySelector("#finish-target");
finishTarget.onclick = () => resolve();
UIHelper.activateElement(finishTarget);
});
shouldBe(() => frameWasClicked, () => frameWasClickedExpected);
shouldBe(() => alternateWasClicked, () => alternateWasClickedExpected);
clickTarget.classList.toggle("hidden");
touchTarget.ontouchstart = null;
debug('');
};
await runTest("Clicks are dispatched to a frame in the same origin as the touch event handler.", "resources/click-target.html", true, true, false);
await runTest("Clicks are dispatched to a frame in a different origin when the touch event target frame has no touch event handlers.", "https://localhost:8443/events/touch/ios/resources/click-target.html", false, true, false);
await runTest("Clicks are not dispatched to a frame in a different origin than the touch event handler.", "https://localhost:8443/events/touch/ios/resources/click-target.html", true, false, true);
finishJSTest();
})();
</script>
<script src="/resources/js-test-post.js"></script>
</body>