Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests that if the user mousedown's on a Picture-in-Picture toggle,
* but then mouseup's on something completely different, that we still
* open a Picture-in-Picture window, and that the mouse button events are
* all suppressed. Also ensures that a subsequent click on the document
* body results in all mouse button events firing normally.
*/
add_task(async () => {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await SimpleTest.promiseFocus(browser);
await ensureVideosReady(browser);
let videoID = "no-controls";
await prepareForToggleClick(browser, videoID);
// Hover the mouse over the video to reveal the toggle, which is necessary
// if we want to click on the toggle.
await BrowserTestUtils.synthesizeMouseAtCenter(
`#${videoID}`,
{
type: "mousemove",
},
browser
);
await BrowserTestUtils.synthesizeMouseAtCenter(
`#${videoID}`,
{
type: "mouseover",
},
browser
);
info("Waiting for toggle to become visible");
await toggleOpacityReachesThreshold(browser, videoID, "hoverVideo");
let toggleClientRect = await getToggleClientRect(browser, videoID);
// The toggle center, because of how it slides out, is actually outside
// of the bounds of a click event. For now, we move the mouse in by a
// hard-coded 15 pixels along the x and y axis to achieve the hover.
let toggleLeft = toggleClientRect.left + 15;
let toggleTop = toggleClientRect.top + 15;
info(
"Clicking on toggle, and expecting a Picture-in-Picture window to open"
);
// We need to wait for the window to have completed loading before we
// can close it as the document's type required by closeWindow may not
// be available.
let domWindowOpened = BrowserTestUtils.domWindowOpenedAndLoaded(null);
await BrowserTestUtils.synthesizeMouseAtPoint(
toggleLeft,
toggleTop,
{
type: "mousedown",
},
browser
);
await BrowserTestUtils.synthesizeMouseAtPoint(
1,
1,
{
type: "mouseup",
},
browser
);
let win = await domWindowOpened;
ok(win, "A Picture-in-Picture window opened.");
await SpecialPowers.spawn(browser, [videoID], async videoID => {
let video = content.document.getElementById(videoID);
await ContentTaskUtils.waitForCondition(() => {
return video.isCloningElementVisually;
}, "Video is being cloned visually.");
});
await BrowserTestUtils.closeWindow(win);
await assertSawClickEventOnly(browser);
await BrowserTestUtils.synthesizeMouseAtPoint(1, 1, {}, browser);
await assertSawMouseEvents(browser, true);
}
);
});