summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js
new file mode 100644
index 0000000000..be5b5ec9bf
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_filterTypes.js
@@ -0,0 +1,87 @@
+"use strict";
+
+AddonTestUtils.init(this);
+
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "1",
+ "42"
+);
+
+const server = createHttpServer({ hosts: ["example.com"] });
+server.registerPathHandler("/", (request, response) => {
+ response.setHeader("Content-Tpe", "text/plain", false);
+ response.write("OK");
+});
+
+add_task(async function test_all_webRequest_ResourceTypes() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["webRequest", "webRequestBlocking", "*://example.com/*"],
+ },
+ background() {
+ browser.test.onMessage.addListener(async msg => {
+ browser.webRequest[msg.event].addListener(
+ () => {},
+ { urls: ["*://example.com/*"], ...msg.filter },
+ ["blocking"]
+ );
+ // Call an API method implemented in the parent process to
+ // be sure that the webRequest listener has been registered
+ // in the parent process as well.
+ await browser.runtime.getBrowserInfo();
+ browser.test.sendMessage(`webRequest-listener-registered`);
+ });
+ },
+ });
+
+ await extension.startup();
+
+ const { Schemas } = ChromeUtils.importESModule(
+ "resource://gre/modules/Schemas.sys.mjs"
+ );
+ const webRequestSchema = Schemas.privilegedSchemaJSON
+ .get("chrome://extensions/content/schemas/web_request.json")
+ .deserialize({});
+ const ResourceType = webRequestSchema[1].types.filter(
+ type => type.id == "ResourceType"
+ )[0];
+ ok(
+ ResourceType && ResourceType.enum,
+ "Found ResourceType in the web_request.json schema"
+ );
+ info(
+ "Register webRequest.onBeforeRequest event listener for all supported ResourceType"
+ );
+
+ let { messages } = await promiseConsoleOutput(async () => {
+ ExtensionTestUtils.failOnSchemaWarnings(false);
+ extension.sendMessage({
+ event: "onBeforeRequest",
+ filter: {
+ // Verify that the resourceType not supported is going to be ignored
+ // and all the ones supported does not trigger a ChannelWrapper.matches
+ // exception once the listener is being triggered.
+ types: [].concat(ResourceType.enum, "not-supported-resource-type"),
+ },
+ });
+ await extension.awaitMessage("webRequest-listener-registered");
+ ExtensionTestUtils.failOnSchemaWarnings();
+
+ await ExtensionTestUtils.fetch(
+ "http://example.com/dummy",
+ "http://example.com"
+ );
+ });
+
+ AddonTestUtils.checkMessages(messages, {
+ expected: [
+ { message: /Warning processing types: .* "not-supported-resource-type"/ },
+ ],
+ forbidden: [{ message: /JavaScript Error: "ChannelWrapper.matches/ }],
+ });
+ info("No ChannelWrapper.matches errors have been logged");
+
+ await extension.unload();
+});