<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html>
<head>
<title>This tests the case when nested timers trigger visible content change</title>
<script src="../../../../../resources/basic-gestures.js"></script>
<style>
#tapthis {
    width: 400px;
    height: 400px;
    border: 1px solid green;
}

#becomesVisible {
    visibility: hidden;
    width: 100px;
    height: 100px;
    background-color: green;
}
</style>
<script>
async function test() {
    if (!window.testRunner || !testRunner.runUIScript)
        return;
    if (window.internals)
        internals.settings.setContentChangeObserverEnabled(true);

    testRunner.waitUntilDone();
    testRunner.dumpAsText();

    let rect = tapthis.getBoundingClientRect();
    let x = rect.left + rect.width / 2;
    let y = rect.top + rect.height / 2;

    await tapAtPoint(x, y);
}
</script>
</head>
<body onload="test()">
<div id=tapthis>PASS if 'clicked' text is not shown below.</div>
<div id=becomesVisible></div>
<pre id=result></pre>
<script>
tapthis.addEventListener("mouseover", function( event ) {
    // 1. Install a short timer on hover
    setTimeout(function() {
        // 2. Trigger some non-visibility style change with forcing offsetHeight.
        becomesVisible.style.marginLeft = "5px";
        document.body.offsetHeight;

        // 3. Install a nested timer with visibility change.
        setTimeout(function() {
            becomesVisible.style.visibility = "visible";
            document.body.offsetHeight;
            setTimeout("testRunner.notifyDone()", 0);
        }, 10);
    }, 0);
}, false);

becomesVisible.addEventListener("click", function( event ) {   
    result.innerHTML = "clicked hidden";
}, false);

tapthis.addEventListener("click", function( event ) {   
    result.innerHTML = "clicked";
}, false);
</script>
</body>
</html>
