Index: third_party/WebKit/LayoutTests/fast/dnd/resources/link-dragging-common.js |
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/resources/link-dragging-common.js b/third_party/WebKit/LayoutTests/fast/dnd/resources/link-dragging-common.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab815acc5199bb03c100d4f83dc8b6acb8d2d36a |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/dnd/resources/link-dragging-common.js |
@@ -0,0 +1,78 @@ |
+const mouseMoveToCenter = (element) => { |
+ const clientRect = element.getBoundingClientRect(); |
+ const centerX = (clientRect.left + clientRect.right) / 2; |
+ const centerY = (clientRect.top + clientRect.bottom) / 2; |
+ eventSender.mouseMoveTo(centerX, centerY); |
+} |
+ |
+const runLinkDraggingTest = (t, params) => { |
+ let gotDragStart = false |
+ let dragStartEffect = null; |
+ let dragStartUriList = null; |
+ let dragStartTypes = null; |
+ let dragSource = null; |
+ |
+ // Enables the Ahem font, which makes the drag image platform-independent. |
+ if (window.testRunner) |
+ document.body.setAttribute('class', 'test-runner'); |
+ |
+ const dragged = document.querySelector('.dragged'); |
+ dragged.ondragstart = (event) => { |
+ if (!gotDragStart) { |
+ gotDragStart = true; |
+ dragStartEffect = event.dataTransfer.dropEffect; |
+ dragStartUriList = event.dataTransfer.getData('text/uri-list'); |
+ dragStartTypes = [].concat(event.dataTransfer.types).sort(); |
+ dragStartTarget = event.target; |
+ } |
+ } |
+ |
+ let gotDrop = false; |
+ let dropEffect = null; |
+ const dropZone = document.querySelector('.dropzone'); |
+ dropZone.ondragover = (event) => event.preventDefault(); |
+ |
+ const testDone = document.querySelector('.done'); |
+ return new Promise((resolve, reject) => { |
+ dropZone.ondrop = (event) => { |
+ if (!gotDrop) { |
+ gotDrop = true; |
+ dropEffect = event.dataTransfer.dropEffect; |
+ } |
+ // Some of the drags would result in the link being followed in Firefox. |
+ event.preventDefault(); |
+ |
+ resolve(true); |
+ } |
+ |
+ if (window.eventSender) { |
+ mouseMoveToCenter(dragged); |
+ eventSender.mouseDown(); |
+ setTimeout(() => { |
+ mouseMoveToCenter(dropZone); |
+ eventSender.mouseUp(); |
+ }, 100); |
+ } |
+ }).then(() => t.step(() => { |
+ assert_equals(gotDragStart, true, |
+ 'dragstart event should fire for all drags'); |
+ if (gotDragStart) { |
+ assert_true(dragStartTarget.classList.contains('dragged'), |
+ 'the dragged element should have the class "dragged"'); |
+ assert_equals(dragStartEffect, 'none', |
+ 'dataTransfer.dropEffect must always default to "none" in dragstart'); |
+ assert_equals(dragStartUriList, params.dragStartUriList, |
+ 'incorrect dataTransfer.getData("text/uri-list") in dragstart'); |
+ assert_array_equals(dragStartTypes, params.dragStartTypes, |
+ 'incorrect dataTransfer types in dragstart'); |
+ } |
+ |
+ if (gotDrop) { |
+ assert_equals(dropEffect, 'none', |
+ 'dataTransfer.dropEffect must always default to "none" in drop'); |
+ } |
+ })); |
+} |
+ |
+if (window.testRunner) |
+ testRunner.dumpDragImage(); |