tor-browser

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

test_ext_homepage_overrides_private.js (3734B)


      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 const { HomePage } = ChromeUtils.importESModule(
      9  "resource:///modules/HomePage.sys.mjs"
     10 );
     11 const { ExtensionPermissions } = ChromeUtils.importESModule(
     12  "resource://gre/modules/ExtensionPermissions.sys.mjs"
     13 );
     14 
     15 const { createAppInfo, promiseShutdownManager, promiseStartupManager } =
     16  AddonTestUtils;
     17 
     18 const EXTENSION_ID = "test_overrides@tests.mozilla.org";
     19 const HOMEPAGE_EXTENSION_CONTROLLED =
     20  "browser.startup.homepage_override.extensionControlled";
     21 const HOMEPAGE_PRIVATE_ALLOWED =
     22  "browser.startup.homepage_override.privateAllowed";
     23 const HOMEPAGE_URL_PREF = "browser.startup.homepage";
     24 const HOMEPAGE_URI = "webext-homepage-1.html";
     25 
     26 Services.prefs.setBoolPref("browser.privatebrowsing.autostart", true);
     27 
     28 AddonTestUtils.init(this);
     29 AddonTestUtils.usePrivilegedSignatures = false;
     30 AddonTestUtils.overrideCertDB();
     31 
     32 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
     33 
     34 function promisePrefChange(pref) {
     35  return new Promise(resolve => {
     36    Services.prefs.addObserver(pref, function observer() {
     37      Services.prefs.removeObserver(pref, observer);
     38      resolve(arguments);
     39    });
     40  });
     41 }
     42 
     43 let defaultHomepageURL;
     44 
     45 function verifyPrefSettings(controlled, allowed) {
     46  equal(
     47    Services.prefs.getBoolPref(HOMEPAGE_EXTENSION_CONTROLLED, false),
     48    controlled,
     49    "homepage extension controlled"
     50  );
     51  equal(
     52    Services.prefs.getBoolPref(HOMEPAGE_PRIVATE_ALLOWED, false),
     53    allowed,
     54    "homepage private permission after permission change"
     55  );
     56 
     57  if (controlled && allowed) {
     58    ok(
     59      HomePage.get().endsWith(HOMEPAGE_URI),
     60      "Home page url is overridden by the extension"
     61    );
     62  } else {
     63    equal(HomePage.get(), defaultHomepageURL, "Home page url is default.");
     64  }
     65 }
     66 
     67 async function promiseUpdatePrivatePermission(allowed, extension) {
     68  info(`update private allowed permission`);
     69  await Promise.all([
     70    promisePrefChange(HOMEPAGE_PRIVATE_ALLOWED),
     71    ExtensionPermissions[allowed ? "add" : "remove"](
     72      extension.id,
     73      { permissions: ["internal:privateBrowsingAllowed"], origins: [] },
     74      extension
     75    ),
     76  ]);
     77 
     78  verifyPrefSettings(true, allowed);
     79 }
     80 
     81 add_task(async function test_overrides_private() {
     82  await promiseStartupManager();
     83 
     84  let extensionInfo = {
     85    useAddonManager: "permanent",
     86    manifest: {
     87      version: "1.0",
     88      browser_specific_settings: {
     89        gecko: {
     90          id: EXTENSION_ID,
     91        },
     92      },
     93      chrome_settings_overrides: {
     94        homepage: HOMEPAGE_URI,
     95      },
     96    },
     97  };
     98  let extension = ExtensionTestUtils.loadExtension(extensionInfo);
     99 
    100  defaultHomepageURL = HomePage.get();
    101 
    102  await extension.startup();
    103 
    104  verifyPrefSettings(true, false);
    105 
    106  equal(HomePage.get(), defaultHomepageURL, "Home page url is default.");
    107 
    108  info("add permission to extension");
    109  await promiseUpdatePrivatePermission(true, extension.extension);
    110  info("remove permission from extension");
    111  await promiseUpdatePrivatePermission(false, extension.extension);
    112  // set back to true to test upgrade removing extension control
    113  info("add permission back to prepare for upgrade test");
    114  await promiseUpdatePrivatePermission(true, extension.extension);
    115 
    116  extensionInfo.manifest = {
    117    version: "2.0",
    118    browser_specific_settings: {
    119      gecko: {
    120        id: EXTENSION_ID,
    121      },
    122    },
    123  };
    124 
    125  await Promise.all([
    126    promisePrefChange(HOMEPAGE_URL_PREF),
    127    extension.upgrade(extensionInfo),
    128  ]);
    129 
    130  verifyPrefSettings(false, false);
    131 
    132  await extension.unload();
    133  await promiseShutdownManager();
    134 });