<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}
const INITIAL= 0;
const OPEN_FILE_WITHOUT_GESTURE = 1;
window.testStage = INITIAL;
window.clickReceived = false;
window.clickFired = false;

function checkResult(continueFunc) {
    if (!clickFired)
        return;
    if (clickReceived) {
        // When the file select dialog shows up, it's a model window which receives
        // all UI events sent to window, so the click event can not be received by body.
        // If we received the click event, it means the file dialog was not opened.
        if (testStage == OPEN_FILE_WITHOUT_GESTURE)
            document.getElementById("open_without_gesture").innerHTML = "PASSED";
        clickReceived = false;
    } 
    clickFired = false;
    continueFunc();
}

function openFileDialogWithoutUserGesture() {
    // Tries to call <input type=file>.click to open the file dialog without a user gesture.
    document.getElementById('f').click();
    // Fires a click event.
    setTimeout(function() {
        eventSender.mouseMoveTo(10, 100);
        eventSender.mouseDown();
        eventSender.mouseUp();
        clickFired = true;
        testStage = OPEN_FILE_WITHOUT_GESTURE;
        // Waits for opening the file dialog and checks whether the click event can still be received by document.
        setTimeout("checkResult(function() { testRunner.notifyDone(); })", 500);
    }, 1);
}

function startTest() {
    if (!window.testRunner)
        return;
    document.body.addEventListener("click", function() { window.clickReceived = true }, true);
    setTimeout(openFileDialogWithoutUserGesture, 1);
}
</script>
</head>
<body style="margin:0px; padding:0px" onload="startTest();">
<form>
<input type="file" name="file" id="f">
</form>
This file is to test that opening file dialog requires a user gesture. Please refer to https://bugs.webkit.org/show_bug.cgi?id=47593 for more details.<br>
Test opening file dialog without user gesture is <span id="open_without_gesture">FAILED</span><br>
</body>
</html>
