fune/browser/base/content/test/newtab/browser_newtab_drag_drop.js
Aryeh Gregor 76862dadad Bug 1299453 - Stop using createEvent("DragEvents"/"KeyEvents") internally; r=smaug
They are non-standard aliases for "DragEvent" and "KeyboardEvent" that
are not supported by any other UA, and we would like to drop support.
So first let's stop using them ourselves, so we can use telemetry to see
if any sites are using them.

MozReview-Commit-ID: ICC33ORa2st
2016-08-31 20:38:50 +03:00

95 lines
3 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/*
* These tests make sure that dragging and dropping sites works as expected.
* Sites contained in the grid need to shift around to indicate the result
* of the drag-and-drop operation. If the grid is full and we're dragging
* a new site into it another one gets pushed out.
*/
add_task(function* () {
requestLongerTimeout(2);
yield* addNewTabPageTab();
// test a simple drag-and-drop scenario
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks("");
yield* addNewTabPageTab();
yield* checkGrid("0,1,2,3,4,5,6,7,8");
yield doDragEvent(0, 1);
yield* checkGrid("1,0p,2,3,4,5,6,7,8");
// drag a cell to its current cell and make sure it's not pinned afterwards
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks("");
yield* addNewTabPageTab();
yield* checkGrid("0,1,2,3,4,5,6,7,8");
yield doDragEvent(0, 0);
yield* checkGrid("0,1,2,3,4,5,6,7,8");
// ensure that pinned pages aren't moved if that's not necessary
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks(",1,2");
yield* addNewTabPageTab();
yield* checkGrid("0,1p,2p,3,4,5,6,7,8");
yield doDragEvent(0, 3);
yield* checkGrid("3,1p,2p,0p,4,5,6,7,8");
// pinned sites should always be moved around as blocks. if a pinned site is
// moved around, neighboring pinned are affected as well
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks("0,1");
yield* addNewTabPageTab();
yield* checkGrid("0p,1p,2,3,4,5,6,7,8");
yield doDragEvent(2, 0);
yield* checkGrid("2p,0p,1p,3,4,5,6,7,8");
// pinned sites should not be pushed out of the grid (unless there are only
// pinned ones left on the grid)
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks(",,,,,,,7,8");
yield* addNewTabPageTab();
yield* checkGrid("0,1,2,3,4,5,6,7p,8p");
yield doDragEvent(2, 5);
yield* checkGrid("0,1,3,4,5,2p,6,7p,8p");
// make sure that pinned sites are re-positioned correctly
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks("0,1,2,,,5");
yield* addNewTabPageTab();
yield* checkGrid("0p,1p,2p,3,4,5p,6,7,8");
yield doDragEvent(0, 4);
yield* checkGrid("3,1p,2p,4,0p,5p,6,7,8");
});
function doDragEvent(sourceIndex, dropIndex) {
return ContentTask.spawn(gBrowser.selectedBrowser,
{ sourceIndex: sourceIndex, dropIndex: dropIndex }, function*(args) {
let dataTransfer = new content.DataTransfer("dragstart", false);
let event = content.document.createEvent("DragEvent");
event.initDragEvent("dragstart", true, true, content, 0, 0, 0, 0, 0,
false, false, false, false, 0, null, dataTransfer);
let target = content.gGrid.cells[args.sourceIndex].site.node;
target.dispatchEvent(event);
event = content.document.createEvent("DragEvent");
event.initDragEvent("drop", true, true, content, 0, 0, 0, 0, 0,
false, false, false, false, 0, null, dataTransfer);
target = content.gGrid.cells[args.dropIndex].node;
target.dispatchEvent(event);
});
}