Bug 1297752 - Issue a warning when "*" is used as part of strict_min_version in a WebExtension manifest.json, r?kmag
MozReview-Commit-ID: 9BKjBe2Gigo
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -924,16 +924,21 @@ var loadManifestFromWebManifest = Task.a
throw new Error("Extension is invalid");
let bss = (manifest.browser_specific_settings && manifest.browser_specific_settings.gecko)
|| (manifest.applications && manifest.applications.gecko) || {};
if (manifest.browser_specific_settings && manifest.applications) {
logger.warn("Ignoring applications property in manifest");
}
+ // A * is illegal in strict_min_version
+ if (bss.strict_min_version && bss.strict_min_version.split(".").some(part => part == "*")) {
+ logger.warn("The use of '*' in strict_min_version is deprecated");
+ }
+
let addon = new AddonInternal();
addon.id = bss.id;
addon.version = manifest.version;
addon.type = "webextension";
addon.unpack = false;
addon.strictCompatibility = true;
addon.bootstrap = true;
addon.hasBinaryComponents = false;
--- a/toolkit/mozapps/extensions/test/xpcshell/test_webextension_install.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_webextension_install.js
@@ -358,9 +358,40 @@ add_task(function* test_strict_min_max()
yield AddonManager.installTemporaryAddon(addonDir);
addon = yield promiseAddonByID(newId);
do_check_neq(addon, null);
do_check_eq(addon.id, newId);
addon.uninstall();
flushAndRemove(addonDir);
+
+ // * in min will generate a warning
+ for (let version of ["0.*", "0.*.0"]) {
+ newId = "strict_min_star@tests.mozilla.org";
+ let apps = {
+ applications: {
+ gecko: {
+ id: newId,
+ strict_min_version: version,
+ },
+ },
+ }
+ let testManifest = Object.assign(apps, MANIFEST);
+
+ let addonDir = yield promiseWriteWebManifestForExtension(testManifest, gTmpD,
+ "strict_min_star");
+
+ let { messages } = yield promiseConsoleOutput(function* () {
+ yield AddonManager.installTemporaryAddon(addonDir);
+ });
+ ok(messages.some(msg => msg.message.includes("The use of '*' in strict_min_version is deprecated")),
+ "Deprecation warning for strict_min_version with '*' was generated");
+
+ let addon = yield promiseAddonByID(newId);
+
+ notEqual(addon, null, "Add-on is installed");
+ equal(addon.id, newId, "Add-on has the expected id");
+
+ addon.uninstall();
+ flushAndRemove(addonDir);
+ }
});