Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_304_headers.js
blobb3583663bfe052661e0a45b683d5b6fd8fe4c2f4
1 "use strict";
3 const { HttpServer } = ChromeUtils.importESModule(
4   "resource://testing-common/httpd.sys.mjs"
5 );
7 ChromeUtils.defineLazyGetter(this, "URL", function () {
8   return `http://localhost:${httpServer.identity.primaryPort}/test`;
9 });
11 let httpServer = null;
13 function make_channel(url) {
14   return NetUtil.newChannel({
15     uri: url,
16     loadUsingSystemPrincipal: true,
17   }).QueryInterface(Ci.nsIHttpChannel);
20 function contentHandler(metadata, response) {
21   response.seizePower();
22   let etag = "";
23   try {
24     etag = metadata.getHeader("If-None-Match");
25   } catch (ex) {}
27   if (etag == "test-etag1") {
28     response.write("HTTP/1.1 304 Not Modified\r\n");
30     response.write("Link: <ref>; param1=value1\r\n");
31     response.write("Link: <ref2>; param2=value2\r\n");
32     response.write("Link: <ref3>; param1=value1\r\n");
33     response.write("\r\n");
34     response.finish();
35     return;
36   }
38   response.write("HTTP/1.1 200 OK\r\n");
40   response.write("ETag: test-etag1\r\n");
41   response.write("Link: <ref>; param1=value1\r\n");
42   response.write("Link: <ref2>; param2=value2\r\n");
43   response.write("Link: <ref3>; param1=value1\r\n");
44   response.write("\r\n");
45   response.finish();
48 add_task(async function test() {
49   httpServer = new HttpServer();
50   httpServer.registerPathHandler("/test", contentHandler);
51   httpServer.start(-1);
52   registerCleanupFunction(async () => {
53     await httpServer.stop();
54   });
56   let chan = make_channel(Services.io.newURI(URL));
57   chan.requestMethod = "HEAD";
58   await new Promise(resolve => {
59     chan.asyncOpen({
60       onStopRequest(req, status) {
61         equal(status, Cr.NS_OK);
62         equal(req.QueryInterface(Ci.nsIHttpChannel).responseStatus, 200);
63         equal(
64           req.QueryInterface(Ci.nsIHttpChannel).getResponseHeader("Link"),
65           "<ref>; param1=value1, <ref2>; param2=value2, <ref3>; param1=value1"
66         );
67         resolve();
68       },
69       onStartRequest(req) {},
70       onDataAvailable() {},
71     });
72   });
74   chan = make_channel(Services.io.newURI(URL));
75   chan.requestMethod = "HEAD";
76   await new Promise(resolve => {
77     chan.asyncOpen({
78       onStopRequest(req, status) {
79         equal(status, Cr.NS_OK);
80         equal(req.QueryInterface(Ci.nsIHttpChannel).responseStatus, 200);
81         equal(
82           req.QueryInterface(Ci.nsIHttpChannel).getResponseHeader("Link"),
83           "<ref>; param1=value1, <ref2>; param2=value2, <ref3>; param1=value1"
84         );
85         resolve();
86       },
87       onStartRequest(req) {},
88       onDataAvailable() {},
89     });
90   });
91 });