113 lines
3.4 KiB
JavaScript
113 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Tests that the pip window closes when the pagehide page lifecycle event
|
|
* is not detected and if a video is not loaded with a src.
|
|
*/
|
|
add_task(async function test_close_empty_pip_window() {
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
url: TEST_PAGE,
|
|
gBrowser,
|
|
},
|
|
async browser => {
|
|
let videoID = "with-controls";
|
|
|
|
await ensureVideosReady(browser);
|
|
|
|
let emptied = SpecialPowers.spawn(browser, [{ videoID }], async args => {
|
|
let video = content.document.getElementById(args.videoID);
|
|
info("Waiting for emptied event to be called");
|
|
await ContentTaskUtils.waitForEvent(video, "emptied");
|
|
});
|
|
|
|
let pipWin = await triggerPictureInPicture(browser, videoID);
|
|
ok(pipWin, "Got Picture-in-Picture window.");
|
|
|
|
let pipClosed = BrowserTestUtils.domWindowClosed(pipWin);
|
|
await SpecialPowers.spawn(browser, [{ videoID }], async args => {
|
|
let video = content.document.getElementById(args.videoID);
|
|
video.removeAttribute("src");
|
|
video.load();
|
|
});
|
|
await emptied;
|
|
await pipClosed;
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Tests that the pip window closes when navigating to another page
|
|
* via the pagehide page lifecycle event.
|
|
*/
|
|
add_task(async function test_close_pagehide() {
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
url: TEST_PAGE,
|
|
gBrowser,
|
|
},
|
|
async browser => {
|
|
let videoID = "with-controls";
|
|
|
|
await ensureVideosReady(browser);
|
|
await SpecialPowers.spawn(browser, [{ videoID }], async args => {
|
|
let video = content.document.getElementById(args.videoID);
|
|
video.onemptied = () => {
|
|
// Since we handle pagehide first, handle emptied should not be invoked
|
|
ok(false, "emptied not expected to be called");
|
|
};
|
|
});
|
|
|
|
let pipWin = await triggerPictureInPicture(browser, videoID);
|
|
ok(pipWin, "Got Picture-in-Picture window.");
|
|
|
|
let pipClosed = BrowserTestUtils.domWindowClosed(pipWin);
|
|
await SpecialPowers.spawn(browser, [{ videoID }], async () => {
|
|
content.location.href = "otherpage.html";
|
|
});
|
|
|
|
await pipClosed;
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Tests that the pip window remains open if the pagehide page lifecycle
|
|
* event is not detected and if the video is still loaded with a src.
|
|
*/
|
|
add_task(async function test_open_pip_window_history_nav() {
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
url: TEST_PAGE,
|
|
gBrowser,
|
|
},
|
|
async browser => {
|
|
let videoID = "with-controls";
|
|
|
|
await ensureVideosReady(browser);
|
|
|
|
let pipWin = await triggerPictureInPicture(browser, videoID);
|
|
ok(pipWin, "Got Picture-in-Picture window.");
|
|
|
|
await SpecialPowers.spawn(browser, [{ videoID }], async () => {
|
|
let popStatePromise = ContentTaskUtils.waitForEvent(
|
|
content,
|
|
"popstate"
|
|
);
|
|
content.history.pushState({}, "new page", "test-page-with-sound.html");
|
|
content.history.back();
|
|
await popStatePromise;
|
|
});
|
|
|
|
ok(!pipWin.closed, "pip windows should still be open");
|
|
|
|
let pipClosed = BrowserTestUtils.domWindowClosed(pipWin);
|
|
let closeButton = pipWin.document.getElementById("close");
|
|
EventUtils.synthesizeMouseAtCenter(closeButton, {}, pipWin);
|
|
await pipClosed;
|
|
}
|
|
);
|
|
});
|