Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_bug596443.js
blob55f9922e074a9acd35dbd2804ebaedb4cbcde43d
1 "use strict";
3 const { HttpServer } = ChromeUtils.importESModule(
4   "resource://testing-common/httpd.sys.mjs"
5 );
7 var httpProtocolHandler = Cc[
8   "@mozilla.org/network/protocol;1?name=http"
9 ].getService(Ci.nsIHttpProtocolHandler);
11 var httpserver = new HttpServer();
13 var expectedOnStopRequests = 3;
15 function setupChannel(suffix, xRequest, flags) {
16   var chan = NetUtil.newChannel({
17     uri: "http://localhost:" + httpserver.identity.primaryPort + suffix,
18     loadUsingSystemPrincipal: true,
19   });
20   if (flags) {
21     chan.loadFlags |= flags;
22   }
24   var httpChan = chan.QueryInterface(Ci.nsIHttpChannel);
25   httpChan.setRequestHeader("x-request", xRequest, false);
27   return httpChan;
30 function Listener(response) {
31   this._response = response;
33 Listener.prototype = {
34   _response: null,
35   _buffer: null,
37   QueryInterface: ChromeUtils.generateQI([
38     "nsIStreamListener",
39     "nsIRequestObserver",
40   ]),
42   onStartRequest(request) {
43     this._buffer = "";
44   },
45   onDataAvailable(request, stream, offset, count) {
46     this._buffer = this._buffer.concat(read_stream(stream, count));
47   },
48   onStopRequest(request, status) {
49     Assert.equal(this._buffer, this._response);
50     if (--expectedOnStopRequests == 0) {
51       do_timeout(10, function () {
52         httpserver.stop(do_test_finished);
53       });
54     }
55   },
58 function run_test() {
59   httpserver.registerPathHandler("/bug596443", handler);
60   httpserver.start(-1);
62   Services.prefs.setBoolPref("network.http.rcwn.enabled", false);
64   // make sure we have a profile so we can use the disk-cache
65   do_get_profile();
67   // clear cache
68   evict_cache_entries();
70   httpProtocolHandler.EnsureHSTSDataReady().then(function () {
71     var ch0 = setupChannel(
72       "/bug596443",
73       "Response0",
74       Ci.nsIRequest.LOAD_BYPASS_CACHE
75     );
76     ch0.asyncOpen(new Listener("Response0"));
78     var ch1 = setupChannel(
79       "/bug596443",
80       "Response1",
81       Ci.nsIRequest.LOAD_BYPASS_CACHE
82     );
83     ch1.asyncOpen(new Listener("Response1"));
85     var ch2 = setupChannel("/bug596443", "Should not be used");
86     ch2.asyncOpen(new Listener("Response1")); // Note param: we expect this to come from cache
87   });
89   do_test_pending();
92 function triggerHandlers() {
93   do_timeout(100, handlers[1]);
94   do_timeout(100, handlers[0]);
97 var handlers = [];
98 function handler(metadata, response) {
99   var func = function (body) {
100     return function () {
101       response.setStatusLine(metadata.httpVersion, 200, "Ok");
102       response.setHeader("Content-Type", "text/plain", false);
103       response.setHeader("Content-Length", "" + body.length, false);
104       response.setHeader("Cache-Control", "max-age=600", false);
105       response.bodyOutputStream.write(body, body.length);
106       response.finish();
107     };
108   };
110   response.processAsync();
111   var request = metadata.getHeader("x-request");
112   handlers.push(func(request));
114   if (handlers.length > 1) {
115     triggerHandlers();
116   }