tor-browser

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

test_addons_tracker.js (4458B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { AddonsEngine } = ChromeUtils.importESModule(
      7  "resource://services-sync/engines/addons.sys.mjs"
      8 );
      9 const { Service } = ChromeUtils.importESModule(
     10  "resource://services-sync/service.sys.mjs"
     11 );
     12 
     13 AddonTestUtils.init(this);
     14 AddonTestUtils.createAppInfo(
     15  "xpcshell@tests.mozilla.org",
     16  "XPCShell",
     17  "1",
     18  "1.9.2"
     19 );
     20 AddonTestUtils.overrideCertDB();
     21 
     22 Services.prefs.setBoolPref("extensions.experiments.enabled", true);
     23 
     24 Svc.PrefBranch.setBoolPref("engine.addons", true);
     25 
     26 let reconciler;
     27 let tracker;
     28 
     29 const addon1ID = "addon1@tests.mozilla.org";
     30 
     31 const ADDONS = {
     32  test_addon1: {
     33    manifest: {
     34      browser_specific_settings: { gecko: { id: addon1ID } },
     35    },
     36  },
     37 };
     38 
     39 const XPIS = {};
     40 
     41 async function cleanup() {
     42  tracker.stop();
     43 
     44  tracker.resetScore();
     45  await tracker.clearChangedIDs();
     46 
     47  reconciler._addons = {};
     48  reconciler._changes = [];
     49  await reconciler.saveState();
     50 }
     51 
     52 add_task(async function setup() {
     53  await AddonTestUtils.promiseStartupManager();
     54  for (let [name, data] of Object.entries(ADDONS)) {
     55    XPIS[name] = AddonTestUtils.createTempWebExtensionFile(data);
     56  }
     57  await Service.engineManager.register(AddonsEngine);
     58  let engine = Service.engineManager.get("addons");
     59  reconciler = engine._reconciler;
     60  tracker = engine._tracker;
     61 
     62  await cleanup();
     63 });
     64 
     65 add_task(async function test_empty() {
     66  _("Verify the tracker is empty to start with.");
     67 
     68  Assert.equal(0, Object.keys(await tracker.getChangedIDs()).length);
     69  Assert.equal(0, tracker.score);
     70 
     71  await cleanup();
     72 });
     73 
     74 add_task(async function test_not_tracking() {
     75  _("Ensures the tracker doesn't do anything when it isn't tracking.");
     76 
     77  let addon = await installAddon(XPIS.test_addon1, reconciler);
     78  await uninstallAddon(addon, reconciler);
     79 
     80  Assert.equal(0, Object.keys(await tracker.getChangedIDs()).length);
     81  Assert.equal(0, tracker.score);
     82 
     83  await cleanup();
     84 });
     85 
     86 add_task(async function test_track_install() {
     87  _("Ensure that installing an add-on notifies tracker.");
     88 
     89  reconciler.startListening();
     90 
     91  tracker.start();
     92 
     93  Assert.equal(0, tracker.score);
     94  let addon = await installAddon(XPIS.test_addon1, reconciler);
     95  let changed = await tracker.getChangedIDs();
     96 
     97  Assert.equal(1, Object.keys(changed).length);
     98  Assert.ok(addon.syncGUID in changed);
     99  Assert.equal(SCORE_INCREMENT_XLARGE, tracker.score);
    100 
    101  await uninstallAddon(addon, reconciler);
    102  await cleanup();
    103 });
    104 
    105 add_task(async function test_track_uninstall() {
    106  _("Ensure that uninstalling an add-on notifies tracker.");
    107 
    108  reconciler.startListening();
    109 
    110  let addon = await installAddon(XPIS.test_addon1, reconciler);
    111  let guid = addon.syncGUID;
    112  Assert.equal(0, tracker.score);
    113 
    114  tracker.start();
    115 
    116  await uninstallAddon(addon, reconciler);
    117  let changed = await tracker.getChangedIDs();
    118  Assert.equal(1, Object.keys(changed).length);
    119  Assert.ok(guid in changed);
    120  Assert.equal(SCORE_INCREMENT_XLARGE, tracker.score);
    121 
    122  await cleanup();
    123 });
    124 
    125 add_task(async function test_track_user_disable() {
    126  _("Ensure that tracker sees disabling of add-on");
    127 
    128  reconciler.startListening();
    129 
    130  let addon = await installAddon(XPIS.test_addon1, reconciler);
    131  Assert.ok(!addon.userDisabled);
    132  Assert.ok(!addon.appDisabled);
    133  Assert.ok(addon.isActive);
    134 
    135  tracker.start();
    136  Assert.equal(0, tracker.score);
    137 
    138  _("Disabling add-on");
    139  await addon.disable();
    140  await reconciler.queueCaller.promiseCallsComplete();
    141 
    142  let changed = await tracker.getChangedIDs();
    143  Assert.equal(1, Object.keys(changed).length);
    144  Assert.ok(addon.syncGUID in changed);
    145  Assert.equal(SCORE_INCREMENT_XLARGE, tracker.score);
    146 
    147  await uninstallAddon(addon, reconciler);
    148  await cleanup();
    149 });
    150 
    151 add_task(async function test_track_enable() {
    152  _("Ensure that enabling a disabled add-on notifies tracker.");
    153 
    154  reconciler.startListening();
    155 
    156  let addon = await installAddon(XPIS.test_addon1, reconciler);
    157  await addon.disable();
    158  await Async.promiseYield();
    159 
    160  Assert.equal(0, tracker.score);
    161 
    162  tracker.start();
    163  await addon.enable();
    164  await Async.promiseYield();
    165  await reconciler.queueCaller.promiseCallsComplete();
    166 
    167  let changed = await tracker.getChangedIDs();
    168  Assert.equal(1, Object.keys(changed).length);
    169  Assert.ok(addon.syncGUID in changed);
    170  Assert.equal(SCORE_INCREMENT_XLARGE, tracker.score);
    171 
    172  await uninstallAddon(addon, reconciler);
    173  await cleanup();
    174 });