| <!DOCTYPE html> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <style> |
| html, body { |
| width: 100%; |
| height: 100%; |
| } |
| </style> |
| <body contenteditable> |
| <pre id="output"> |
| This test is best run under DumpRenderTree. To manually test, drop a file anywhere in the body. |
| This will dump the contents of the DataTransfer on drop as output text. |
| You should see an item of kind "file" in the resulting item list, as well as an entry in the item list. |
| There should <i>not</i> be an item of kind "string" and type "file". |
| </pre> |
| </body> |
| <script> |
| |
| function write(markup) { |
| output.insertAdjacentHTML("beforeend", markup); |
| } |
| |
| function outputForFile(file) { |
| return file ? `(name = '${file.name}', size = ${file.size} bytes, type = '${file.type}')` : "(null)"; |
| } |
| |
| function writeOutputForEvent(event) { |
| output.textContent = ""; |
| |
| write(`<br><h3>*** Handling ${event.type} ***</h3>`); |
| const pasteboard = event.dataTransfer || event.clipboardData; |
| write(`<div><strong>Types => data</strong></div>`); |
| for (const type of pasteboard.types) |
| write(`<div>${type} => "${pasteboard.getData(type)}"</div>`); |
| let index = 0; |
| write(`<div><strong>Item list</strong></div>`); |
| for (const item of pasteboard.items) { |
| if (item.kind === "file") |
| write(`<div>[${index++}] => ${outputForFile(item.getAsFile())}</div>`); |
| else |
| write(`<div>[${index++}] => (kind = ${item.kind}, type = ${item.type})</div>`); |
| } |
| write(`<div><strong>File list</strong></div>`); |
| index = 0; |
| for (const file of pasteboard.files) |
| write(`<div>[${index++}] => ${outputForFile(file)}</div>`); |
| } |
| |
| document.body.addEventListener("drop", event => { |
| event.preventDefault(); |
| writeOutputForEvent(event); |
| }); |
| |
| if (window.testRunner && window.internals && window.eventSender) { |
| internals.settings.setCustomPasteboardDataEnabled(true); |
| testRunner.dumpAsText(); |
| |
| eventSender.beginDragWithFiles(["resources/apple.gif"]); |
| eventSender.mouseMoveTo(100, 100); |
| eventSender.mouseUp(); |
| } |
| </script> |