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 }