Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const FLOAT_OFFSET = 50;
const CHANGE_OFFSET = 30;
const DECREASE_OFFSET = FLOAT_OFFSET - CHANGE_OFFSET;
const INCREASE_OFFSET = FLOAT_OFFSET + CHANGE_OFFSET;
/**
* This function tests the PiP corner snapping feature.
*/
add_task(async () => {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
let pipWin = await triggerPictureInPicture(browser, "no-controls");
let controls = pipWin.document.getElementById("controls");
/**
* pipWin floating in top left corner(quadrant 2), dragged left
* should snap into top left corner
*/
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft + DECREASE_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft,
"Window should be on the left"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop,
"Window should be on the top"
);
/**
* pipWin floating in top left corner(quadrant 2), dragged up
* should snap into top left corner
*/
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + DECREASE_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft,
"Window should be on the left"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop,
"Window should be on the top"
);
/**
* pipWin floating in top left corner(quadrant 2), dragged right
* should snap into top right corner
*/
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft + INCREASE_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft + pipWin.screen.availWidth - pipWin.innerWidth,
"Window should be on the right"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop,
"Window should be on the top"
);
/**
* pipWin floating in top left corner(quadrant 2), dragged down
* should snap into bottom left corner
*/
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop + INCREASE_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft,
"Window should be on the left"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop + pipWin.screen.availHeight - pipWin.innerHeight,
"Window should be on the bottom"
);
/**
* pipWin floating in top right corner(quadrant 1), dragged down
* should snap into bottom right corner
*/
pipWin.moveTo(
pipWin.screen.availLeft +
pipWin.screen.availWidth -
pipWin.innerWidth -
FLOAT_OFFSET,
pipWin.screen.availTop + FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft +
pipWin.screen.availWidth -
pipWin.innerWidth -
FLOAT_OFFSET,
pipWin.screen.availTop + INCREASE_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft + pipWin.screen.availWidth - pipWin.innerWidth,
"Window should be on the right"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop + pipWin.screen.availHeight - pipWin.innerHeight,
"Window should be on the bottom"
);
/**
* pipWin floating in top left corner(quadrant 4), dragged left
* should snap into bottom left corner
*/
pipWin.moveTo(
pipWin.screen.availLeft +
pipWin.screen.availWidth -
pipWin.innerWidth -
FLOAT_OFFSET,
pipWin.screen.availTop +
pipWin.screen.availHeight -
pipWin.innerHeight -
FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft +
pipWin.screen.availWidth -
pipWin.innerWidth -
INCREASE_OFFSET,
pipWin.screen.availTop +
pipWin.screen.availHeight -
pipWin.innerHeight -
FLOAT_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft,
"Window should be on the left"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop + pipWin.screen.availHeight - pipWin.innerHeight,
"Window should be on the bottom"
);
/**
* pipWin floating in top left corner(quadrant 3), dragged up
* should snap into top left corner
*/
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop +
pipWin.screen.availHeight -
pipWin.innerHeight -
FLOAT_OFFSET
);
EventUtils.sendMouseEvent({ type: "mouseup" }, controls, pipWin);
pipWin.moveTo(
pipWin.screen.availLeft + FLOAT_OFFSET,
pipWin.screen.availTop +
pipWin.screen.availHeight -
pipWin.innerHeight -
INCREASE_OFFSET
);
EventUtils.sendMouseEvent(
{
type: "mouseup",
metaKey: true,
},
controls,
pipWin
);
Assert.equal(
pipWin.screenX,
pipWin.screen.availLeft,
"Window should be on the left"
);
Assert.equal(
pipWin.screenY,
pipWin.screen.availTop,
"Window should be on the top"
);
}
);
});