tor-browser

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

test_ext_url_overrides_newtab_update.js (3066B)


      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 { AboutNewTab } = ChromeUtils.importESModule(
      6  "resource:///modules/AboutNewTab.sys.mjs"
      7 );
      8 
      9 const { AddonTestUtils } = ChromeUtils.importESModule(
     10  "resource://testing-common/AddonTestUtils.sys.mjs"
     11 );
     12 
     13 const {
     14  createAppInfo,
     15  createTempWebExtensionFile,
     16  promiseCompleteAllInstalls,
     17  promiseFindAddonUpdates,
     18  promiseShutdownManager,
     19  promiseStartupManager,
     20 } = AddonTestUtils;
     21 
     22 AddonTestUtils.init(this);
     23 
     24 // Allow for unsigned addons.
     25 AddonTestUtils.overrideCertDB();
     26 
     27 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "42", "42");
     28 
     29 add_task(async function test_url_overrides_newtab_update() {
     30  const EXTENSION_ID = "test_url_overrides_update@tests.mozilla.org";
     31  const NEWTAB_URI = "webext-newtab-1.html";
     32  const PREF_EM_CHECK_UPDATE_SECURITY = "extensions.checkUpdateSecurity";
     33 
     34  const testServer = createHttpServer();
     35  const port = testServer.identity.primaryPort;
     36 
     37  // The test extension uses an insecure update url.
     38  Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
     39 
     40  testServer.registerPathHandler("/test_update.json", (request, response) => {
     41    response.write(`{
     42      "addons": {
     43        "${EXTENSION_ID}": {
     44          "updates": [
     45            {
     46              "version": "2.0",
     47              "update_link": "http://localhost:${port}/addons/test_url_overrides-2.0.xpi"
     48            }
     49          ]
     50        }
     51      }
     52    }`);
     53  });
     54 
     55  let webExtensionFile = createTempWebExtensionFile({
     56    manifest: {
     57      version: "2.0",
     58      browser_specific_settings: {
     59        gecko: {
     60          id: EXTENSION_ID,
     61        },
     62      },
     63    },
     64  });
     65 
     66  testServer.registerFile(
     67    "/addons/test_url_overrides-2.0.xpi",
     68    webExtensionFile
     69  );
     70 
     71  await promiseStartupManager();
     72 
     73  let extension = ExtensionTestUtils.loadExtension({
     74    useAddonManager: "permanent",
     75    manifest: {
     76      version: "1.0",
     77      browser_specific_settings: {
     78        gecko: {
     79          id: EXTENSION_ID,
     80          update_url: `http://localhost:${port}/test_update.json`,
     81        },
     82      },
     83      chrome_url_overrides: { newtab: NEWTAB_URI },
     84    },
     85  });
     86 
     87  let defaultNewTabURL = AboutNewTab.newTabURL;
     88  equal(
     89    AboutNewTab.newTabURL,
     90    defaultNewTabURL,
     91    `Default newtab url is ${defaultNewTabURL}.`
     92  );
     93 
     94  await extension.startup();
     95 
     96  equal(
     97    extension.version,
     98    "1.0",
     99    "The installed addon has the expected version."
    100  );
    101  ok(
    102    AboutNewTab.newTabURL.endsWith(NEWTAB_URI),
    103    "Newtab url is overridden by the extension."
    104  );
    105 
    106  let update = await promiseFindAddonUpdates(extension.addon);
    107  let install = update.updateAvailable;
    108 
    109  await promiseCompleteAllInstalls([install]);
    110 
    111  await extension.awaitStartup();
    112 
    113  equal(
    114    extension.version,
    115    "2.0",
    116    "The updated addon has the expected version."
    117  );
    118  equal(
    119    AboutNewTab.newTabURL,
    120    defaultNewTabURL,
    121    "Newtab url reverted to the default after update."
    122  );
    123 
    124  await extension.unload();
    125 
    126  await promiseShutdownManager();
    127 });