blob: c7ed84e15889720e1f68316f7b603da9d8f1d4f4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/ui-helper.js"></script>
<script src="resources/hit-test-utilities.js"></script>
<style>
#test-container {
height: 500px;
}
.container {
position: relative;
width: 500px;
height: 200px;
margin: 20px;
border: 1px solid black;
}
.editable {
-webkit-user-modify: read-write;
background-color: aquamarine;
border: 2px solid green;
}
.overlapper {
position: absolute;
top: 0;
height: 100%;
width: 50%;
background-color: rgba(255, 255, 255, 0.75);
border: 1px solid black;
z-index: 1;
box-shadow: 0 0 10px black;
}
.tap-point {
position: absolute;
height: 10px;
width: 10px;
border-radius: 50%;
background-color: red;
z-index: 1;
}
</style>
</head>
<body style="height: 4096px">
<div id="test-container">
<h2>Non-composited overlap</h2>
<div id="non-composited-container" class="container">
<div class="editable" style="margin: 10px; height: 100px"></div>
<div class="overlapper"></div>
</div>
<h2>Composited overlap</h2>
<div id="composited-container" class="container">
<div class="editable" style="margin: 10px; height: 100px"></div>
<div class="overlapper" style="will-change: transform; transform: translateZ(0)"></div>
</div>
<div id="first-tap-point" class="tap-point" style="top: 150px; left: 270px"></div>
<div id="second-tap-point" class="tap-point" style="top: 400px; left: 270px"></div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;
if (window.testRunner)
testRunner.dumpAsText();
if (window.internals)
internals.settings.setEditableRegionEnabled(true);
async function runTest()
{
if (!window.testRunner) {
testFailed("Must be run in WebKitTestRunner.");
return;
}
debug("Non-Composited overlap:");
let container = document.getElementById("non-composited-container");
let containerComputedStyle = window.getComputedStyle(container);
let overlapper = container.querySelector(".overlapper");
let borderLength = parseInt(containerComputedStyle.borderLeftWidth, 10); // Assumes uniform border width
await shouldHaveEditableElementsInRect(container.offsetLeft + borderLength, container.offsetTop + borderLength, overlapper.offsetWidth - borderLength, container.offsetHeight - borderLength);
await shouldHaveEditableElementsInRectForElement(document.getElementById("first-tap-point"));
await shouldHaveEditableElementsInRect(container.offsetLeft + overlapper.offsetWidth + borderLength, container.offsetTop - borderLength, container.offsetWidth - overlapper.offsetWidth - borderLength, container.offsetHeight - borderLength);
debug("<br>Composited overlap:");
container = document.getElementById("composited-container");
containerComputedStyle = window.getComputedStyle(container);
overlapper = container.querySelector(".overlapper");
borderLength = parseInt(containerComputedStyle.borderLeftWidth, 10); // Assumes uniform border width
await shouldNotHaveEditableElementsInRect(container.offsetLeft + borderLength, container.offsetTop + borderLength, overlapper.offsetWidth - borderLength, container.offsetHeight - borderLength);
await shouldNotHaveEditableElementsInRectForElement(document.getElementById("second-tap-point"));
await shouldHaveEditableElementsInRect(container.offsetLeft + overlapper.offsetWidth + borderLength, container.offsetTop + borderLength, container.offsetWidth - overlapper.offsetWidth - borderLength, container.offsetHeight - borderLength);
let testContainer = document.getElementById("test-container");
document.body.removeChild(testContainer);
finishJSTest();
}
description("Hit test editable elements that are overlapped by another element.");
runTest();
</script>
</body>
</html>