summaryrefslogtreecommitdiffstats
path: root/toolkit/components/pictureinpicture/tests/browser_videoEmptied.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/pictureinpicture/tests/browser_videoEmptied.js')
-rw-r--r--toolkit/components/pictureinpicture/tests/browser_videoEmptied.js155
1 files changed, 155 insertions, 0 deletions
diff --git a/toolkit/components/pictureinpicture/tests/browser_videoEmptied.js b/toolkit/components/pictureinpicture/tests/browser_videoEmptied.js
new file mode 100644
index 0000000000..bc96a9ea58
--- /dev/null
+++ b/toolkit/components/pictureinpicture/tests/browser_videoEmptied.js
@@ -0,0 +1,155 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests that the subtitles button hides after switching to a video that does not have subtitles
+ */
+add_task(async () => {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [
+ "media.videocontrols.picture-in-picture.display-text-tracks.enabled",
+ true,
+ ],
+ ],
+ });
+
+ let videoID = "with-controls";
+
+ await BrowserTestUtils.withNewTab(
+ {
+ url: TEST_PAGE_WITH_WEBVTT,
+ gBrowser,
+ },
+ async browser => {
+ await prepareVideosAndWebVTTTracks(browser, videoID);
+
+ let pipWin = await triggerPictureInPicture(browser, videoID);
+ ok(pipWin, "Got Picture-in-Picture window.");
+
+ // Need to make sure that the PiP window is at least the minimum height
+ let multiplier = 1;
+ while (true) {
+ if (multiplier * pipWin.innerHeight > 325) {
+ break;
+ }
+ multiplier += 0.5;
+ }
+
+ pipWin.moveTo(50, 50);
+ pipWin.resizeTo(
+ pipWin.innerWidth * multiplier,
+ pipWin.innerHeight * multiplier
+ );
+
+ let subtitlesButton = pipWin.document.querySelector("#closed-caption");
+ await TestUtils.waitForCondition(() => {
+ return !subtitlesButton.disabled;
+ }, "Waiting for subtitles button to be enabled");
+ ok(!subtitlesButton.disabled, "The subtitles button is enabled");
+
+ 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");
+ });
+
+ await SpecialPowers.spawn(browser, [{ videoID }], async args => {
+ let video = content.document.getElementById(args.videoID);
+ video.setAttribute("src", video.src);
+ let len = video.textTracks.length;
+ for (let i = 0; i < len; i++) {
+ video.removeChild(video.children[0]);
+ }
+ video.load();
+ });
+
+ await emptied;
+
+ await TestUtils.waitForCondition(() => {
+ return subtitlesButton.disabled;
+ }, "Waiting for subtitles button to be disabled after it was enabled");
+ ok(subtitlesButton.disabled, "The subtitles button is disabled");
+
+ await BrowserTestUtils.closeWindow(pipWin);
+ }
+ );
+});
+
+/**
+ * Tests the the subtitles button shows after switching from a video with no subtitles to a video with subtitles
+ */
+add_task(async () => {
+ const videoID = "with-controls";
+ const videoID2 = "with-controls-no-tracks";
+
+ await BrowserTestUtils.withNewTab(
+ {
+ url: TEST_PAGE_WITH_WEBVTT,
+ gBrowser,
+ },
+ async browser => {
+ let pipWin = await triggerPictureInPicture(browser, videoID2);
+ ok(pipWin, "Got Picture-in-Picture window.");
+
+ // Need to make sure that the PiP window is at least the minimum height
+ let multiplier = 1;
+ while (true) {
+ if (multiplier * pipWin.innerHeight > 325) {
+ break;
+ }
+ multiplier += 0.5;
+ }
+
+ pipWin.moveTo(50, 50);
+ pipWin.resizeTo(
+ pipWin.innerWidth * multiplier,
+ pipWin.innerHeight * multiplier
+ );
+
+ let subtitlesButton = pipWin.document.querySelector("#closed-caption");
+ await TestUtils.waitForCondition(() => {
+ return subtitlesButton.disabled;
+ }, "Making sure the subtitles button is disabled initially");
+ ok(subtitlesButton.disabled, "The subtitles button is disabled");
+
+ await SpecialPowers.spawn(
+ browser,
+ [{ videoID, videoID2 }],
+ async args => {
+ let video2 = content.document.getElementById(args.videoID2);
+
+ let track = video2.addTextTrack("captions", "English", "en");
+ track.mode = "showing";
+ track.addCue(
+ new content.window.VTTCue(0, 12, "[Test] This is the first cue")
+ );
+ track.addCue(
+ new content.window.VTTCue(18.7, 21.5, "This is the second cue")
+ );
+
+ video2.setAttribute("src", video2.src);
+ video2.load();
+
+ is(
+ video2.textTracks.length,
+ 1,
+ "Number of tracks loaded should be 1"
+ );
+ video2.play();
+ video2.pause();
+ }
+ );
+
+ subtitlesButton = pipWin.document.querySelector("#closed-caption");
+ await TestUtils.waitForCondition(() => {
+ return !subtitlesButton.disabled;
+ }, "Waiting for the subtitles button to be enabled after switching to a video with subtitles.");
+ ok(!subtitlesButton.disabled, "The subtitles button is enabled");
+
+ await BrowserTestUtils.closeWindow(pipWin);
+ }
+ );
+});