tor-browser

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

test_bug561276.js (1915B)


      1 //
      2 // Verify that we hit the net if we discover a cycle of redirects
      3 // coming from cache.
      4 //
      5 
      6 "use strict";
      7 
      8 const { HttpServer } = ChromeUtils.importESModule(
      9  "resource://testing-common/httpd.sys.mjs"
     10 );
     11 
     12 var httpserver = new HttpServer();
     13 var iteration = 0;
     14 
     15 function setupChannel(suffix) {
     16  var chan = NetUtil.newChannel({
     17    uri: "http://localhost:" + httpserver.identity.primaryPort + suffix,
     18    loadUsingSystemPrincipal: true,
     19  });
     20  var httpChan = chan.QueryInterface(Ci.nsIHttpChannel);
     21  httpChan.requestMethod = "GET";
     22  return httpChan;
     23 }
     24 
     25 function checkValueAndTrigger(request, data) {
     26  Assert.equal("Ok", data);
     27  httpserver.stop(do_test_finished);
     28 }
     29 
     30 function run_test() {
     31  httpserver.registerPathHandler("/redirect1", redirectHandler1);
     32  httpserver.registerPathHandler("/redirect2", redirectHandler2);
     33  httpserver.start(-1);
     34 
     35  // clear cache
     36  evict_cache_entries();
     37 
     38  // load first time
     39  var channel = setupChannel("/redirect1");
     40  channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null));
     41 
     42  do_test_pending();
     43 }
     44 
     45 function redirectHandler1(metadata, response) {
     46  // first time we return a cacheable 302 pointing to next redirect
     47  if (iteration < 1) {
     48    response.setStatusLine(metadata.httpVersion, 302, "Found");
     49    response.setHeader("Cache-Control", "max-age=600", false);
     50    response.setHeader("Location", "/redirect2", false);
     51 
     52    // next time called we return 200
     53  } else {
     54    response.setStatusLine(metadata.httpVersion, 200, "Ok");
     55    response.setHeader("Cache-Control", "max-age=600", false);
     56    response.setHeader("Content-Type", "text/plain");
     57    response.bodyOutputStream.write("Ok", "Ok".length);
     58  }
     59  iteration += 1;
     60 }
     61 
     62 function redirectHandler2(metadata, response) {
     63  response.setStatusLine(metadata.httpVersion, 302, "Found");
     64  response.setHeader("Cache-Control", "max-age=600", false);
     65  response.setHeader("Location", "/redirect1", false);
     66 }