michael@0: function run_test() { michael@0: var tld = michael@0: Cc["@mozilla.org/network/effective-tld-service;1"]. michael@0: getService(Ci.nsIEffectiveTLDService); michael@0: michael@0: var etld; michael@0: michael@0: do_check_eq(tld.getPublicSuffixFromHost("localhost"), "localhost"); michael@0: do_check_eq(tld.getPublicSuffixFromHost("localhost."), "localhost."); michael@0: do_check_eq(tld.getPublicSuffixFromHost("domain.com"), "com"); michael@0: do_check_eq(tld.getPublicSuffixFromHost("domain.com."), "com."); michael@0: do_check_eq(tld.getPublicSuffixFromHost("domain.co.uk"), "co.uk"); michael@0: do_check_eq(tld.getPublicSuffixFromHost("domain.co.uk."), "co.uk."); michael@0: do_check_eq(tld.getPublicSuffixFromHost("co.uk"), "co.uk"); michael@0: do_check_eq(tld.getBaseDomainFromHost("domain.co.uk"), "domain.co.uk"); michael@0: do_check_eq(tld.getBaseDomainFromHost("domain.co.uk."), "domain.co.uk."); michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost(""); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost("domain.co.uk", 1); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost("co.uk"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost(""); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("1.2.3.4"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("2010:836B:4179::836B:4179"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("3232235878"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("::ffff:192.9.5.5"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("::1"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: // Check IP addresses with trailing dot as well, Necko sometimes accepts michael@0: // those (depending on operating system, see bug 380543) michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("127.0.0.1."); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getPublicSuffixFromHost("::ffff:127.0.0.1."); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_HOST_IS_IP_ADDRESS); michael@0: } michael@0: michael@0: // check normalization: output should be consistent with michael@0: // nsIURI::GetAsciiHost(), i.e. lowercased and ASCII/ACE encoded michael@0: var ioService = Components.classes["@mozilla.org/network/io-service;1"] michael@0: .getService(Components.interfaces.nsIIOService); michael@0: michael@0: var uri = ioService.newURI("http://b\u00FCcher.co.uk", null, null); michael@0: do_check_eq(tld.getBaseDomain(uri), "xn--bcher-kva.co.uk"); michael@0: do_check_eq(tld.getBaseDomainFromHost("b\u00FCcher.co.uk"), "xn--bcher-kva.co.uk"); michael@0: do_check_eq(tld.getPublicSuffix(uri), "co.uk"); michael@0: do_check_eq(tld.getPublicSuffixFromHost("b\u00FCcher.co.uk"), "co.uk"); michael@0: michael@0: // check that malformed hosts are rejected as invalid args michael@0: try { michael@0: etld = tld.getBaseDomainFromHost("domain.co.uk.."); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost("domain.co..uk"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost(".domain.co.uk"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost(".domain.co.uk"); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost("."); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: michael@0: try { michael@0: etld = tld.getBaseDomainFromHost(".."); michael@0: do_throw("this should fail"); michael@0: } catch(e) { michael@0: do_check_eq(e.result, Cr.NS_ERROR_ILLEGAL_VALUE); michael@0: } michael@0: }