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