<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html>
<head>
<title>This tests that we fire mouseout on synthetic click when the quirk is on.</title>
<script src="../../../../../resources/basic-gestures.js"></script>
<style>
#tapthis {
    width: 400px;
    height: 400px;
    border: 1px solid green;
}

#becomesVisible {
    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);
        internals.settings.setShouldDispatchSyntheticMouseOutAfterSyntheticClick(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()">
<button id=tapthis>PASS if 'mouseout' text is shown below.</button>
<div id=becomesVisible></div>
<pre id=result></pre>
<script>

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

tapthis.addEventListener("mouseout", function( event ) {   
    result.innerHTML = result.innerHTML + " mouseout triggered ";
    if (window.testRunner)
        testRunner.notifyDone();
}, false);

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