summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js b/toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js
new file mode 100644
index 0000000000..aba25173d7
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_json_parser.js
@@ -0,0 +1,108 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(async function test_json_parser() {
+ const ID = "json@test.web.extension";
+
+ let xpi = AddonTestUtils.createTempWebExtensionFile({
+ files: {
+ "manifest.json": String.raw`{
+ // This is a manifest.
+ "manifest_version": 2,
+ "browser_specific_settings": {"gecko": {"id": "${ID}"}},
+ "name": "This \" is // not a comment",
+ "version": "0.1\\" // , "description": "This is not a description"
+ }`,
+ },
+ });
+
+ let expectedManifest = {
+ manifest_version: 2,
+ browser_specific_settings: { gecko: { id: ID } },
+ name: 'This " is // not a comment',
+ version: "0.1\\",
+ };
+
+ let fileURI = Services.io.newFileURI(xpi);
+ let uri = NetUtil.newURI(`jar:${fileURI.spec}!/`);
+
+ let extension = new ExtensionData(uri, false);
+
+ await extension.parseManifest();
+
+ Assert.deepEqual(
+ extension.rawManifest,
+ expectedManifest,
+ "Manifest with correctly-filtered comments"
+ );
+
+ Services.obs.notifyObservers(xpi, "flush-cache-entry");
+});
+
+add_task(async function test_getExtensionVersionWithoutValidation() {
+ let xpi = AddonTestUtils.createTempWebExtensionFile({
+ files: {
+ "manifest.json": String.raw`{
+ // This is valid JSON but not a valid manifest.
+ "version": ["This is not a valid version"]
+ }`,
+ },
+ });
+ let fileURI = Services.io.newFileURI(xpi);
+ let uri = NetUtil.newURI(`jar:${fileURI.spec}!/`);
+ let extension = new ExtensionData(uri, false);
+
+ let rawVersion = await extension.getExtensionVersionWithoutValidation();
+ Assert.deepEqual(
+ rawVersion,
+ ["This is not a valid version"],
+ "Got the raw value of the 'version' key from an (invalid) manifest file"
+ );
+
+ // The manifest lacks several required properties and manifest_version is
+ // invalid. The exact error here doesn't matter, as long as it shows that the
+ // manifest is invalid.
+ await Assert.rejects(
+ extension.parseManifest(),
+ /Unexpected params.manifestVersion value: undefined/,
+ "parseManifest() should reject an invalid manifest"
+ );
+
+ Services.obs.notifyObservers(xpi, "flush-cache-entry");
+});
+
+add_task(
+ {
+ pref_set: [
+ ["extensions.manifestV3.enabled", true],
+ ["extensions.webextensions.warnings-as-errors", false],
+ ],
+ },
+ async function test_applications_no_longer_valid_in_mv3() {
+ let id = "some@id";
+ let xpi = AddonTestUtils.createTempWebExtensionFile({
+ files: {
+ "manifest.json": JSON.stringify({
+ manifest_version: 3,
+ name: "some name",
+ version: "0.1",
+ applications: { gecko: { id } },
+ }),
+ },
+ });
+
+ let fileURI = Services.io.newFileURI(xpi);
+ let uri = NetUtil.newURI(`jar:${fileURI.spec}!/`);
+
+ let extension = new ExtensionData(uri, false);
+
+ const { manifest } = await extension.parseManifest();
+ ok(
+ !Object.keys(manifest).includes("applications"),
+ "expected no applications key in manifest"
+ );
+
+ Services.obs.notifyObservers(xpi, "flush-cache-entry");
+ }
+);