dom/base/test/test_url.html
author Andrea Marchesini <amarchesini@mozilla.com>
Wed, 19 Nov 2014 16:32:47 +0000
changeset 216466 8e604ebfc31388fefc9a8647bde4734e6f97eb87
parent 202743 dc3942a35b5c8c48c726df578e2fff36f7ff5157
child 216486 df4b537921116729b87feb54c5158db06d2b7bc7
permissions -rw-r--r--
Bug 1101584 - sContentUtils::GetUTFOrigin should check if the URI has the nsIURIWithPrincipal interface, r=bz


<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test URL API</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887364">Mozilla Bug 887364</a>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=991471">Mozilla Bug 991471</a>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=996055">Mozilla Bug 996055</a>
<p id="display"></p>
<div id="content" style="display: none">
  <iframe name="x" id="x"></iframe>
  <iframe name="y" id="y"></iframe>
</div>
<pre id="test">
</pre>
  <script type="application/javascript">

  /** Test for Bug 887364 **/
  ok("URL" in window, "window.URL exists");

  var tests = [
    { url: 'http://www.abc.com',
      base: undefined,
      error: false,
      href: 'http://www.abc.com/',
      origin: 'http://www.abc.com',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'www.abc.com',
      hostname: 'www.abc.com',
      port: '',
      pathname: '/',
      search: '',
      hash: ''
    },
    { url: 'ftp://auser:apw@www.abc.com',
      base: undefined,
      error: false,
      href: 'ftp://auser:apw@www.abc.com/',
      origin: 'ftp://www.abc.com',
      protocol: 'ftp:',
      username: 'auser',
      password: 'apw',
      host: 'www.abc.com',
      hostname: 'www.abc.com',
      port: '',
      pathname: '/',
      search: '',
      hash: ''
    },
    { url: 'http://www.abc.com:90/apath/',
      base: undefined,
      error: false,
      href: 'http://www.abc.com:90/apath/',
      origin: 'http://www.abc.com:90',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'www.abc.com:90',
      hostname: 'www.abc.com',
      port: '90',
      pathname: '/apath/',
      search: '',
      hash: ''
    },
    { url: 'http://www.abc.com/apath/afile.txt#ahash',
      base: undefined,
      error: false,
      href: 'http://www.abc.com/apath/afile.txt#ahash',
      origin: 'http://www.abc.com',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'www.abc.com',
      hostname: 'www.abc.com',
      port: '',
      pathname: '/apath/afile.txt',
      search: '',
      hash: '#ahash'
    },
    { url: 'http://example.com/?test#hash',
      base: undefined,
      error: false,
      href: 'http://example.com/?test#hash',
      origin: 'http://example.com',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'example.com',
      hostname: 'example.com',
      port: '',
      pathname: '/',
      search: '?test',
      hash: '#hash'
    },
    { url: 'http://example.com/?test',
      base: undefined,
      error: false,
      href: 'http://example.com/?test',
      origin: 'http://example.com',
      protocol: 'http:',
      username: '',
      password: '',
      host: 'example.com',
      hostname: 'example.com',
      port: '',
      pathname: '/',
      search: '?test',
      hash: ''
    },
    { url: 'http://example.com/carrot#question%3f',
      base: undefined,
      error: false,
      hash: '#question?'
    },
    { url: 'https://example.com:4443?',
      base: undefined,
      error: false,
      protocol: 'https:',
      port: '4443',
      pathname: '/',
      hash: '',
      search: ''
    },
    { url: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
      base: undefined,
      error: false,
      href: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
      protocol: 'http:',
      pathname: '/apath/afile.txt',
      hash: '#ahash?asearch',
      search: ''
    },
    { url: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
      base: undefined,
      error: false,
      href: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
      protocol: 'http:',
      pathname: '/apath/afile.txt',
      hash: '#ahash',
      search: '?asearch'
    },
    { url: 'http://abc.com/apath/afile.txt?#ahash',
      base: undefined,
      error: false,
      pathname: '/apath/afile.txt',
      hash: '#ahash',
      search: ''
    },
    { url: 'http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash',
      base: undefined,
      error: false,
      protocol: 'http:',
      username: 'auser',
      password: 'apassword',
      host: 'www.abc.com:90',
      hostname: 'www.abc.com',
      port: '90',
      pathname: '/apath/afile.txt',
      hash: '#ahash',
      search: '?asearch',
      origin: 'http://www.abc.com:90'
    },

    { url: '/foo#bar',
      base: 'www.test.org',
      error: true,
    },
    { url: '/foo#bar',
      base: null,
      error: true,
    },
    { url: '/foo#bar',
      base: 42,
      error: true,
    },
    { url: 'ftp://ftp.something.net',
      base: undefined,
      error: false,
      protocol: 'ftp:',
    },
    { url: 'file:///tmp/file',
      base: undefined,
      error: false,
      protocol: 'file:',
    },
    { url: 'gopher://gopher.something.net',
      base: undefined,
      error: false,
      protocol: 'gopher:',
    },
    { url: 'ws://ws.something.net',
      base: undefined,
      error: false,
      protocol: 'ws:',
    },
    { url: 'wss://ws.something.net',
      base: undefined,
      error: false,
      protocol: 'wss:',
    },
    { url: 'foo://foo.something.net',
      base: undefined,
      error: false,
      protocol: 'foo:',
    },
  ];

  while(tests.length) {
    var test = tests.shift();

    var error = false;
    var url;
    try {
      if (test.base) {
        url = new URL(test.url, test.base);
      } else {
        url = new URL(test.url);
      }
    } catch(e) {
      error = true;
    }

    is(test.error, error, "Error creating URL");
    if (test.error) {
      continue;
    }

    if ('href' in test) is(url.href, test.href, "href");
    if ('origin' in test) is(url.origin, test.origin, "origin");
    if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
    if ('username' in test) is(url.username, test.username, "username");
    if ('password' in test) is(url.password, test.password, "password");
    if ('host' in test) is(url.host, test.host, "host");
    if ('hostname' in test) is(url.hostname, test.hostname, "hostname");
    if ('port' in test) is(url.port, test.port, "port");
    if ('pathname' in test) is(url.pathname, test.pathname, "pathname");
    if ('search' in test) is(url.search, test.search, "search");
    if ('hash' in test) is(url.hash, test.hash, "hash");

    url = new URL('https://www.example.net/what#foo?bar');
    ok(url, "Url exists!");

    if ('href' in test) url.href = test.href;
    if ('protocol' in test) url.protocol = test.protocol;
    if ('username' in test && test.username) url.username = test.username;
    if ('password' in test && test.password) url.password = test.password;
    if ('host' in test) url.host = test.host;
    if ('hostname' in test) url.hostname = test.hostname;
    if ('port' in test) url.port = test.port;
    if ('pathname' in test) url.pathname = test.pathname;
    if ('search' in test) url.search = test.search;
    if ('hash' in test) url.hash = test.hash;

    if ('href' in test) is(url.href, test.href, "href");
    if ('origin' in test) is(url.origin, test.origin, "origin");
    if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
    if ('username' in test) is(url.username, test.username, "username");
    if ('password' in test) is(url.password, test.password, "password");
    if ('host' in test) is(url.host, test.host, "host");
    if ('hostname' in test) is(test.hostname, url.hostname, "hostname");
    if ('port' in test) is(test.port, url.port, "port");
    if ('pathname' in test) is(test.pathname, url.pathname, "pathname");
    if ('search' in test) is(test.search, url.search, "search");
    if ('hash' in test) is(test.hash, url.hash, "hash");

    if ('href' in test) is (test.href, url + '', 'stringify works');
  }

  </script>

  <script>
    /** Test for Bug 991471 **/
    var url = new URL("http://localhost/");
    url.hostname = "";
    url.username = "tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt";
    url.hostname = "www.mozilla.org";
    url.username = "";
    url.hostname = "www.mozilla.org";
    is(url.href, "http://www.mozilla.org/", "No parsing error with empty host");
  </script>

  <script>
    /** Test for Bug 996055 **/
    var url = new URL("http://localhost/");
    url.hostname = "";
    is(url.href, "http://localhost/", "Empty hostname is ignored");
  </script>

  <script>
    /** Test for Bug 960014 **/
    var url = new URL("http://localhost/");
    url.hostname = "[2001::1]";
    is(url.hostname, "[2001::1]", "IPv6 hostname");
    is(url.href, "http://[2001::1]/");

    url.hostname = "[::192.9.5.5]";
    is(url.hostname, "[::192.9.5.5]", "IPv6 hostname");
    is(url.href, "http://[::192.9.5.5]/");

    url = new URL("http://localhost/");
    url.hostname = "[::]";
    is(url.hostname, "[::]", "IPv6 hostname");

    url = new URL("http://localhost/");
    url.host = "[2001::1]:30";
    is(url.hostname, "[2001::1]", "IPv6 hostname");
    is(url.port, 30, "Port");
    is(url.host, "[2001::1]:30", "IPv6 host");

    url = new URL("http://localhost/");
    // This should silently fail since it's missing the brackets
    url.hostname = "2001::1";
    is(url.hostname, "localhost", "Setting bad hostname fails");
  </script>

  <script>
    var blob = new Blob(['a']);
    var url = URL.createObjectURL(blob);

    var u = new URL(url);
    ok(u.origin, 'http://mochi.test:8888', "The URL generated from a blob URI has an origin");
  </script>

  <script>
    var blob = new Blob(['a']);
    var url = URL.createObjectURL(blob);

    var a = document.createElement('A');
    a.href = url;
    ok(a.origin, 'http://mochi.test:8888', "The 'a' element has the correct origin");
  </script>
</body>
</html>