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.import("resource://testing-common/httpd.js");
12 function startHttpServer() {
13 httpserver = new HttpServer();
15 httpserver.registerPathHandler("/resource", (metadata, response) => {
16 response.setStatusLine(metadata.httpVersion, 200, "OK");
17 response.setHeader("Content-Type", "text/plain", false);
18 response.setHeader("Cache-Control", "no-cache", false);
19 response.bodyOutputStream.write("data", 4);
22 httpserver.registerPathHandler("/redirect", (metadata, response) => {
23 response.setStatusLine(metadata.httpVersion, 302, "Redirect");
24 response.setHeader("Location", "/resource", false);
25 response.setHeader("Cache-Control", "no-cache", false);
29 port = httpserver.identity.primaryPort;
32 function stopHttpServer() {
33 httpserver.stop(() => {});
36 function makeRequest(uri) {
37 let requestChannel = NetUtil.newChannel({
39 loadUsingSystemPrincipal: true,
41 requestChannel.QueryInterface(Ci.nsISupportsPriority);
42 requestChannel.priority = Ci.nsISupportsPriority.PRIORITY_HIGHEST;
43 requestChannel.asyncOpen(new ChannelListener(checkResponse, requestChannel));
46 function checkResponse(request, buffer, requestChannel) {
47 requestChannel.QueryInterface(Ci.nsISupportsPriority);
49 requestChannel.priority,
50 Ci.nsISupportsPriority.PRIORITY_HIGHEST
53 // the response channel can be different (if it was redirected)
54 let responseChannel = request.QueryInterface(Ci.nsISupportsPriority);
56 responseChannel.priority,
57 Ci.nsISupportsPriority.PRIORITY_HIGHEST
63 add_test(function test_regular_request() {
64 makeRequest(`http://localhost:${port}/resource`);
67 add_test(function test_redirect() {
68 makeRequest(`http://localhost:${port}/redirect`);
73 if (!runningInParent) {
74 // add a task to report test finished to parent process at the end of test queue,
75 // since do_register_cleanup is not available in child xpcshell test script.
77 do_send_remote_message("finished");
81 // waiting for parent process to assign server port via configPort()
86 registerCleanupFunction(stopHttpServer);
90 // This is used by unit_ipc/test_channel_priority_wrap.js for e10s XPCShell test
91 /* exported configPort */
92 function configPort(serverPort) {