From 2969add02b93c8e6b7c18b2e9be253d5efc65763 Mon Sep 17 00:00:00 2001 From: Mark Striemer Date: Mon, 10 Feb 2020 16:09:39 +0000 Subject: [PATCH] Bug 1611186 - Pause video when PiP close button is pressed r=mconley Differential Revision: https://phabricator.services.mozilla.com/D61614 --HG-- extra : moz-landing-system : lando --- .../pictureinpicture/content/player.js | 1 + .../pictureinpicture/tests/browser.ini | 1 + .../tests/browser_closePlayer.js | 53 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 toolkit/components/pictureinpicture/tests/browser_closePlayer.js diff --git a/toolkit/components/pictureinpicture/content/player.js b/toolkit/components/pictureinpicture/content/player.js index a4bd573ac94b..4b4bd0f65eb7 100644 --- a/toolkit/components/pictureinpicture/content/player.js +++ b/toolkit/components/pictureinpicture/content/player.js @@ -227,6 +227,7 @@ let Player = { } case "close": { + this.actor.sendAsyncMessage("PictureInPicture:Pause"); PictureInPicture.closePipWindow({ reason: "close-button" }); break; } diff --git a/toolkit/components/pictureinpicture/tests/browser.ini b/toolkit/components/pictureinpicture/tests/browser.ini index ef6a9c6278eb..7f88cf4a227d 100644 --- a/toolkit/components/pictureinpicture/tests/browser.ini +++ b/toolkit/components/pictureinpicture/tests/browser.ini @@ -21,6 +21,7 @@ prefs = [browser_cannotTriggerFromContent.js] [browser_contextMenu.js] +[browser_closePlayer.js] [browser_closeTab.js] [browser_disabledForMediaStreamVideos.js] [browser_fullscreen.js] diff --git a/toolkit/components/pictureinpicture/tests/browser_closePlayer.js b/toolkit/components/pictureinpicture/tests/browser_closePlayer.js new file mode 100644 index 000000000000..dfcc206c3279 --- /dev/null +++ b/toolkit/components/pictureinpicture/tests/browser_closePlayer.js @@ -0,0 +1,53 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests that closing with unpip leaves the video playing but the close button + * will pause the video. + */ +add_task(async () => { + for (let videoID of ["with-controls", "no-controls"]) { + info(`Testing ${videoID} case.`); + + let playVideo = () => { + return SpecialPowers.spawn(browser, [videoID], async videoID => { + return content.document.getElementById(videoID).play(); + }); + }; + let isVideoPaused = () => { + return SpecialPowers.spawn(browser, [videoID], async videoID => { + return content.document.getElementById(videoID).paused; + }); + }; + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE); + let browser = tab.linkedBrowser; + await playVideo(); + + // Try the unpip button. + let pipWin = await triggerPictureInPicture(browser, videoID); + ok(pipWin, "Got Picture-in-Picture window."); + ok(!(await isVideoPaused()), "The video is not paused"); + + let pipClosed = BrowserTestUtils.domWindowClosed(pipWin); + let unpipButton = pipWin.document.getElementById("unpip"); + EventUtils.synthesizeMouseAtCenter(unpipButton, {}, pipWin); + await pipClosed; + ok(!(await isVideoPaused()), "The video is not paused"); + + // Try the close button. + pipWin = await triggerPictureInPicture(browser, videoID); + ok(pipWin, "Got Picture-in-Picture window."); + ok(!(await isVideoPaused()), "The video is not paused"); + + pipClosed = BrowserTestUtils.domWindowClosed(pipWin); + let closeButton = pipWin.document.getElementById("close"); + EventUtils.synthesizeMouseAtCenter(closeButton, {}, pipWin); + await pipClosed; + ok(await isVideoPaused(), "The video is paused"); + + BrowserTestUtils.removeTab(tab); + } +});