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