<!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>
