Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_orb_empty_header.js
blob24866b707360eaf9d8b67af9b99ef7bbaf720c7f
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 /* import-globals-from head_cache.js */
8 /* import-globals-from head_cookies.js */
9 /* import-globals-from head_channels.js */
10 /* import-globals-from head_servers.js */
12 function makeChan(uri) {
13   var principal =
14     Services.scriptSecurityManager.createContentPrincipalFromOrigin(
15       "http://example.com"
16     );
17   let chan = NetUtil.newChannel({
18     uri,
19     loadingPrincipal: principal,
20     securityFlags: Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_INHERITS_SEC_CONTEXT,
21     contentPolicyType: Ci.nsIContentPolicy.TYPE_OTHER,
22   }).QueryInterface(Ci.nsIHttpChannel);
23   chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI;
24   return chan;
27 function inChildProcess() {
28   return Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
31 async function setup() {
32   if (!inChildProcess()) {
33     Services.prefs.setBoolPref("browser.opaqueResponseBlocking", true);
34   }
35   let server = new NodeHTTPServer();
36   await server.start();
37   registerCleanupFunction(async () => {
38     await server.stop();
39   });
40   await server.registerPathHandler("/dosniff", (req, resp) => {
41     resp.writeHead(500, {
42       "Content-Type": "application/json",
43       "Set-Cookie": "mycookie",
44     });
45     resp.write("good");
46     resp.end("done");
47   });
48   await server.registerPathHandler("/nosniff", (req, resp) => {
49     resp.writeHead(500, {
50       "Content-Type": "application/msword",
51       "Set-Cookie": "mycookie",
52     });
53     resp.write("good");
54     resp.end("done");
55   });
57   return server;
59 async function test_empty_header(server, doSniff) {
60   let chan;
61   if (doSniff) {
62     chan = makeChan(`${server.origin()}/dosniff`);
63   } else {
64     chan = makeChan(`${server.origin()}/nosniff`);
65   }
66   let req = await new Promise(resolve => {
67     chan.asyncOpen(new ChannelListener(resolve, null, CL_EXPECT_FAILURE));
68   });
69   equal(req.status, Cr.NS_ERROR_FAILURE);
70   equal(req.QueryInterface(Ci.nsIHttpChannel).responseStatus, 500);
72   req.visitResponseHeaders({
73     visitHeader: function visit(_aName, _aValue) {
74       ok(false);
75     },
76   });
79 add_task(async function () {
80   let server = await setup();
81   await test_empty_header(server, true);
82   await test_empty_header(server, false);
83 });