<!DOCTYPE html>
<html>
<body>
<div>This tests that a drop handler's default action must be prevented in order to stop navigation.
Otherwise, if event.preventDefault() is not called, navigation should occur. To test manually,
simply drag and drop another link or HTML file on this page. If navigation occurs, then the test
passed.</div>
<script>
function log(text)
{
    document.body.appendChild(document.createElement('br'));
    document.body.appendChild(document.createElement('div').appendChild(document.createTextNode(text)));
}
window.addEventListener('beforeunload', function ()
{
    log('PASS');
    testRunner.notifyDone();
});
document.body.addEventListener('dragenter', function (event)
{
    event.preventDefault();
});
document.body.addEventListener('dragover', function (event)
{
    event.preventDefault();
});
document.body.addEventListener('drop', function (event)
{
    log('Not preventing default event on drop.');
});
(function ()
{
    if (!window.testRunner)
        return;
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    log('Starting test');
    eventSender.beginDragWithFiles(['DRTFakeFile']);
    eventSender.mouseMoveTo(document.body.offsetLeft + 10, document.body.offsetTop + 10);
    eventSender.mouseUp();
    window.setTimeout(function ()
    {
        // Deadman's switch so we don't need to wait for the test to timeout to fail.
        log('FAIL');
        testRunner.notifyDone();
    }, 0);
})();
</script>
</body>
</html>
