summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js b/toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js
new file mode 100644
index 0000000000..a7310f345e
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/webidl-api/test_ext_webidl_api_schema_formatters.js
@@ -0,0 +1,99 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+const { ExtensionAPI } = ExtensionCommon;
+
+AddonTestUtils.init(this);
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "1",
+ "42"
+);
+
+// Because the `mockExtensionAPI` is currently the only "mock" API that has
+// WebIDL bindings, this is the only namespace we can use in our tests. There
+// is no JSON schema for this namespace so we add one here that is tailored for
+// our testing needs.
+const API = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ mockExtensionAPI: {
+ methodAsync: files => {
+ return files;
+ },
+ },
+ };
+ }
+};
+
+const SCHEMA = [
+ {
+ namespace: "mockExtensionAPI",
+ functions: [
+ {
+ name: "methodAsync",
+ type: "function",
+ async: true,
+ parameters: [
+ {
+ name: "files",
+ type: "array",
+ items: { $ref: "manifest.ExtensionURL" },
+ },
+ ],
+ },
+ ],
+ },
+];
+
+add_setup(async function () {
+ await AddonTestUtils.promiseStartupManager();
+
+ // The blob:-URL registered in `registerModules()` below gets loaded at:
+ // https://searchfox.org/mozilla-central/rev/0fec57c05d3996cc00c55a66f20dd5793a9bfb5d/toolkit/components/extensions/ExtensionCommon.jsm#1649
+ Services.prefs.setBoolPref(
+ "security.allow_parent_unrestricted_js_loads",
+ true
+ );
+
+ ExtensionParent.apiManager.registerModules({
+ mockExtensionAPI: {
+ schema: `data:,${JSON.stringify(SCHEMA)}`,
+ scopes: ["addon_parent"],
+ paths: [["mockExtensionAPI"]],
+ url: URL.createObjectURL(
+ new Blob([`this.mockExtensionAPI = ${API.toString()}`])
+ ),
+ },
+ });
+});
+
+add_task(async function test_relative_urls() {
+ await runExtensionAPITest(
+ "should format arguments with the relativeUrl formatter",
+ {
+ backgroundScript() {
+ return browser.mockExtensionAPI.methodAsync([
+ "script-1.js",
+ "script-2.js",
+ ]);
+ },
+ mockAPIRequestHandler(policy, request) {
+ return this._handleAPIRequest_orig(policy, request);
+ },
+ assertResults({ testResult, testError, extension }) {
+ Assert.deepEqual(
+ testResult,
+ [
+ `moz-extension://${extension.uuid}/script-1.js`,
+ `moz-extension://${extension.uuid}/script-2.js`,
+ ],
+ "expected correct url"
+ );
+ Assert.deepEqual(testError, undefined, "expected no error");
+ },
+ }
+ );
+});