tor-browser

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

test_addon_update.js (4169B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { AddonTestUtils } = ChromeUtils.importESModule(
      7  "resource://testing-common/AddonTestUtils.sys.mjs"
      8 );
      9 const { AddonManager } = ChromeUtils.importESModule(
     10  "resource://gre/modules/AddonManager.sys.mjs"
     11 );
     12 
     13 AddonTestUtils.init(this);
     14 AddonTestUtils.overrideCertDB();
     15 AddonTestUtils.appInfo = getAppInfo();
     16 ExtensionTestUtils.init(this);
     17 
     18 const server = AddonTestUtils.createHttpServer({ hosts: ["example.com"] });
     19 const BASE_URL = `http://example.com/data`;
     20 
     21 let TEST_NAME = "updatable.xpi";
     22 
     23 /* Test that when a local file addon is updated,
     24   the new version gets installed. */
     25 add_task(async function test_local_addon_update() {
     26  await AddonTestUtils.promiseStartupManager();
     27 
     28  let tmpDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
     29  let id = "updatable1@test";
     30  let xpi1 = AddonTestUtils.createTempWebExtensionFile({
     31    manifest: {
     32      version: "1.0",
     33      browser_specific_settings: {
     34        gecko: { id },
     35      },
     36    },
     37  });
     38  xpi1.copyTo(tmpDir, TEST_NAME);
     39  let extension = ExtensionTestUtils.expectExtension(id);
     40  await Promise.all([
     41    extension.awaitStartup(),
     42    setupPolicyEngineWithJson({
     43      policies: {
     44        ExtensionSettings: {
     45          "updatable1@test": {
     46            installation_mode: "force_installed",
     47            install_url: Services.io.newFileURI(tmpDir).spec + "/" + TEST_NAME,
     48          },
     49        },
     50      },
     51    }),
     52  ]);
     53  let addon = await AddonManager.getAddonByID(id);
     54  notEqual(addon, null, "Addon should not be null");
     55  equal(addon.version, "1.0", "Addon 1.0 installed");
     56 
     57  let xpi2 = AddonTestUtils.createTempWebExtensionFile({
     58    manifest: {
     59      version: "2.0",
     60      browser_specific_settings: {
     61        gecko: { id },
     62      },
     63    },
     64  });
     65  // overwrite the test file
     66  xpi2.copyTo(tmpDir, TEST_NAME);
     67 
     68  extension = ExtensionTestUtils.expectExtension(id);
     69  await Promise.all([
     70    extension.awaitStartup(),
     71    setupPolicyEngineWithJson({
     72      policies: {
     73        ExtensionSettings: {
     74          "updatable1@test": {
     75            installation_mode: "force_installed",
     76            install_url: Services.io.newFileURI(tmpDir).spec + "/" + TEST_NAME,
     77          },
     78        },
     79      },
     80    }),
     81  ]);
     82 
     83  addon = await AddonManager.getAddonByID(id);
     84  equal(addon.version, "2.0", "Addon 2.0 installed");
     85 
     86  let xpifile = tmpDir.clone();
     87  xpifile.append(TEST_NAME);
     88  xpifile.remove(false);
     89 });
     90 
     91 /* Test that when the url changes,
     92   the new version gets installed. */
     93 add_task(async function test_newurl_addon_update() {
     94  let id = "updatable2@test";
     95 
     96  let xpi1 = AddonTestUtils.createTempWebExtensionFile({
     97    manifest: {
     98      version: "1.0",
     99      browser_specific_settings: {
    100        gecko: { id },
    101      },
    102    },
    103  });
    104  server.registerFile("/data/policy_test1.xpi", xpi1);
    105 
    106  let xpi2 = AddonTestUtils.createTempWebExtensionFile({
    107    manifest: {
    108      version: "2.0",
    109      browser_specific_settings: {
    110        gecko: { id },
    111      },
    112    },
    113  });
    114  server.registerFile("/data/policy_test2.xpi", xpi2);
    115 
    116  let extension = ExtensionTestUtils.expectExtension(id);
    117  await Promise.all([
    118    extension.awaitStartup(),
    119    setupPolicyEngineWithJson({
    120      policies: {
    121        ExtensionSettings: {
    122          "updatable2@test": {
    123            installation_mode: "force_installed",
    124            install_url: `${BASE_URL}/policy_test1.xpi`,
    125          },
    126        },
    127      },
    128    }),
    129  ]);
    130  let addon = await AddonManager.getAddonByID(id);
    131  notEqual(addon, null, "Addon should not be null");
    132  equal(addon.version, "1.0", "Addon 1.0 installed");
    133 
    134  extension = ExtensionTestUtils.expectExtension(id);
    135  await Promise.all([
    136    extension.awaitStartup(),
    137    setupPolicyEngineWithJson({
    138      policies: {
    139        ExtensionSettings: {
    140          "updatable2@test": {
    141            installation_mode: "force_installed",
    142            install_url: `${BASE_URL}/policy_test2.xpi`,
    143          },
    144        },
    145      },
    146    }),
    147  ]);
    148 
    149  addon = await AddonManager.getAddonByID(id);
    150  equal(addon.version, "2.0", "Addon 2.0 installed");
    151 
    152  await AddonTestUtils.promiseShutdownManager();
    153 });