3 const defaultOriginAttributes = {};
4 const mainThread = Services.tm.currentThread;
6 const overrideService = Cc[
7 "@mozilla.org/network/native-dns-override;1"
8 ].getService(Ci.nsINativeDNSResolverOverride);
12 this.promise = new Promise(resolve => {
13 this.resolve = resolve;
17 onLookupComplete(inRequest, inRecord, inStatus) {
18 this.resolve([inRequest, inRecord, inStatus]);
22 return this.promise.then.apply(this.promise, arguments);
26 Listener.prototype.QueryInterface = ChromeUtils.generateQI(["nsIDNSListener"]);
28 const DOMAIN_IDN = "bücher.org";
29 const ACE_IDN = "xn--bcher-kva.org";
31 const ADDR1 = "127.0.0.1";
34 add_task(async function test_dns_localhost() {
35 let listener = new Listener();
36 Services.dns.asyncResolve(
38 Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
43 defaultOriginAttributes
45 let [, inRecord] = await listener;
46 inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
47 let answer = inRecord.getNextAddrAsString();
48 Assert.ok(answer == ADDR1 || answer == ADDR2);
51 add_task(async function test_idn_cname() {
52 let listener = new Listener();
53 Services.dns.asyncResolve(
55 Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
56 Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
60 defaultOriginAttributes
62 let [, inRecord] = await listener;
63 inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
64 Assert.equal(inRecord.canonicalName, ACE_IDN, "IDN is returned as punycode");
70 Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT,
72 async function test_long_domain() {
73 let listener = new Listener();
74 let domain = "a".repeat(253);
75 overrideService.addIPOverride(domain, "1.2.3.4");
76 Services.dns.asyncResolve(
78 Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
79 Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
83 defaultOriginAttributes
85 let [, , inStatus] = await listener;
86 Assert.equal(inStatus, Cr.NS_OK);
88 listener = new Listener();
89 domain = "a".repeat(254);
90 overrideService.addIPOverride(domain, "1.2.3.4");
92 if (mozinfo.socketprocess_networking) {
93 // When using the socket process, the call fails asynchronously.
94 Services.dns.asyncResolve(
96 Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
97 Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
101 defaultOriginAttributes
103 let [, , inStatus1] = await listener;
104 Assert.equal(inStatus1, Cr.NS_ERROR_UNKNOWN_HOST);
108 Services.dns.asyncResolve(
110 Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
111 Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
112 null, // resolverInfo
115 defaultOriginAttributes
118 /NS_ERROR_UNKNOWN_HOST/,
119 "Should throw for large domains"