summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js
new file mode 100644
index 0000000000..425d83560d
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_host.js
@@ -0,0 +1,99 @@
+"use strict";
+
+const HOSTS = new Set(["example.com", "example.org"]);
+
+const server = createHttpServer({ hosts: HOSTS });
+
+const BASE_URL = "http://example.com";
+const FETCH_ORIGIN = "http://example.com/dummy";
+
+server.registerPathHandler("/return_headers.sjs", (request, response) => {
+ response.setHeader("Content-Type", "text/plain", false);
+
+ let headers = {};
+ for (let { data: header } of request.headers) {
+ headers[header] = request.getHeader(header);
+ }
+
+ response.write(JSON.stringify(headers));
+});
+
+server.registerPathHandler("/dummy", (request, response) => {
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ response.write("ok");
+});
+
+function getExtension(permission = "<all_urls>") {
+ return ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["webRequest", "webRequestBlocking", permission],
+ },
+ background() {
+ browser.webRequest.onBeforeSendHeaders.addListener(
+ details => {
+ details.requestHeaders.push({ name: "Host", value: "example.org" });
+ return { requestHeaders: details.requestHeaders };
+ },
+ { urls: ["<all_urls>"] },
+ ["blocking", "requestHeaders"]
+ );
+ },
+ });
+}
+
+add_task(async function test_host_header_accepted() {
+ let extension = getExtension();
+ await extension.startup();
+ let headers = JSON.parse(
+ await ExtensionTestUtils.fetch(
+ FETCH_ORIGIN,
+ `${BASE_URL}/return_headers.sjs`
+ )
+ );
+
+ equal(headers.host, "example.org", "Host header was set on request");
+
+ await extension.unload();
+});
+
+add_task(async function test_host_header_denied() {
+ let extension = getExtension(`${BASE_URL}/`);
+
+ await extension.startup();
+
+ let headers = JSON.parse(
+ await ExtensionTestUtils.fetch(
+ FETCH_ORIGIN,
+ `${BASE_URL}/return_headers.sjs`
+ )
+ );
+
+ equal(headers.host, "example.com", "Host header was not set on request");
+
+ await extension.unload();
+});
+
+add_task(async function test_host_header_restricted() {
+ Services.prefs.setCharPref(
+ "extensions.webextensions.restrictedDomains",
+ "example.org"
+ );
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("extensions.webextensions.restrictedDomains");
+ });
+
+ let extension = getExtension();
+
+ await extension.startup();
+
+ let headers = JSON.parse(
+ await ExtensionTestUtils.fetch(
+ FETCH_ORIGIN,
+ `${BASE_URL}/return_headers.sjs`
+ )
+ );
+
+ equal(headers.host, "example.com", "Host header was not set on request");
+
+ await extension.unload();
+});