tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_LaterRun.js (7646B)


      1 "use strict";
      2 
      3 const kEnabledPref = "browser.laterrun.enabled";
      4 const kPagePrefRoot = "browser.laterrun.pages.";
      5 const kSessionCountPref = "browser.laterrun.bookkeeping.sessionCount";
      6 const kProfileCreationTime = "browser.laterrun.bookkeeping.profileCreationTime";
      7 
      8 const { LaterRun } = ChromeUtils.importESModule(
      9  "resource:///modules/LaterRun.sys.mjs"
     10 );
     11 
     12 Services.prefs.setBoolPref(kEnabledPref, true);
     13 const { updateAppInfo } = ChromeUtils.importESModule(
     14  "resource://testing-common/AppInfo.sys.mjs"
     15 );
     16 updateAppInfo();
     17 
     18 add_task(async function test_page_applies() {
     19  Services.prefs.setCharPref(
     20    kPagePrefRoot + "test_LaterRun_unittest.url",
     21    "https://www.mozilla.org/%VENDOR%/%NAME%/%ID%/%VERSION%/"
     22  );
     23  Services.prefs.setIntPref(
     24    kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
     25    10
     26  );
     27  Services.prefs.setIntPref(
     28    kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
     29    3
     30  );
     31 
     32  let pages = LaterRun.readPages();
     33  // We have to filter the pages because it's possible Firefox ships with other URLs
     34  // that get included in this test.
     35  pages = pages.filter(
     36    page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
     37  );
     38  Assert.equal(pages.length, 1, "Got 1 page");
     39  let page = pages[0];
     40  Assert.equal(
     41    page.pref,
     42    kPagePrefRoot + "test_LaterRun_unittest.",
     43    "Should know its own pref"
     44  );
     45  Assert.equal(
     46    page.minimumHoursSinceInstall,
     47    10,
     48    "Needs to have 10 hours since install"
     49  );
     50  Assert.equal(page.minimumSessionCount, 3, "Needs to have 3 sessions");
     51  Assert.equal(page.requireBoth, false, "Either requirement is enough");
     52  let expectedURL =
     53    "https://www.mozilla.org/" +
     54    Services.appinfo.vendor +
     55    "/" +
     56    Services.appinfo.name +
     57    "/" +
     58    Services.appinfo.ID +
     59    "/" +
     60    Services.appinfo.version +
     61    "/";
     62  Assert.equal(page.url, expectedURL, "URL is stored correctly");
     63 
     64  Assert.ok(
     65    page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
     66    "Applies when session count has been met."
     67  );
     68  Assert.ok(
     69    page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
     70    "Applies when session count has been exceeded."
     71  );
     72  Assert.ok(
     73    page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
     74    "Applies when total session time has been met."
     75  );
     76  Assert.ok(
     77    page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
     78    "Applies when total session time has been exceeded."
     79  );
     80  Assert.ok(
     81    page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
     82    "Applies when both time and session count have been met."
     83  );
     84  Assert.ok(
     85    !page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
     86    "Does not apply when neither time and session count have been met."
     87  );
     88 
     89  page.requireBoth = true;
     90 
     91  Assert.ok(
     92    !page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
     93    "Does not apply when only session count has been met."
     94  );
     95  Assert.ok(
     96    !page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
     97    "Does not apply when only session count has been exceeded."
     98  );
     99  Assert.ok(
    100    !page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
    101    "Does not apply when only total session time has been met."
    102  );
    103  Assert.ok(
    104    !page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
    105    "Does not apply when only total session time has been exceeded."
    106  );
    107  Assert.ok(
    108    page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
    109    "Applies when both time and session count have been met."
    110  );
    111  Assert.ok(
    112    !page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
    113    "Does not apply when neither time and session count have been met."
    114  );
    115 
    116  // Check that pages that have run never apply:
    117  Services.prefs.setBoolPref(
    118    kPagePrefRoot + "test_LaterRun_unittest.hasRun",
    119    true
    120  );
    121  page.requireBoth = false;
    122 
    123  Assert.ok(
    124    !page.applies({ hoursSinceInstall: 1, sessionCount: 3 }),
    125    "Does not apply when page has already run (sessionCount equal)."
    126  );
    127  Assert.ok(
    128    !page.applies({ hoursSinceInstall: 1, sessionCount: 4 }),
    129    "Does not apply when page has already run (sessionCount exceeding)."
    130  );
    131  Assert.ok(
    132    !page.applies({ hoursSinceInstall: 10, sessionCount: 2 }),
    133    "Does not apply when page has already run (hoursSinceInstall equal)."
    134  );
    135  Assert.ok(
    136    !page.applies({ hoursSinceInstall: 20, sessionCount: 2 }),
    137    "Does not apply when page has already run (hoursSinceInstall exceeding)."
    138  );
    139  Assert.ok(
    140    !page.applies({ hoursSinceInstall: 10, sessionCount: 3 }),
    141    "Does not apply when page has already run (both criteria equal)."
    142  );
    143  Assert.ok(
    144    !page.applies({ hoursSinceInstall: 1, sessionCount: 1 }),
    145    "Does not apply when page has already run (both criteria insufficient anyway)."
    146  );
    147 
    148  clearAllPagePrefs();
    149 });
    150 
    151 add_task(async function test_get_URL() {
    152  Services.prefs.setIntPref(
    153    kProfileCreationTime,
    154    Math.floor((Date.now() - 11 * 60 * 60 * 1000) / 1000)
    155  );
    156  Services.prefs.setCharPref(
    157    kPagePrefRoot + "test_LaterRun_unittest.url",
    158    "https://www.mozilla.org/"
    159  );
    160  Services.prefs.setIntPref(
    161    kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
    162    10
    163  );
    164  Services.prefs.setIntPref(
    165    kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
    166    3
    167  );
    168  let pages = LaterRun.readPages();
    169  // We have to filter the pages because it's possible Firefox ships with other URLs
    170  // that get included in this test.
    171  pages = pages.filter(
    172    page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
    173  );
    174  Assert.equal(pages.length, 1, "Should only be 1 matching page");
    175  let page = pages[0];
    176  let url;
    177  do {
    178    url = LaterRun.getURL();
    179    // We have to loop because it's possible Firefox ships with other URLs that get triggered by
    180    // this test.
    181  } while (url && url != "https://www.mozilla.org/");
    182  Assert.equal(
    183    url,
    184    "https://www.mozilla.org/",
    185    "URL should be as expected when prefs are set."
    186  );
    187  Assert.ok(
    188    Services.prefs.prefHasUserValue(
    189      kPagePrefRoot + "test_LaterRun_unittest.hasRun"
    190    ),
    191    "Should have set pref"
    192  );
    193  Assert.ok(
    194    Services.prefs.getBoolPref(kPagePrefRoot + "test_LaterRun_unittest.hasRun"),
    195    "Should have set pref to true"
    196  );
    197  Assert.ok(page.hasRun, "Other page objects should know it has run, too.");
    198 
    199  clearAllPagePrefs();
    200 });
    201 
    202 add_task(async function test_insecure_urls() {
    203  Services.prefs.setCharPref(
    204    kPagePrefRoot + "test_LaterRun_unittest.url",
    205    "http://www.mozilla.org/"
    206  );
    207  Services.prefs.setIntPref(
    208    kPagePrefRoot + "test_LaterRun_unittest.minimumHoursSinceInstall",
    209    10
    210  );
    211  Services.prefs.setIntPref(
    212    kPagePrefRoot + "test_LaterRun_unittest.minimumSessionCount",
    213    3
    214  );
    215  let pages = LaterRun.readPages();
    216  // We have to filter the pages because it's possible Firefox ships with other URLs
    217  // that get triggered in this test.
    218  pages = pages.filter(
    219    page => page.pref == kPagePrefRoot + "test_LaterRun_unittest."
    220  );
    221  Assert.equal(pages.length, 0, "URL with non-https scheme should get ignored");
    222  clearAllPagePrefs();
    223 });
    224 
    225 add_task(async function test_dynamic_pref_getter_setter() {
    226  delete LaterRun._sessionCount;
    227  Services.prefs.setIntPref(kSessionCountPref, 0);
    228  Assert.equal(LaterRun.sessionCount, 0, "Should start at 0");
    229 
    230  LaterRun.sessionCount++;
    231  Assert.equal(LaterRun.sessionCount, 1, "Should increment.");
    232  Assert.equal(
    233    Services.prefs.getIntPref(kSessionCountPref),
    234    1,
    235    "Should update pref"
    236  );
    237 });
    238 
    239 function clearAllPagePrefs() {
    240  let allChangedPrefs = Services.prefs.getChildList(kPagePrefRoot);
    241  for (let pref of allChangedPrefs) {
    242    Services.prefs.clearUserPref(pref);
    243  }
    244 }