const Cc = Components.classes; const Ci = Components.interfaces; const PR_RDONLY = 0x1; var etld = Cc["@mozilla.org/network/effective-tld-service;1"] .getService(Ci.nsIEffectiveTLDService); var idn = Cc["@mozilla.org/network/idn-service;1"] .getService(Ci.nsIIDNService); function run_test() { var fis = Cc["@mozilla.org/network/file-input-stream;1"] .createInstance(Ci.nsIFileInputStream); fis.init(do_get_file("netwerk/dns/src/effective_tld_names.dat"), PR_RDONLY, 0444, Ci.nsIFileInputStream.CLOSE_ON_EOF); var lis = Cc["@mozilla.org/intl/converter-input-stream;1"] .createInstance(Ci.nsIConverterInputStream); lis.init(fis, "UTF-8", 1024, 0); lis.QueryInterface(Ci.nsIUnicharLineInputStream); var out = { value: "" }; do { var more = lis.readLine(out); var line = out.value; line = line.replace(/^\s+/, ""); var firstTwo = line.substring(0, 2); // a misnomer, but whatever if (firstTwo == "" || firstTwo == "//") continue; var space = line.search(/[ \t]/); line = line.substring(0, space == -1 ? line.length : space); if ("*." == firstTwo) { let (rest = line.substring(2)) { checkPublicSuffix("foo.SUPER-SPECIAL-AWESOME-PREFIX." + rest, "SUPER-SPECIAL-AWESOME-PREFIX." + rest); } } else if ("!" == line.charAt(0)) { checkPublicSuffix(line.substring(1), line.substring(line.indexOf(".") + 1)); } else { checkPublicSuffix("SUPER-SPECIAL-AWESOME-PREFIX." + line, line); } } while (more); } function checkPublicSuffix(host, expectedSuffix) { expectedSuffix = idn.convertUTF8toACE(expectedSuffix).toLowerCase(); var actualSuffix = etld.getPublicSuffixFromHost(host); do_check_eq(actualSuffix, expectedSuffix); }