summaryrefslogtreecommitdiffstats
path: root/toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js')
-rw-r--r--toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js214
1 files changed, 214 insertions, 0 deletions
diff --git a/toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js b/toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js
new file mode 100644
index 0000000000..a2e7e66b40
--- /dev/null
+++ b/toolkit/components/pictureinpicture/tests/browser_nimbusDisplayDuration.js
@@ -0,0 +1,214 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { ExperimentFakes } = ChromeUtils.importESModule(
+ "resource://testing-common/NimbusTestUtils.sys.mjs"
+);
+
+const TOGGLE_HAS_USED_PREF =
+ "media.videocontrols.picture-in-picture.video-toggle.has-used";
+const TOGGLE_FIRST_SEEN_PREF =
+ "media.videocontrols.picture-in-picture.video-toggle.first-seen-secs";
+
+/**
+ * This tests that the first-time toggle doesn't change to the icon toggle.
+ */
+add_task(async function test_experiment_control_displayDuration() {
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_PAGE,
+ },
+ async browser => {
+ await SimpleTest.promiseFocus(browser);
+ await ensureVideosReady(browser);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [TOGGLE_FIRST_SEEN_PREF, 0],
+ [TOGGLE_HAS_USED_PREF, false],
+ ],
+ });
+
+ let videoID = "with-controls";
+ await hoverToggle(browser, videoID);
+
+ const hasUsed = Services.prefs.getBoolPref(TOGGLE_HAS_USED_PREF);
+ const firstSeen = Services.prefs.getIntPref(TOGGLE_FIRST_SEEN_PREF);
+
+ Assert.ok(!hasUsed, "has-used is false and toggle is not icon");
+ Assert.notEqual(firstSeen, 0, "First seen should not be 0");
+ }
+ );
+});
+
+/**
+ * This tests that the first-time toggle changes to the icon toggle
+ * if the displayDuration end date is reached or passed.
+ */
+add_task(async function test_experiment_displayDuration_end_date_was_reached() {
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "pictureinpicture",
+ value: {
+ displayDuration: 1,
+ },
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_PAGE,
+ },
+ async browser => {
+ await SimpleTest.promiseFocus(browser);
+ await ensureVideosReady(browser);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [TOGGLE_FIRST_SEEN_PREF, 222],
+ [TOGGLE_HAS_USED_PREF, false],
+ ],
+ });
+
+ let videoID = "with-controls";
+ await hoverToggle(browser, videoID);
+
+ const hasUsed = Services.prefs.getBoolPref(TOGGLE_HAS_USED_PREF);
+ const firstSeen = Services.prefs.getIntPref(TOGGLE_FIRST_SEEN_PREF);
+
+ Assert.ok(hasUsed, "has-used is true and toggle is icon");
+ Assert.equal(firstSeen, 222, "First seen should remain unchanged");
+ }
+ );
+
+ await doExperimentCleanup();
+});
+
+/**
+ * This tests that the first-time toggle does not change to the icon toggle
+ * if the displayDuration end date is not yet reached or passed.
+ */
+add_task(async function test_experiment_displayDuration_end_date_not_reached() {
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "pictureinpicture",
+ value: {
+ displayDuration: 5,
+ },
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_PAGE,
+ },
+ async browser => {
+ await SimpleTest.promiseFocus(browser);
+ await ensureVideosReady(browser);
+
+ const currentDateSec = Math.round(Date.now() / 1000);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [TOGGLE_FIRST_SEEN_PREF, currentDateSec],
+ [TOGGLE_HAS_USED_PREF, false],
+ ],
+ });
+
+ let videoID = "with-controls";
+ await hoverToggle(browser, videoID);
+
+ const hasUsed = Services.prefs.getBoolPref(TOGGLE_HAS_USED_PREF);
+ const firstSeen = Services.prefs.getIntPref(TOGGLE_FIRST_SEEN_PREF);
+
+ Assert.ok(!hasUsed, "has-used is false and toggle is not icon");
+ Assert.equal(
+ firstSeen,
+ currentDateSec,
+ "First seen should remain unchanged"
+ );
+ }
+ );
+
+ await doExperimentCleanup();
+});
+
+/**
+ * This tests that the toggle does not change to the icon toggle if duration is negative.
+ */
+add_task(async function test_experiment_displayDuration_negative_duration() {
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "pictureinpicture",
+ value: {
+ displayDuration: -1,
+ },
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_PAGE,
+ },
+ async browser => {
+ await SimpleTest.promiseFocus(browser);
+ await ensureVideosReady(browser);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [TOGGLE_FIRST_SEEN_PREF, 0],
+ [TOGGLE_HAS_USED_PREF, false],
+ ],
+ });
+
+ let videoID = "with-controls";
+ await hoverToggle(browser, videoID);
+
+ const hasUsed = Services.prefs.getBoolPref(TOGGLE_HAS_USED_PREF);
+ const firstSeen = Services.prefs.getIntPref(TOGGLE_FIRST_SEEN_PREF);
+
+ Assert.ok(!hasUsed, "has-used is false and toggle is not icon");
+ Assert.notEqual(firstSeen, 0, "First seen should not be 0");
+ }
+ );
+
+ await doExperimentCleanup();
+});
+
+/**
+ * This tests that first-seen is only recorded for the first-time toggle.
+ */
+add_task(async function test_experiment_displayDuration_already_icon() {
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "pictureinpicture",
+ value: {
+ displayDuration: 1,
+ },
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_PAGE,
+ },
+ async browser => {
+ await SimpleTest.promiseFocus(browser);
+ await ensureVideosReady(browser);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [TOGGLE_FIRST_SEEN_PREF, 0],
+ [TOGGLE_HAS_USED_PREF, true],
+ ],
+ });
+
+ let videoID = "with-controls";
+ await hoverToggle(browser, videoID);
+
+ const firstSeen = Services.prefs.getIntPref(TOGGLE_FIRST_SEEN_PREF);
+ Assert.equal(firstSeen, 0, "First seen should be 0");
+ }
+ );
+
+ await doExperimentCleanup();
+});