blob: 0d3b110bd0e0201c51a5bbf6027f543c5b369fd4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<style>
#drag {
border: 1px solid black;
height: 200px;
width: 200px;
}
#drop {
border: 1px solid black;
height: 200px;
width: 200px;
}
</style>
</head>
<body>
<p>To manually test, select a text file for the file input element, and then drag 'Drag Me' to 'Drop Here' and drop.
<!-- TODO(https://crbug.com/438479): File handling has never been fully
implemented for DataTransferItemList.add, but is implemented in eventSender.
Therefore, this test succeeds when run through content_shell, but fails
when run manually. -->
<input id="inputElement" type="file"></input>
<div draggable="true" id="drag" ondragstart="dragstart(event)">Drag Me</div>
<div id="drop" ondragenter="dragenter(event)" ondragover="dragover(event)" ondrop="drop(event)">Drop Here</div>
</div>
<div id="console"></div>
<script>
let testFile = null;
const inputElement = document.getElementById('inputElement');
inputElement.onchange = event => { testFile = inputElement.files[0]; };
let testItem;
function dragstart(event)
{
testItem = event.dataTransfer.items.add(testFile);
shouldBeEqualToString('testItem.kind', 'file');
shouldBeEqualToString('testItem.type', 'text/plain');
}
function dragenter(event)
{
event.preventDefault();
}
function dragover(event)
{
event.preventDefault();
}
var testItems;
function drop(event)
{
testItems = event.dataTransfer.items;
shouldBe('testItems.length', '1');
shouldBeNull('testItems.add(testFile)'); // Read-only.
shouldBe('testItems.length', '1');
shouldBeEqualToString('testItems[0].kind', 'file');
shouldBeEqualToString('testItems[0].type', 'text/plain');
finishJSTest();
}
function runTest()
{
if (!window.testRunner)
return;
// First, we need to generate a File object to use for our tests.
eventSender.beginDragWithFiles(['test.txt']);
eventSender.mouseMoveTo(inputElement.offsetLeft + inputElement.offsetWidth / 2,
inputElement.offsetTop + inputElement.offsetHeight / 2);
eventSender.mouseUp();
// Now run the actual test.
const dragElement = document.getElementById('drag');
eventSender.mouseMoveTo(dragElement.offsetLeft + dragElement.offsetWidth / 2,
dragElement.offsetTop + dragElement.offsetHeight / 2);
eventSender.mouseDown();
eventSender.leapForward(100);
const dropElement = document.getElementById('drop');
eventSender.mouseMoveTo(dropElement.offsetLeft + dropElement.offsetWidth / 2,
dropElement.offsetTop + dropElement.offsetHeight / 2);
eventSender.mouseUp();
}
description("Tests DataTransferItemList file handling");
window.jsTestIsAsync = true;
window.onload = runTest;
</script>
</body>
</html>