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 });