244 lines
7.5 KiB
JavaScript
244 lines
7.5 KiB
JavaScript
"use strict";
|
|
|
|
const kEnabledPref = "browser.laterrun.enabled";
|
|
const kPagePrefRoot = "browser.laterrun.pages.";
|
|
const kSessionCountPref = "browser.laterrun.bookkeeping.sessionCount";
|
|
const kProfileCreationTime = "browser.laterrun.bookkeeping.profileCreationTime";
|
|
|
|
const { LaterRun } = ChromeUtils.importESModule(
|
|
"resource:///modules/LaterRun.sys.mjs"
|
|
);
|
|
|
|
Services.prefs.setBoolPref(kEnabledPref, true);
|
|
const { updateAppInfo } = ChromeUtils.importESModule(
|
|
"resource://testing-common/AppInfo.sys.mjs"
|
|
);
|
|
updateAppInfo();
|
|
|
|
add_task(async function test_page_applies() {
|
|
Services.prefs.setCharPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.url",
|
|
"https://www.mozilla.org/%VENDOR%/%NAME%/%ID%/%VERSION%/"
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
|
|
10
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
|
|
3
|
|
);
|
|
|
|
let pages = LaterRun.readPages();
|
|
// We have to filter the pages because it's possible Firefox ships with other URLs
|
|
// that get included in this test.
|
|
pages = pages.filter(
|
|
page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
|
|
);
|
|
Assert.equal(pages.length, 1, "Got 1 page");
|
|
let page = pages[0];
|
|
Assert.equal(
|
|
page.pref,
|
|
kPagePrefRoot + "test_LaterRun_unittest.",
|
|
"Should know its own pref"
|
|
);
|
|
Assert.equal(
|
|
page.minimumHoursSinceInstall,
|
|
10,
|
|
"Needs to have 10 hours since install"
|
|
);
|
|
Assert.equal(page.minimumSessionCount, 3, "Needs to have 3 sessions");
|
|
Assert.equal(page.requireBoth, false, "Either requirement is enough");
|
|
let expectedURL =
|
|
"https://www.mozilla.org/" +
|
|
Services.appinfo.vendor +
|
|
"/" +
|
|
Services.appinfo.name +
|
|
"/" +
|
|
Services.appinfo.ID +
|
|
"/" +
|
|
Services.appinfo.version +
|
|
"/";
|
|
Assert.equal(page.url, expectedURL, "URL is stored correctly");
|
|
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
|
|
"Applies when session count has been met."
|
|
);
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
|
|
"Applies when session count has been exceeded."
|
|
);
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
|
|
"Applies when total session time has been met."
|
|
);
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
|
|
"Applies when total session time has been exceeded."
|
|
);
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
|
|
"Applies when both time and session count have been met."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
|
|
"Does not apply when neither time and session count have been met."
|
|
);
|
|
|
|
page.requireBoth = true;
|
|
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
|
|
"Does not apply when only session count has been met."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
|
|
"Does not apply when only session count has been exceeded."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
|
|
"Does not apply when only total session time has been met."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
|
|
"Does not apply when only total session time has been exceeded."
|
|
);
|
|
Assert.ok(
|
|
page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
|
|
"Applies when both time and session count have been met."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
|
|
"Does not apply when neither time and session count have been met."
|
|
);
|
|
|
|
// Check that pages that have run never apply:
|
|
Services.prefs.setBoolPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.hasRun",
|
|
true
|
|
);
|
|
page.requireBoth = false;
|
|
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
|
|
"Does not apply when page has already run (sessionCount equal)."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
|
|
"Does not apply when page has already run (sessionCount exceeding)."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
|
|
"Does not apply when page has already run (hoursSinceInstall equal)."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
|
|
"Does not apply when page has already run (hoursSinceInstall exceeding)."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
|
|
"Does not apply when page has already run (both criteria equal)."
|
|
);
|
|
Assert.ok(
|
|
!page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
|
|
"Does not apply when page has already run (both criteria insufficient anyway)."
|
|
);
|
|
|
|
clearAllPagePrefs();
|
|
});
|
|
|
|
add_task(async function test_get_URL() {
|
|
Services.prefs.setIntPref(
|
|
kProfileCreationTime,
|
|
Math.floor((Date.now() - 11 * 60 * 60 * 1000) / 1000)
|
|
);
|
|
Services.prefs.setCharPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.url",
|
|
"https://www.mozilla.org/"
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
|
|
10
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
|
|
3
|
|
);
|
|
let pages = LaterRun.readPages();
|
|
// We have to filter the pages because it's possible Firefox ships with other URLs
|
|
// that get included in this test.
|
|
pages = pages.filter(
|
|
page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
|
|
);
|
|
Assert.equal(pages.length, 1, "Should only be 1 matching page");
|
|
let page = pages[0];
|
|
let url;
|
|
do {
|
|
url = LaterRun.getURL();
|
|
// We have to loop because it's possible Firefox ships with other URLs that get triggered by
|
|
// this test.
|
|
} while (url && url != "https://www.mozilla.org/");
|
|
Assert.equal(
|
|
url,
|
|
"https://www.mozilla.org/",
|
|
"URL should be as expected when prefs are set."
|
|
);
|
|
Assert.ok(
|
|
Services.prefs.prefHasUserValue(
|
|
kPagePrefRoot + "test_LaterRun_unittest.hasRun"
|
|
),
|
|
"Should have set pref"
|
|
);
|
|
Assert.ok(
|
|
Services.prefs.getBoolPref(kPagePrefRoot + "test_LaterRun_unittest.hasRun"),
|
|
"Should have set pref to true"
|
|
);
|
|
Assert.ok(page.hasRun, "Other page objects should know it has run, too.");
|
|
|
|
clearAllPagePrefs();
|
|
});
|
|
|
|
add_task(async function test_insecure_urls() {
|
|
Services.prefs.setCharPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.url",
|
|
"http://www.mozilla.org/"
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
|
|
10
|
|
);
|
|
Services.prefs.setIntPref(
|
|
kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
|
|
3
|
|
);
|
|
let pages = LaterRun.readPages();
|
|
// We have to filter the pages because it's possible Firefox ships with other URLs
|
|
// that get triggered in this test.
|
|
pages = pages.filter(
|
|
page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
|
|
);
|
|
Assert.equal(pages.length, 0, "URL with non-https scheme should get ignored");
|
|
clearAllPagePrefs();
|
|
});
|
|
|
|
add_task(async function test_dynamic_pref_getter_setter() {
|
|
delete LaterRun._sessionCount;
|
|
Services.prefs.setIntPref(kSessionCountPref, 0);
|
|
Assert.equal(LaterRun.sessionCount, 0, "Should start at 0");
|
|
|
|
LaterRun.sessionCount++;
|
|
Assert.equal(LaterRun.sessionCount, 1, "Should increment.");
|
|
Assert.equal(
|
|
Services.prefs.getIntPref(kSessionCountPref),
|
|
1,
|
|
"Should update pref"
|
|
);
|
|
});
|
|
|
|
function clearAllPagePrefs() {
|
|
let allChangedPrefs = Services.prefs.getChildList(kPagePrefRoot);
|
|
for (let pref of allChangedPrefs) {
|
|
Services.prefs.clearUserPref(pref);
|
|
}
|
|
}
|