tor-browser

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

test_dns_onion.js (1957B)


      1 "use strict";
      2 
      3 var mainThread = Services.tm.currentThread;
      4 
      5 var onionPref;
      6 var localdomainPref;
      7 var prefs = Services.prefs;
      8 
      9 // check that we don't lookup .onion
     10 var listenerBlock = {
     11  onLookupComplete(inRequest, inRecord, inStatus) {
     12    Assert.ok(!Components.isSuccessCode(inStatus));
     13    do_test_dontBlock();
     14  },
     15  QueryInterface: ChromeUtils.generateQI(["nsIDNSListener"]),
     16 };
     17 
     18 // check that we do lookup .onion (via pref)
     19 var listenerDontBlock = {
     20  onLookupComplete(inRequest, inRecord) {
     21    inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
     22    var answer = inRecord.getNextAddrAsString();
     23    Assert.ok(answer == "127.0.0.1" || answer == "::1");
     24    all_done();
     25  },
     26  QueryInterface: ChromeUtils.generateQI(["nsIDNSListener"]),
     27 };
     28 
     29 const defaultOriginAttributes = {};
     30 
     31 function do_test_dontBlock() {
     32  prefs.setBoolPref("network.dns.blockDotOnion", false);
     33  Services.dns.asyncResolve(
     34    "private.onion",
     35    Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
     36    0,
     37    null, // resolverInfo
     38    listenerDontBlock,
     39    mainThread,
     40    defaultOriginAttributes
     41  );
     42 }
     43 
     44 function do_test_block() {
     45  prefs.setBoolPref("network.dns.blockDotOnion", true);
     46  try {
     47    Services.dns.asyncResolve(
     48      "private.onion",
     49      Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
     50      0,
     51      null, // resolverInfo
     52      listenerBlock,
     53      mainThread,
     54      defaultOriginAttributes
     55    );
     56  } catch (e) {
     57    // it is ok for this negative test to fail fast
     58    Assert.ok(true);
     59    do_test_dontBlock();
     60  }
     61 }
     62 
     63 function all_done() {
     64  // reset locally modified prefs
     65  prefs.setCharPref("network.dns.localDomains", localdomainPref);
     66  prefs.setBoolPref("network.dns.blockDotOnion", onionPref);
     67  do_test_finished();
     68 }
     69 
     70 function run_test() {
     71  onionPref = prefs.getBoolPref("network.dns.blockDotOnion");
     72  localdomainPref = prefs.getCharPref("network.dns.localDomains");
     73  prefs.setCharPref("network.dns.localDomains", "private.onion");
     74  do_test_block();
     75  do_test_pending();
     76 }