forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			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);
 | 
						|
  }
 | 
						|
}
 |