1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
2 /* Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/publicdomain/zero/1.0/ */
7 const { HttpServer
} = ChromeUtils
.importESModule(
8 "resource://testing-common/httpd.sys.mjs"
14 function startHttpServer() {
15 httpserver
= new HttpServer();
17 httpserver
.registerPathHandler("/resource", (metadata
, response
) => {
18 response
.setStatusLine(metadata
.httpVersion
, 200, "OK");
19 response
.setHeader("Content-Type", "text/plain", false);
20 response
.setHeader("Cache-Control", "no-cache", false);
21 response
.bodyOutputStream
.write("data", 4);
24 httpserver
.registerPathHandler("/redirect", (metadata
, response
) => {
25 response
.setStatusLine(metadata
.httpVersion
, 302, "Redirect");
26 response
.setHeader("Location", "/resource", false);
27 response
.setHeader("Cache-Control", "no-cache", false);
31 port
= httpserver
.identity
.primaryPort
;
34 function stopHttpServer() {
35 httpserver
.stop(() => {});
38 function makeRequest(uri
) {
39 let requestChannel
= NetUtil
.newChannel({
41 loadUsingSystemPrincipal
: true,
43 requestChannel
.QueryInterface(Ci
.nsISupportsPriority
);
44 requestChannel
.priority
= Ci
.nsISupportsPriority
.PRIORITY_HIGHEST
;
45 requestChannel
.asyncOpen(new ChannelListener(checkResponse
, requestChannel
));
48 function checkResponse(request
, buffer
, requestChannel
) {
49 requestChannel
.QueryInterface(Ci
.nsISupportsPriority
);
51 requestChannel
.priority
,
52 Ci
.nsISupportsPriority
.PRIORITY_HIGHEST
55 // the response channel can be different (if it was redirected)
56 let responseChannel
= request
.QueryInterface(Ci
.nsISupportsPriority
);
58 responseChannel
.priority
,
59 Ci
.nsISupportsPriority
.PRIORITY_HIGHEST
65 add_test(function test_regular_request() {
66 makeRequest(`http://localhost:${port}/resource`);
69 add_test(function test_redirect() {
70 makeRequest(`http://localhost:${port}/redirect`);
75 if (!runningInParent
) {
76 // add a task to report test finished to parent process at the end of test queue,
77 // since do_register_cleanup is not available in child xpcshell test script.
78 add_test(function () {
79 do_send_remote_message("finished");
83 // waiting for parent process to assign server port via configPort()
88 registerCleanupFunction(stopHttpServer
);
92 // This is used by unit_ipc/test_channel_priority_wrap.js for e10s XPCShell test
93 /* exported configPort */
94 function configPort(serverPort
) {