<html>
<body>
<script>

function runTest() {
    if (!window.testRunner)
        return;

    testRunner.dumpAsText();

    eventSender.beginDragWithFiles(['resources/file-for-drop-with-file-paths.html']);
    eventSender.mouseMoveTo(10, 10);
    eventSender.mouseUp();
}

document.body.addEventListener('dragenter',
    function (e) {
      e.preventDefault();
    });
document.body.addEventListener('dragover',
    function (e) {
      e.preventDefault();
    });
document.body.addEventListener('drop',
    function (e) {
      data = e.dataTransfer.getData('text/uri-list');
      if (data) {
        document.body.innerHTML += '<p>Dropped file: ' + data + '</p>';
        document.body.innerHTML += 'Dropped types: ' + e.dataTransfer.types;
      } else
        document.body.innerHTML = 'PASS';
      e.preventDefault();
    });

window.onload = runTest;
</script>
<p>Drop files anywhere on this page. The page will try to intercept the drop--it should succeed but not be able to use dataTransfer.getData</p>
</body>
</html>
