tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_channel_priority.js (2783B)


      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/ */
      4 
      5 "use strict";
      6 
      7 const { HttpServer } = ChromeUtils.importESModule(
      8  "resource://testing-common/httpd.sys.mjs"
      9 );
     10 
     11 let httpserver;
     12 let port;
     13 
     14 function startHttpServer() {
     15  httpserver = new HttpServer();
     16 
     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);
     22  });
     23 
     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);
     28  });
     29 
     30  httpserver.start(-1);
     31  port = httpserver.identity.primaryPort;
     32 }
     33 
     34 function stopHttpServer() {
     35  httpserver.stop(() => {});
     36 }
     37 
     38 function makeRequest(uri) {
     39  let requestChannel = NetUtil.newChannel({
     40    uri,
     41    loadUsingSystemPrincipal: true,
     42  });
     43  requestChannel.QueryInterface(Ci.nsISupportsPriority);
     44  requestChannel.priority = Ci.nsISupportsPriority.PRIORITY_HIGHEST;
     45  requestChannel.asyncOpen(new ChannelListener(checkResponse, requestChannel));
     46 }
     47 
     48 function checkResponse(request, buffer, requestChannel) {
     49  requestChannel.QueryInterface(Ci.nsISupportsPriority);
     50  Assert.equal(
     51    requestChannel.priority,
     52    Ci.nsISupportsPriority.PRIORITY_HIGHEST
     53  );
     54 
     55  // the response channel can be different (if it was redirected)
     56  let responseChannel = request.QueryInterface(Ci.nsISupportsPriority);
     57  Assert.equal(
     58    responseChannel.priority,
     59    Ci.nsISupportsPriority.PRIORITY_HIGHEST
     60  );
     61 
     62  run_next_test();
     63 }
     64 
     65 add_test(function test_regular_request() {
     66  makeRequest(`http://localhost:${port}/resource`);
     67 });
     68 
     69 add_test(function test_redirect() {
     70  makeRequest(`http://localhost:${port}/redirect`);
     71 });
     72 
     73 function run_test() {
     74  // jshint ignore:line
     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");
     80      run_next_test();
     81    });
     82 
     83    // waiting for parent process to assign server port via configPort()
     84    return;
     85  }
     86 
     87  startHttpServer();
     88  registerCleanupFunction(stopHttpServer);
     89  run_next_test();
     90 }
     91 
     92 // This is used by unit_ipc/test_channel_priority_wrap.js for e10s XPCShell test
     93 /* exported configPort */
     94 function configPort(serverPort) {
     95  // jshint ignore:line
     96  port = serverPort;
     97  run_next_test();
     98 }