tor-browser

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

test_HomePage_ignore.js (3247B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/
      3 */
      4 
      5 "use strict";
      6 
      7 ChromeUtils.defineESModuleGetters(this, {
      8  HomePage: "resource:///modules/HomePage.sys.mjs",
      9  RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
     10  TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
     11  sinon: "resource://testing-common/Sinon.sys.mjs",
     12 });
     13 
     14 const HOMEPAGE_IGNORELIST = "homepage-urls";
     15 
     16 /**
     17 * Provides a basic set of remote settings for use in tests.
     18 */
     19 async function setupRemoteSettings() {
     20  const settings = await RemoteSettings("hijack-blocklists");
     21  sinon.stub(settings, "get").returns([
     22    {
     23      id: HOMEPAGE_IGNORELIST,
     24      matches: ["ignore=me", "ignoreCASE=ME"],
     25      _status: "synced",
     26    },
     27  ]);
     28 }
     29 
     30 add_task(async function setup() {
     31  await setupRemoteSettings();
     32 });
     33 
     34 add_task(async function test_initWithIgnoredPageCausesReset() {
     35  // Set the preference direct as the set() would block us.
     36  Services.prefs.setStringPref(
     37    "browser.startup.homepage",
     38    "http://bad/?ignore=me"
     39  );
     40  Assert.ok(HomePage.overridden, "Should have overriden the homepage");
     41 
     42  await HomePage.delayedStartup();
     43 
     44  Assert.ok(
     45    !HomePage.overridden,
     46    "Should no longer be overriding the homepage."
     47  );
     48  Assert.equal(
     49    HomePage.get(),
     50    HomePage.getDefault(),
     51    "Should have reset to the default preference"
     52  );
     53 
     54  TelemetryTestUtils.assertEvents(
     55    [{ object: "ignore", value: "saved_reset" }],
     56    {
     57      category: "homepage",
     58      method: "preference",
     59    }
     60  );
     61 });
     62 
     63 add_task(async function test_updateIgnoreListCausesReset() {
     64  Services.prefs.setStringPref(
     65    "browser.startup.homepage",
     66    "http://bad/?new=ignore"
     67  );
     68  Assert.ok(HomePage.overridden, "Should have overriden the homepage");
     69 
     70  // Simulate an ignore list update.
     71  await RemoteSettings("hijack-blocklists").emit("sync", {
     72    data: {
     73      current: [
     74        {
     75          id: HOMEPAGE_IGNORELIST,
     76          schema: 1553857697843,
     77          last_modified: 1553859483588,
     78          matches: ["ignore=me", "ignoreCASE=ME", "new=ignore"],
     79        },
     80      ],
     81    },
     82  });
     83 
     84  Assert.ok(
     85    !HomePage.overridden,
     86    "Should no longer be overriding the homepage."
     87  );
     88  Assert.equal(
     89    HomePage.get(),
     90    HomePage.getDefault(),
     91    "Should have reset to the default preference"
     92  );
     93  TelemetryTestUtils.assertEvents(
     94    [{ object: "ignore", value: "saved_reset" }],
     95    {
     96      category: "homepage",
     97      method: "preference",
     98    }
     99  );
    100 });
    101 
    102 async function testSetIgnoredUrl(url) {
    103  Assert.ok(!HomePage.overriden, "Should not be overriding the homepage");
    104 
    105  await HomePage.set(url);
    106 
    107  Assert.equal(
    108    HomePage.get(),
    109    HomePage.getDefault(),
    110    "Should still have the default homepage."
    111  );
    112  Assert.ok(!HomePage.overriden, "Should not be overriding the homepage.");
    113  TelemetryTestUtils.assertEvents(
    114    [{ object: "ignore", value: "set_blocked" }],
    115    {
    116      category: "homepage",
    117      method: "preference",
    118    }
    119  );
    120 }
    121 
    122 add_task(async function test_setIgnoredUrl() {
    123  await testSetIgnoredUrl("http://bad/?ignore=me");
    124 });
    125 
    126 add_task(async function test_setIgnoredUrl_case() {
    127  await testSetIgnoredUrl("http://bad/?Ignorecase=me");
    128 });