On ToT, event.dataTransfer.getData("text/uri-list") returns an empty string when...
[WebKit-https.git] / LayoutTests / editing / pasteboard / files-during-page-drags.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 </head>
6 <body onload=runTest()>
7 <p id="description"></p>
8 <div id="console"></div>
9 <script>
10 description("Make sure that .files arrays are always empty for non-file drags.");
11
12 jsTestIsAsync = true;
13
14 var testContainer = document.createElement('div');
15 // Put dragables at the top so that logging does not cause them to move off screen (where we can't drag).
16 document.body.insertBefore(testContainer, document.body.firstChild);
17
18 var dragTarget = document.createElement('div');
19 dragTarget.innerHTML = "drag target";
20 dragTarget.style.cssText = 'width: 100px; height: 100px; background-color: blue';
21 testContainer.appendChild(dragTarget);
22
23 var droppedFiles = null;
24 dragTarget.ondragenter = function() {
25     event.dataTransfer.dropEffect = "copy";
26 }
27 dragTarget.ondragover = function() {
28     event.dataTransfer.dropEffect = "copy";
29     event.preventDefault();
30 }
31 dragTarget.ondrop = function() {
32     if (window.eventSender) {
33         if (droppedFiles)
34             testFailed("droppedFiles should have been cleared before making a drop");
35         droppedFiles = event.dataTransfer.files;
36     } else
37         debug("Got drop with files: " + event.dataTransfer.files + " length: " + event.dataTransfer.files.length)
38 }
39
40 var image = document.createElement('img');
41 image.src = "resources/apple.gif";
42 testContainer.appendChild(image);
43
44 // If we don't add a <br> then the line height of the <a> is the same as the <img> and the click-to-drag hits undragable whitespace.
45 testContainer.appendChild(document.createElement('br'));
46
47 var link = document.createElement('a');
48 link.innerHTML = "Draggable link";
49 link.href = "resources/apple.gif"
50 testContainer.appendChild(link);
51
52 function moveMouseToCenterOfElement(element)
53 {
54     var centerX = element.offsetLeft + element.offsetWidth / 2;
55     var centerY = element.offsetTop + element.offsetHeight / 2;
56     eventSender.mouseMoveTo(centerX, centerY);
57 }
58
59 function dragFromSourceToTarget(source, target)
60 {
61     moveMouseToCenterOfElement(source);
62     eventSender.mouseDown();
63     moveMouseToCenterOfElement(target);
64     eventSender.mouseUp();
65 }
66
67 function testDrag(source)
68 {
69     dragFromSourceToTarget(source, dragTarget);
70     if (!droppedFiles)
71         testFailed("Drop of " + source.tagName + " never occured!");
72     else if (droppedFiles.length == 0)
73         testPassed("Drag of " + source.tagName + " resulted in empty files array.");
74     else if (source == image)
75         testPassed(`Drag of ${source.tagName} resulted in files array of size ${droppedFiles.length}`);
76     else
77         testFailed("Drag of " + source.tagName + " resulted in non-empty files array! (files: " + droppedFiles.length + ")");
78     droppedFiles = null;
79 }
80
81 async function runTest()
82 {
83     if (!window.eventSender || !window.testRunner) {
84         testFailed("This test is not interactive, please run using DumpRenderTree");
85         return;
86     }
87
88     await image.decode();
89     testDrag(link);
90     testDrag(image);
91     document.body.removeChild(testContainer);
92     finishJSTest();
93 }
94
95 var successfullyParsed = true;
96 </script>
97 <script src="../../resources/js-test-post.js"></script>
98 </body>
99 </html>