summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js')
-rw-r--r--toolkit/mozapps/webextensions/test/xpcshell/test_signed_updatepref.js136
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();
+});