Bug 1297752 - Issue a warning when "*" is used as part of strict_min_version in a WebExtension manifest.json, r?kmag draft
authorBob Silverberg <bsilverberg@mozilla.com>
Mon, 29 Aug 2016 15:10:38 -0400
changeset 408648 9487bcc1ff0e789d7c353e6e517ed13d0fca51b2
parent 408409 b7f7ae14590aced450bb0b0469dfb38edd2c0ace
child 408880 cf6095d76ddab25714b7343554f51a7bc80611c4
push id28265
push userbmo:bob.silverberg@gmail.com
push dateThu, 01 Sep 2016 13:35:39 +0000
reviewerskmag
bugs1297752
milestone51.0a1
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
toolkit/mozapps/extensions/internal/XPIProvider.jsm
toolkit/mozapps/extensions/test/xpcshell/test_webextension_install.js
--- 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);
+  }
 });