Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { ExperimentFakes } = ChromeUtils.importESModule(
);
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();
});