summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/head_compat.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/head_compat.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/head_compat.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/head_compat.js b/toolkit/mozapps/extensions/test/xpcshell/head_compat.js
new file mode 100644
index 0000000000..70e084d307
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/head_compat.js
@@ -0,0 +1,49 @@
+//
+// This file provides helpers for tests of addons that use strictCompatibility.
+// Since WebExtensions cannot opt out of strictCompatibility, we add a
+// simple extension loader that lets tests directly set AddonInternal
+// properties (including strictCompatibility)
+//
+
+/* import-globals-from head_addons.js */
+
+const MANIFEST = "compat_manifest.json";
+
+AddonManager.addExternalExtensionLoader({
+ name: "compat-test",
+ manifestFile: MANIFEST,
+ async loadManifest(pkg) {
+ // XPIDatabase.jsm gets unloaded in AddonTestUtils when the
+ // addon manager is restarted. Work around that by just importing
+ // it every time we need to create an AddonInternal.
+ const { AddonInternal } = ChromeUtils.import(
+ "resource://gre/modules/addons/XPIDatabase.jsm"
+ );
+ let addon = new AddonInternal();
+ let manifest = JSON.parse(await pkg.readString(MANIFEST));
+ Object.assign(addon, manifest);
+ return addon;
+ },
+ loadScope(addon, file) {
+ return {
+ install() {},
+ uninstall() {},
+ startup() {},
+ shutdonw() {},
+ };
+ },
+});
+
+const DEFAULTS = {
+ defaultLocale: {},
+ locales: [],
+ targetPlatforms: [],
+ type: "extension",
+ version: "1.0",
+};
+
+function createAddon(manifest) {
+ return AddonTestUtils.createTempXPIFile({
+ [MANIFEST]: Object.assign({}, DEFAULTS, manifest),
+ });
+}