tor-browser

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

test_ext_chrome_settings_overrides_home.js (5882B)


      1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set sts=2 sw=2 et tw=80: */
      3 "use strict";
      4 
      5 const { AddonTestUtils } = ChromeUtils.importESModule(
      6  "resource://testing-common/AddonTestUtils.sys.mjs"
      7 );
      8 
      9 ChromeUtils.defineESModuleGetters(this, {
     10  HomePage: "resource:///modules/HomePage.sys.mjs",
     11  RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
     12  TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
     13  sinon: "resource://testing-common/Sinon.sys.mjs",
     14 });
     15 
     16 function promisePrefChanged(expectedValue) {
     17  return TestUtils.waitForPrefChange("browser.startup.homepage", value =>
     18    value.endsWith(expectedValue)
     19  );
     20 }
     21 
     22 const HOMEPAGE_EXTENSION_CONTROLLED =
     23  "browser.startup.homepage_override.extensionControlled";
     24 
     25 AddonTestUtils.init(this);
     26 AddonTestUtils.overrideCertDB();
     27 
     28 AddonTestUtils.createAppInfo(
     29  "xpcshell@tests.mozilla.org",
     30  "XPCShell",
     31  "1",
     32  "42"
     33 );
     34 
     35 async function setupRemoteSettings() {
     36  const settings = await RemoteSettings("hijack-blocklists");
     37  sinon.stub(settings, "get").returns([
     38    {
     39      id: "homepage-urls",
     40      matches: ["ignore=me"],
     41      _status: "synced",
     42    },
     43  ]);
     44 }
     45 
     46 add_task(async function setup() {
     47  await AddonTestUtils.promiseStartupManager();
     48  await setupRemoteSettings();
     49 });
     50 
     51 add_task(async function test_overriding_with_ignored_url() {
     52  // Manually poke into the ignore list a value to be ignored.
     53  HomePage._ignoreList.push("ignore=me");
     54  Services.prefs.setBoolPref(HOMEPAGE_EXTENSION_CONTROLLED, false);
     55 
     56  let extension = ExtensionTestUtils.loadExtension({
     57    manifest: {
     58      browser_specific_settings: {
     59        gecko: {
     60          id: "ignore_homepage@example.com",
     61        },
     62      },
     63      chrome_settings_overrides: { homepage: "https://example.com/?ignore=me" },
     64      name: "extension",
     65    },
     66    useAddonManager: "temporary",
     67  });
     68 
     69  await extension.startup();
     70 
     71  Assert.ok(HomePage.isDefault, "Should still have the default homepage");
     72  Assert.equal(
     73    Services.prefs.getBoolPref(
     74      "browser.startup.homepage_override.extensionControlled"
     75    ),
     76    false,
     77    "Should not be extension controlled."
     78  );
     79  TelemetryTestUtils.assertEvents(
     80    [
     81      {
     82        object: "ignore",
     83        value: "set_blocked_extension",
     84        extra: { webExtensionId: "ignore_homepage@example.com" },
     85      },
     86    ],
     87    {
     88      category: "homepage",
     89      method: "preference",
     90    }
     91  );
     92 
     93  await extension.unload();
     94  HomePage._ignoreList.pop();
     95 });
     96 
     97 add_task(async function test_overriding_cancelled_after_ignore_update() {
     98  const oldHomePageIgnoreList = HomePage._ignoreList;
     99  let extension = ExtensionTestUtils.loadExtension({
    100    manifest: {
    101      browser_specific_settings: {
    102        gecko: {
    103          id: "ignore_homepage1@example.com",
    104        },
    105      },
    106      chrome_settings_overrides: {
    107        homepage: "https://example.com/?ignore1=me",
    108      },
    109      name: "extension",
    110    },
    111    useAddonManager: "temporary",
    112  });
    113 
    114  await extension.startup();
    115 
    116  Assert.ok(!HomePage.isDefault, "Should have overriden the new homepage");
    117  Assert.equal(
    118    Services.prefs.getBoolPref(
    119      "browser.startup.homepage_override.extensionControlled"
    120    ),
    121    true,
    122    "Should be extension controlled."
    123  );
    124 
    125  let prefChanged = TestUtils.waitForPrefChange(
    126    "browser.startup.homepage_override.extensionControlled"
    127  );
    128 
    129  await HomePage._handleIgnoreListUpdated({
    130    data: {
    131      current: [{ id: "homepage-urls", matches: ["ignore1=me"] }],
    132    },
    133  });
    134 
    135  await prefChanged;
    136 
    137  await TestUtils.waitForCondition(
    138    () =>
    139      !Services.prefs.getBoolPref(
    140        "browser.startup.homepage_override.extensionControlled",
    141        false
    142      ),
    143    "Should not longer be extension controlled"
    144  );
    145 
    146  Assert.ok(HomePage.isDefault, "Should have reset the homepage");
    147 
    148  TelemetryTestUtils.assertEvents(
    149    [
    150      {
    151        object: "ignore",
    152        value: "saved_reset",
    153      },
    154    ],
    155    {
    156      category: "homepage",
    157      method: "preference",
    158    }
    159  );
    160 
    161  await extension.unload();
    162  HomePage._ignoreList = oldHomePageIgnoreList;
    163 });
    164 
    165 add_task(async function test_overriding_homepage_locale() {
    166  Services.locale.availableLocales = ["en-US", "es-ES"];
    167 
    168  let extension = ExtensionTestUtils.loadExtension({
    169    manifest: {
    170      browser_specific_settings: {
    171        gecko: {
    172          id: "homepage@example.com",
    173        },
    174      },
    175      chrome_settings_overrides: {
    176        homepage: "/__MSG_homepage__",
    177      },
    178      name: "extension",
    179      default_locale: "en",
    180    },
    181    useAddonManager: "permanent",
    182 
    183    files: {
    184      "_locales/en/messages.json": {
    185        homepage: {
    186          message: "homepage.html",
    187          description: "homepage",
    188        },
    189      },
    190 
    191      "_locales/es_ES/messages.json": {
    192        homepage: {
    193          message: "default.html",
    194          description: "homepage",
    195        },
    196      },
    197    },
    198  });
    199 
    200  let prefPromise = promisePrefChanged("homepage.html");
    201  await extension.startup();
    202  await prefPromise;
    203 
    204  Assert.equal(
    205    HomePage.get(),
    206    `moz-extension://${extension.uuid}/homepage.html`,
    207    "Should have overridden the new homepage"
    208  );
    209 
    210  // Set the new locale now, and disable the L10nRegistry reset
    211  // when shutting down the addon mananger.  This allows us to
    212  // restart under a new locale without a lot of fuss.
    213  let reqLoc = Services.locale.requestedLocales;
    214  Services.locale.requestedLocales = ["es-ES"];
    215 
    216  prefPromise = promisePrefChanged("default.html");
    217  await AddonTestUtils.promiseShutdownManager({ clearL10nRegistry: false });
    218  await AddonTestUtils.promiseStartupManager();
    219  await extension.awaitStartup();
    220  await prefPromise;
    221 
    222  Assert.equal(
    223    HomePage.get(),
    224    `moz-extension://${extension.uuid}/default.html`,
    225    "Should have overridden the new homepage"
    226  );
    227 
    228  await extension.unload();
    229 
    230  Services.locale.requestedLocales = reqLoc;
    231 });