tor-browser

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

test_bug586908.js (2612B)


      1 "use strict";
      2 
      3 const { HttpServer } = ChromeUtils.importESModule(
      4  "resource://testing-common/httpd.sys.mjs"
      5 );
      6 const { MockRegistrar } = ChromeUtils.importESModule(
      7  "resource://testing-common/MockRegistrar.sys.mjs"
      8 );
      9 
     10 var httpserv = null;
     11 
     12 ChromeUtils.defineLazyGetter(this, "systemSettings", function () {
     13  return {
     14    QueryInterface: ChromeUtils.generateQI(["nsISystemProxySettings"]),
     15 
     16    mainThreadOnly: true,
     17    PACURI: "http://localhost:" + httpserv.identity.primaryPort + "/redirect",
     18    getProxyForURI() {
     19      throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
     20    },
     21  };
     22 });
     23 
     24 function checkValue(request, data) {
     25  Assert.ok(called);
     26  Assert.equal("ok", data);
     27  httpserv.stop(do_test_finished);
     28 }
     29 
     30 function makeChan(url) {
     31  return NetUtil.newChannel({
     32    uri: url,
     33    loadUsingSystemPrincipal: true,
     34  }).QueryInterface(Ci.nsIHttpChannel);
     35 }
     36 
     37 function run_test() {
     38  httpserv = new HttpServer();
     39  httpserv.registerPathHandler("/redirect", redirect);
     40  httpserv.registerPathHandler("/pac", pac);
     41  httpserv.registerPathHandler("/target", target);
     42  httpserv.start(-1);
     43 
     44  MockRegistrar.register(
     45    "@mozilla.org/system-proxy-settings;1",
     46    systemSettings
     47  );
     48 
     49  // Ensure we're using system-properties
     50  Services.prefs.setIntPref(
     51    "network.proxy.type",
     52    Ci.nsIProtocolProxyService.PROXYCONFIG_SYSTEM
     53  );
     54 
     55  // clear cache
     56  evict_cache_entries();
     57 
     58  var chan = makeChan(
     59    "http://localhost:" + httpserv.identity.primaryPort + "/target"
     60  );
     61  chan.asyncOpen(new ChannelListener(checkValue, null));
     62 
     63  do_test_pending();
     64 }
     65 
     66 var called = false,
     67  failed = false;
     68 function redirect(metadata, response) {
     69  // If called second time, just return the PAC but set failed-flag
     70  if (called) {
     71    failed = true;
     72    pac(metadata, response);
     73    return;
     74  }
     75 
     76  called = true;
     77  response.setStatusLine(metadata.httpVersion, 302, "Found");
     78  response.setHeader("Location", "/pac", false);
     79  var body = "Moved\n";
     80  response.bodyOutputStream.write(body, body.length);
     81 }
     82 
     83 function pac(metadata, response) {
     84  var PAC = 'function FindProxyForURL(url, host) { return "DIRECT"; }';
     85  response.setStatusLine(metadata.httpVersion, 200, "Ok");
     86  response.setHeader(
     87    "Content-Type",
     88    "application/x-ns-proxy-autoconfig",
     89    false
     90  );
     91  response.bodyOutputStream.write(PAC, PAC.length);
     92 }
     93 
     94 function target(metadata, response) {
     95  var retval = "ok";
     96  if (failed) {
     97    retval = "failed";
     98  }
     99 
    100  response.setStatusLine(metadata.httpVersion, 200, "Ok");
    101  response.setHeader("Content-Type", "text/plain", false);
    102  response.bodyOutputStream.write(retval, retval.length);
    103 }