<!DOCTYPE html>
<html>
<head>
<style>
div, span {
    border: 1px solid black;
};
</style>
<script>
var dropReceived;
function log(str)
{
    var result = document.getElementById('result');
    result.appendChild(document.createTextNode(str));
    result.appendChild(document.createElement('br'));
}
function dragDrop(target)
{
    log('Starting drag...');
    eventSender.beginDragWithFiles(['test']);
    eventSender.leapForward(100);
    eventSender.mouseMoveTo(target.offsetLeft + target.offsetWidth / 2,
                            target.offsetTop + target.offsetHeight / 2);
    eventSender.mouseUp();
}
window.onload = function()
{
    var drop1 = document.getElementById('drop1');
    var drop2 = document.getElementById('drop2');

    document.body.addEventListener('dragover', function () {
        dropReceived = false;
    }, false);

    drop1.addEventListener('dragover', function(e) {
        e.preventDefault();
    }, false);
    drop1.addEventListener('drop', function(e) {
        e.preventDefault();
        dropReceived = true;
        log('Drop received in drop target 1');
    }, false);

    drop2.addEventListener('dragover', function() {
    }, false);
    drop2.addEventListener('drop', function(e) {
        e.preventDefault();
        dropReceived = true;
        log('Drop received in drop target 2');
    }, false);

    if (!window.testRunner)
        return;
    testRunner.dumpAsText();
    testRunner.waitUntilDone();

    window.addEventListener('beforeunload', function () {
        if (!dropReceived)
            log('Drop not received');
        testRunner.notifyDone();
    });

    dragDrop(drop1);
    unloadExpected = true;
    dragDrop(drop2);
    window.setTimeout(function () {
        // Deadman's switch to fail quickly.
        log('FAIL: navigation expected');
        testRunner.notifyDone();
    }, 0);
}
</script>
</head>
<body>
<p>To run this test manually, drag a file to one of the two boxes below.
<div id="drop1">Dropping in drop target 1 should result in a drop event.</div>
<div id="drop2">Dropping in drop target 2 should NOT result in a drop event (page will navigate).</div>
<div id="result">
</div>
</body>
</html>
