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 });