tor-browser

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

test_dns_disabled.js (2156B)


      1 "use strict";
      2 
      3 const override = Cc["@mozilla.org/network/native-dns-override;1"].getService(
      4  Ci.nsINativeDNSResolverOverride
      5 );
      6 const mainThread = Services.tm.currentThread;
      7 
      8 function makeListenerBlock(next) {
      9  return {
     10    onLookupComplete(inRequest, inRecord, inStatus) {
     11      Assert.ok(!Components.isSuccessCode(inStatus));
     12      next();
     13    },
     14  };
     15 }
     16 
     17 function makeListenerDontBlock(next, expectedAnswer) {
     18  return {
     19    onLookupComplete(inRequest, inRecord, inStatus) {
     20      Assert.equal(inStatus, Cr.NS_OK);
     21      inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
     22      var answer = inRecord.getNextAddrAsString();
     23      if (expectedAnswer) {
     24        Assert.equal(answer, expectedAnswer);
     25      } else {
     26        Assert.ok(answer == "127.0.0.1" || answer == "::1");
     27      }
     28      next();
     29    },
     30  };
     31 }
     32 
     33 function do_test({ dnsDisabled, mustBlock, testDomain, expectedAnswer }) {
     34  return new Promise(resolve => {
     35    Services.prefs.setBoolPref("network.dns.disabled", dnsDisabled);
     36    try {
     37      Services.dns.asyncResolve(
     38        testDomain,
     39        Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
     40        0,
     41        null, // resolverInfo
     42        mustBlock
     43          ? makeListenerBlock(resolve)
     44          : makeListenerDontBlock(resolve, expectedAnswer),
     45        mainThread,
     46        {} // Default origin attributes
     47      );
     48    } catch (e) {
     49      Assert.strictEqual(mustBlock, true);
     50      resolve();
     51    }
     52  });
     53 }
     54 
     55 function setup() {
     56  override.addIPOverride("foo.bar", "127.0.0.1");
     57  registerCleanupFunction(function () {
     58    override.clearOverrides();
     59    Services.prefs.clearUserPref("network.dns.disabled");
     60  });
     61 }
     62 setup();
     63 
     64 // IP literals should be resolved even if dns is disabled
     65 add_task(async function testIPLiteral() {
     66  return do_test({
     67    dnsDisabled: true,
     68    mustBlock: false,
     69    testDomain: "0x01010101",
     70    expectedAnswer: "1.1.1.1",
     71  });
     72 });
     73 
     74 add_task(async function testBlocked() {
     75  return do_test({
     76    dnsDisabled: true,
     77    mustBlock: true,
     78    testDomain: "foo.bar",
     79  });
     80 });
     81 
     82 add_task(async function testNotBlocked() {
     83  return do_test({
     84    dnsDisabled: false,
     85    mustBlock: false,
     86    testDomain: "foo.bar",
     87  });
     88 });