diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
commit | 4fb11cd5966461bccc3ed1599b808237be6b0de9 (patch) | |
tree | d7f0ccd49cebb3544d52635ff1bd6ed4d763823f /toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js | |
parent | f164d9124708b50789dbb6959e1de96cc5697c48 (diff) | |
download | UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.gz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.lz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.xz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.zip |
Move WebExtensions enabled Add-ons Manager
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js b/toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js new file mode 100644 index 000000000..eb1bb78b3 --- /dev/null +++ b/toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js @@ -0,0 +1,136 @@ +// Disable update security +Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false); +gUseRealCertChecks = true; + +const DATA = "data/signing_checks/"; +const ID = "test@tests.mozilla.org"; + +Components.utils.import("resource://testing-common/httpd.js"); +var gServer = new HttpServer(); +gServer.start(); + +gServer.registerPathHandler("/update.rdf", function(request, response) { + let updateData = {}; + updateData[ID] = [{ + version: "2.0", + targetApplications: [{ + id: "xpcshell@tests.mozilla.org", + minVersion: "4", + maxVersion: "6" + }] + }]; + + response.setStatusLine(request.httpVersion, 200, "OK"); + response.write(createUpdateRDF(updateData)); +}); + +const SERVER = "127.0.0.1:" + gServer.identity.primaryPort; +Services.prefs.setCharPref("extensions.update.background.url", "http://" + SERVER + "/update.rdf"); + +function verifySignatures() { + return new Promise(resolve => { + let observer = (subject, topic, data) => { + Services.obs.removeObserver(observer, "xpi-signature-changed"); + resolve(JSON.parse(data)); + } + Services.obs.addObserver(observer, "xpi-signature-changed", false); + + do_print("Verifying signatures"); + let XPIscope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); + XPIscope.XPIProvider.verifySignatures(); + }); +} + +function run_test() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "4", "4"); + + // Start and stop the manager to initialise everything in the profile before + // actual testing + startupManager(); + shutdownManager(); + + run_next_test(); +} + +// Updating the pref without changing the app version won't disable add-ons +// immediately but will after a signing check +add_task(function*() { + Services.prefs.setBoolPref(PREF_XPI_SIGNATURES_REQUIRED, false); + startupManager(); + + // Install the signed add-on + yield promiseInstallAllFiles([do_get_file(DATA + "unsigned_bootstrap_2.xpi")]); + + let addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_false(addon.appDisabled); + do_check_true(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + yield promiseShutdownManager(); + + Services.prefs.setBoolPref(PREF_XPI_SIGNATURES_REQUIRED, true); + + startupManager(); + + addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_false(addon.appDisabled); + do_check_true(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + // Update checks shouldn't affect the add-on + yield AddonManagerInternal.backgroundUpdateCheck(); + addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_false(addon.appDisabled); + do_check_true(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + let changes = yield verifySignatures(); + + do_check_eq(changes.disabled.length, 1); + do_check_eq(changes.disabled[0], ID); + + addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_true(addon.appDisabled); + do_check_false(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + addon.uninstall(); + + yield promiseShutdownManager(); +}); + +// Updating the pref with changing the app version will disable add-ons +// immediately +add_task(function*() { + Services.prefs.setBoolPref(PREF_XPI_SIGNATURES_REQUIRED, false); + startupManager(); + + // Install the signed add-on + yield promiseInstallAllFiles([do_get_file(DATA + "unsigned_bootstrap_2.xpi")]); + + let addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_false(addon.appDisabled); + do_check_true(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + yield promiseShutdownManager(); + + Services.prefs.setBoolPref(PREF_XPI_SIGNATURES_REQUIRED, true); + gAppInfo.version = 5.0 + startupManager(true); + + addon = yield promiseAddonByID(ID); + do_check_neq(addon, null); + do_check_true(addon.appDisabled); + do_check_false(addon.isActive); + do_check_eq(addon.signedState, AddonManager.SIGNEDSTATE_MISSING); + + addon.uninstall(); + + yield promiseShutdownManager(); +}); |