Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: third_party/WebKit/LayoutTests/fast/dnd/resources/link-dragging-common.js

Issue 2441023003: Align drag feedback for links with draggable="true" to Safari. (Closed)
Patch Set: Rebased, added dependency on CL that fixes testing logistical issue. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698