Implement URL and trivially missing URLUtils members

Fixes #6322.
This commit is contained in:
Anthony Ramine 2015-06-13 21:49:49 +02:00
parent e7808c526c
commit a8e4558e82
26 changed files with 310 additions and 956 deletions

View file

@ -42,16 +42,46 @@ impl<'a> LocationMethods for &'a Location {
self.window.root().r().load_url(url); self.window.root().r().load_url(url);
} }
// https://url.spec.whatwg.org/#dom-urlutils-hash
fn Hash(self) -> USVString {
UrlHelper::Hash(&self.get_url())
}
// https://url.spec.whatwg.org/#dom-urlutils-href // https://url.spec.whatwg.org/#dom-urlutils-href
fn Href(self) -> USVString { fn Href(self) -> USVString {
UrlHelper::Href(&self.get_url()) UrlHelper::Href(&self.get_url())
} }
// https://url.spec.whatwg.org/#dom-urlutils-host
fn Host(self) -> USVString {
UrlHelper::Host(&self.get_url())
}
// https://url.spec.whatwg.org/#dom-urlutils-hostname
fn Hostname(self) -> USVString {
UrlHelper::Hostname(&self.get_url())
}
// https://url.spec.whatwg.org/#dom-urlutils-password
fn Password(self) -> USVString {
UrlHelper::Password(&self.get_url())
}
// https://url.spec.whatwg.org/#dom-urlutils-pathname // https://url.spec.whatwg.org/#dom-urlutils-pathname
fn Pathname(self) -> USVString { fn Pathname(self) -> USVString {
UrlHelper::Pathname(&self.get_url()) UrlHelper::Pathname(&self.get_url())
} }
// https://url.spec.whatwg.org/#dom-urlutils-port
fn Port(self) -> USVString {
UrlHelper::Port(&self.get_url())
}
// https://url.spec.whatwg.org/#dom-urlutils-protocol
fn Protocol(self) -> USVString {
UrlHelper::Protocol(&self.get_url())
}
// https://url.spec.whatwg.org/#URLUtils-stringification-behavior // https://url.spec.whatwg.org/#URLUtils-stringification-behavior
fn Stringifier(self) -> DOMString { fn Stringifier(self) -> DOMString {
self.Href().0 self.Href().0
@ -62,9 +92,9 @@ impl<'a> LocationMethods for &'a Location {
UrlHelper::Search(&self.get_url()) UrlHelper::Search(&self.get_url())
} }
// https://url.spec.whatwg.org/#dom-urlutils-hash // https://url.spec.whatwg.org/#dom-urlutils-username
fn Hash(self) -> USVString { fn Username(self) -> USVString {
UrlHelper::Hash(&self.get_url()) UrlHelper::Username(&self.get_url())
} }
} }

View file

@ -308,6 +308,7 @@ pub mod textdecoder;
pub mod textencoder; pub mod textencoder;
pub mod treewalker; pub mod treewalker;
pub mod uievent; pub mod uievent;
pub mod url;
pub mod urlhelper; pub mod urlhelper;
pub mod urlsearchparams; pub mod urlsearchparams;
pub mod userscripts; pub mod userscripts;

View file

@ -0,0 +1,150 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::URLBinding::{self, URLMethods};
use dom::bindings::error::{Error, Fallible};
use dom::bindings::global::GlobalRef;
use dom::bindings::js::Root;
use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::bindings::str::USVString;
use dom::urlhelper::UrlHelper;
use url::{Host, Url, UrlParser};
use util::str::DOMString;
use std::borrow::ToOwned;
// https://url.spec.whatwg.org/#url
#[dom_struct]
pub struct URL {
reflector_: Reflector,
// https://url.spec.whatwg.org/#concept-urlutils-url
url: Url,
}
impl URL {
fn new_inherited(url: Url) -> URL {
URL {
reflector_: Reflector::new(),
url: url,
}
}
pub fn new(global: GlobalRef, url: Url) -> Root<URL> {
reflect_dom_object(box URL::new_inherited(url),
global, URLBinding::Wrap)
}
}
impl URL {
// https://url.spec.whatwg.org/#constructors
pub fn Constructor(global: GlobalRef, url: USVString,
base: Option<USVString>)
-> Fallible<Root<URL>> {
let parsed_base = match base {
None => {
// Step 1.
None
},
Some(base) =>
// Step 2.1.
match Url::parse(&base.0) {
Ok(base) => Some(base),
Err(error) => {
// Step 2.2.
return Err(Error::Type(format!("could not parse base: {}", error)));
}
}
};
// Step 3.
let parsed_url = match parser_with_base(parsed_base.as_ref()).parse(&url.0) {
Ok(url) => url,
Err(error) => {
// Step 4.
return Err(Error::Type(format!("could not parse URL: {}", error)));
}
};
// Steps 5-8.
Ok(URL::new(global, parsed_url))
}
// https://url.spec.whatwg.org/#dom-url-domaintoasciidomain
pub fn DomainToASCII(_: GlobalRef, origin: USVString) -> USVString {
// Step 1.
let ascii_domain = Host::parse(&origin.0);
if let Ok(Host::Domain(string)) = ascii_domain {
// Step 3.
USVString(string.to_owned())
} else {
// Step 2.
USVString("".to_owned())
}
}
}
impl<'a> URLMethods for &'a URL {
// https://url.spec.whatwg.org/#dom-urlutils-hash
fn Hash(self) -> USVString {
UrlHelper::Hash(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-host
fn Host(self) -> USVString {
UrlHelper::Host(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-hostname
fn Hostname(self) -> USVString {
UrlHelper::Hostname(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-href
fn Href(self) -> USVString {
UrlHelper::Href(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-password
fn Password(self) -> USVString {
UrlHelper::Password(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-pathname
fn Pathname(self) -> USVString {
UrlHelper::Pathname(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-port
fn Port(self) -> USVString {
UrlHelper::Port(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-protocol
fn Protocol(self) -> USVString {
UrlHelper::Protocol(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-search
fn Search(self) -> USVString {
UrlHelper::Search(&self.url)
}
// https://url.spec.whatwg.org/#URLUtils-stringification-behavior
fn Stringifier(self) -> DOMString {
self.Href().0
}
// https://url.spec.whatwg.org/#dom-urlutils-username
fn Username(self) -> USVString {
UrlHelper::Username(&self.url)
}
}
fn parser_with_base<'a>(base: Option<&'a Url>) -> UrlParser<'a> {
let mut parser = UrlParser::new();
if let Some(base) = base {
parser.base_url(base);
}
parser
}

View file

@ -7,24 +7,11 @@ use dom::bindings::str::USVString;
use url::{Url, SchemeData}; use url::{Url, SchemeData};
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::fmt::Write;
pub struct UrlHelper; pub struct UrlHelper;
impl UrlHelper { impl UrlHelper {
// https://url.spec.whatwg.org/#dom-urlutils-href
pub fn Href(url: &Url) -> USVString {
USVString(url.serialize())
}
// https://url.spec.whatwg.org/#dom-urlutils-search
pub fn Search(url: &Url) -> USVString {
USVString(match url.query {
None => "".to_owned(),
Some(ref query) if query.is_empty() => "".to_owned(),
Some(ref query) => format!("?{}", query)
})
}
// https://url.spec.whatwg.org/#dom-urlutils-hash // https://url.spec.whatwg.org/#dom-urlutils-hash
pub fn Hash(url: &Url) -> USVString { pub fn Hash(url: &Url) -> USVString {
USVString(match url.fragment { USVString(match url.fragment {
@ -34,6 +21,35 @@ impl UrlHelper {
}) })
} }
// https://url.spec.whatwg.org/#dom-urlutils-host
pub fn Host(url: &Url) -> USVString {
USVString(match url.scheme_data {
SchemeData::NonRelative(..) => "".to_owned(),
SchemeData::Relative(ref scheme_data) => {
let mut host = scheme_data.host.serialize();
if let Some(port) = scheme_data.port {
write!(host, ":{}", port).unwrap();
}
host
},
})
}
// https://url.spec.whatwg.org/#dom-urlutils-hostname
pub fn Hostname(url: &Url) -> USVString {
USVString(url.serialize_host().unwrap_or_else(|| "".to_owned()))
}
// https://url.spec.whatwg.org/#dom-urlutils-href
pub fn Href(url: &Url) -> USVString {
USVString(url.serialize())
}
// https://url.spec.whatwg.org/#dom-urlutils-password
pub fn Password(url: &Url) -> USVString {
USVString(url.password().unwrap_or("").to_owned())
}
// https://url.spec.whatwg.org/#dom-urlutils-pathname // https://url.spec.whatwg.org/#dom-urlutils-pathname
pub fn Pathname(url: &Url) -> USVString { pub fn Pathname(url: &Url) -> USVString {
// FIXME: Url null check is skipped for now // FIXME: Url null check is skipped for now
@ -43,6 +59,19 @@ impl UrlHelper {
}) })
} }
// https://url.spec.whatwg.org/#dom-urlutils-port
pub fn Port(url: &Url) -> USVString {
USVString(match url.port() {
None => "".to_owned(),
Some(port) => port.to_string(),
})
}
// https://url.spec.whatwg.org/#dom-urlutils-protocol
pub fn Protocol(url: &Url) -> USVString {
USVString(format!("{}:", url.scheme.clone()))
}
// https://html.spec.whatwg.org/multipage/#same-origin // https://html.spec.whatwg.org/multipage/#same-origin
pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool { pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool {
if urlA.host() != urlB.host() { if urlA.host() != urlB.host() {
@ -56,4 +85,18 @@ impl UrlHelper {
} }
return true return true
} }
// https://url.spec.whatwg.org/#dom-urlutils-search
pub fn Search(url: &Url) -> USVString {
USVString(match url.query {
None => "".to_owned(),
Some(ref query) if query.is_empty() => "".to_owned(),
Some(ref query) => format!("?{}", query)
})
}
// https://url.spec.whatwg.org/#dom-urlutils-username
pub fn Username(url: &Url) -> USVString {
USVString(url.username().unwrap_or("").to_owned())
}
} }

View file

@ -0,0 +1,12 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
// https://url.spec.whatwg.org/#url
[Constructor(USVString url, optional USVString base)/*,
Exposed=(Window,Worker)*/]
interface URL {
static USVString domainToASCII(USVString domain);
// static USVString domainToUnicode(USVString domain);
};
URL implements URLUtils;

View file

@ -10,11 +10,17 @@ interface URLUtils {
readonly attribute USVString href; readonly attribute USVString href;
//readonly attribute USVString origin; //readonly attribute USVString origin;
// attribute USVString protocol; // attribute USVString protocol;
readonly attribute USVString protocol;
// attribute USVString username; // attribute USVString username;
readonly attribute USVString username;
// attribute USVString password; // attribute USVString password;
readonly attribute USVString password;
// attribute USVString host; // attribute USVString host;
readonly attribute USVString host;
// attribute USVString hostname; // attribute USVString hostname;
readonly attribute USVString hostname;
// attribute USVString port; // attribute USVString port;
readonly attribute USVString port;
// attribute USVString pathname; // attribute USVString pathname;
readonly attribute USVString pathname; readonly attribute USVString pathname;
// attribute USVString search; // attribute USVString search;

View file

@ -11,11 +11,15 @@ interface URLUtilsReadOnly {
readonly attribute USVString href; readonly attribute USVString href;
//readonly attribute USVString origin; //readonly attribute USVString origin;
//readonly attribute USVString protocol; readonly attribute USVString protocol;
//readonly attribute USVString host; readonly attribute USVString host;
//readonly attribute USVString hostname; readonly attribute USVString hostname;
//readonly attribute USVString port; readonly attribute USVString port;
//readonly attribute USVString pathname; readonly attribute USVString pathname;
readonly attribute USVString search; readonly attribute USVString search;
readonly attribute USVString hash; readonly attribute USVString hash;
// This is only doing as well as gecko right now, bug 824857 is on file for
// adding attribute stringifier support.
stringifier;
}; };

View file

@ -12,6 +12,7 @@ use dom::urlhelper::UrlHelper;
use dom::workerglobalscope::WorkerGlobalScope; use dom::workerglobalscope::WorkerGlobalScope;
use url::Url; use url::Url;
use util::str::DOMString;
// https://html.spec.whatwg.org/multipage/#worker-locations // https://html.spec.whatwg.org/multipage/#worker-locations
#[dom_struct] #[dom_struct]
@ -36,16 +37,49 @@ impl WorkerLocation {
} }
impl<'a> WorkerLocationMethods for &'a WorkerLocation { impl<'a> WorkerLocationMethods for &'a WorkerLocation {
// https://url.spec.whatwg.org/#dom-urlutils-hash
fn Hash(self) -> USVString {
UrlHelper::Hash(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-host
fn Host(self) -> USVString {
UrlHelper::Host(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-hostname
fn Hostname(self) -> USVString {
UrlHelper::Hostname(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-href
fn Href(self) -> USVString { fn Href(self) -> USVString {
UrlHelper::Href(&self.url) UrlHelper::Href(&self.url)
} }
// https://url.spec.whatwg.org/#dom-urlutils-pathname
fn Pathname(self) -> USVString {
UrlHelper::Pathname(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-port
fn Port(self) -> USVString {
UrlHelper::Port(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-protocol
fn Protocol(self) -> USVString {
UrlHelper::Protocol(&self.url)
}
// https://url.spec.whatwg.org/#dom-urlutils-search
fn Search(self) -> USVString { fn Search(self) -> USVString {
UrlHelper::Search(&self.url) UrlHelper::Search(&self.url)
} }
fn Hash(self) -> USVString { // https://url.spec.whatwg.org/#URLUtils-stringification-behavior
UrlHelper::Hash(&self.url) fn Stringifier(self) -> DOMString {
self.Href().0
} }
} }

View file

@ -1,9 +1,8 @@
[open-url-worker-origin.htm] [open-url-worker-origin.htm]
type: testharness type: testharness
expected: TIMEOUT
[XMLHttpRequest: worker scripts, origin and referrer]
expected: NOTRUN
[Referer header] [Referer header]
expected: FAIL expected: FAIL
[Origin header]
expected: FAIL

View file

@ -1,3 +1,4 @@
[send-after-setting-document-domain.htm] [send-after-setting-document-domain.htm]
type: testharness type: testharness
expected: TIMEOUT [loading documents from original origin after setting document.domain]
expected: FAIL

View file

@ -1,5 +0,0 @@
[send-authentication-basic-cors.htm]
type: testharness
[XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure)]
expected: FAIL

View file

@ -1,5 +0,0 @@
[send-authentication-basic-setrequestheader.htm]
type: testharness
[XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader()]
expected: FAIL

View file

@ -1,5 +0,0 @@
[location_host.html]
type: testharness
[location host]
expected: FAIL

View file

@ -1,5 +0,0 @@
[location_hostname.html]
type: testharness
[location hostname]
expected: FAIL

View file

@ -1,5 +0,0 @@
[location_pathname.html]
type: testharness
[location pathname]
expected: FAIL

View file

@ -1,5 +0,0 @@
[location_port.html]
type: testharness
[location port]
expected: FAIL

View file

@ -1,5 +0,0 @@
[location_protocol.html]
type: testharness
[location protocol]
expected: FAIL

View file

@ -1,20 +1,5 @@
[interfaces.html] [interfaces.html]
type: testharness type: testharness
[URL interface: existence and properties of interface object]
expected: FAIL
[URL interface object length]
expected: FAIL
[URL interface: existence and properties of interface prototype object]
expected: FAIL
[URL interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[URL interface: operation domainToASCII(ScalarValueString)]
expected: FAIL
[URL interface: operation domainToUnicode(ScalarValueString)] [URL interface: operation domainToUnicode(ScalarValueString)]
expected: FAIL expected: FAIL
@ -54,60 +39,12 @@
[URL interface: attribute hash] [URL interface: attribute hash]
expected: FAIL expected: FAIL
[URL must be primary interface of new URL("http://foo")]
expected: FAIL
[Stringification of new URL("http://foo")]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "domainToASCII" with the proper type (0)]
expected: FAIL
[URL interface: calling domainToASCII(ScalarValueString) on new URL("http://foo") with too few arguments must throw TypeError]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "domainToUnicode" with the proper type (1)]
expected: FAIL
[URL interface: calling domainToUnicode(ScalarValueString) on new URL("http://foo") with too few arguments must throw TypeError]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "href" with the proper type (2)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "origin" with the proper type (3)] [URL interface: new URL("http://foo") must inherit property "origin" with the proper type (3)]
expected: FAIL expected: FAIL
[URL interface: new URL("http://foo") must inherit property "protocol" with the proper type (4)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "username" with the proper type (5)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "password" with the proper type (6)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "host" with the proper type (7)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "hostname" with the proper type (8)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "port" with the proper type (9)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "pathname" with the proper type (10)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "search" with the proper type (11)]
expected: FAIL
[URL interface: new URL("http://foo") must inherit property "searchParams" with the proper type (12)] [URL interface: new URL("http://foo") must inherit property "searchParams" with the proper type (12)]
expected: FAIL expected: FAIL
[URL interface: new URL("http://foo") must inherit property "hash" with the proper type (13)]
expected: FAIL
[URLSearchParams interface: existence and properties of interface object] [URLSearchParams interface: existence and properties of interface object]
expected: FAIL expected: FAIL

View file

@ -1,812 +1,38 @@
[url-constructor.html] [url-constructor.html]
type: testharness type: testharness
[Parsing: <http://example\t.\norg> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:foo.com> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <\t :foo.com \n> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: < foo.com > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <a:\t foo.com> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:0/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:b/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f: /c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:\n/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:fifty-two/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://f:999999/c> against <http://example.org/foo/bar>] [Parsing: <http://f:999999/c> against <http://example.org/foo/bar>]
expected: FAIL expected: FAIL
[Parsing: <http://f: 21 / b ? d # e > against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: < \t> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:foo.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:a> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:#> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#;?> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <?> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <:23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </:23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <::> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <::23> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http::@c:29> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://&a:foo(b\]c@d:2/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo.com/\\@> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:\\\\foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:\\\\a\\b:c\\d@foo.com\\> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:/bar.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://///////> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <foo:////://///> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <c:/foo> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <//foo/bar> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <[61:24:74\]:98> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:[61:27\]/:foo> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[1::2\]:3:4> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1\]> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://2001::1\]:80> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[2001::1\]> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http://[2001::1\]:80> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftp:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <https:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <file:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftps:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <gopher:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ws:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <wss:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <data:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <javascript:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <mailto:/example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <http:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftp:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <https:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ftps:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <gopher:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <ws:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <wss:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <data:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <javascript:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <mailto:example.com/> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/b/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/ /c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a%2fc> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: </a/%2f/c> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <#β> against <http://example.org/foo/bar>] [Parsing: <#β> against <http://example.org/foo/bar>]
expected: FAIL expected: FAIL
[Parsing: <data:text/html,test#test> against <http://example.org/foo/bar>]
expected: FAIL
[Parsing: <file:c:\\foo\\bar.html> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: < File:c|////foo\\bar.html> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <C|/foo/bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: </C|\\foo\\bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//server/file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <\\\\server\\file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: </\\server/file> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:///home/me> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <//> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <///> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <///test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost/> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file://localhost/test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <file:test> against <file:///tmp/mock/path>]
expected: FAIL
[Parsing: <http://example.com/././foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/./.foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/.> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/./> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/..bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../ton> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/../../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/../../../ton> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e%2> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com////../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar//../..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo/bar//..> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%20foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2zbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%2©zbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%41%7a> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo\t‘%91> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo%00%51> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/(%28:%3A%29)> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/foo\tbar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com\\\\foo\\\\bar> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/@asdf%40> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/你好你好> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com/‥/foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com//foo> against <about:blank>]
expected: FAIL
[Parsing: <http://example.com//foo//bar> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com/foo?bar=baz#> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>] [Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>]
expected: FAIL expected: FAIL
[Parsing: <data:test# »> against <about:blank>] [Parsing: <data:test# »> against <about:blank>]
expected: FAIL expected: FAIL
[Parsing: <http://[www.google.com\]/> against <about:blank>]
expected: FAIL
[Parsing: <http://www.google.com> against <about:blank>]
expected: FAIL
[Parsing: <http://192.0x00A80001> against <about:blank>] [Parsing: <http://192.0x00A80001> against <about:blank>]
expected: FAIL expected: FAIL
[Parsing: <http://www/foo%2Ehtml> against <about:blank>]
expected: FAIL
[Parsing: <http://www/foo/%2E/html> against <about:blank>]
expected: FAIL
[Parsing: <http://user:pass@/> against <about:blank>]
expected: FAIL
[Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:\\\\www.google.com\\foo> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <httpa://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <http://foo:-80/> against <about:blank>]
expected: FAIL
[Parsing: <https://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <https://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <ftp://foo:21/> against <about:blank>]
expected: FAIL
[Parsing: <ftp://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <gopher://foo:70/> against <about:blank>]
expected: FAIL
[Parsing: <gopher://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <ws://foo:815/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:80/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:81/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:443/> against <about:blank>]
expected: FAIL
[Parsing: <wss://foo:815/> against <about:blank>]
expected: FAIL
[Parsing: <http:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftp:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <https:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <madeupscheme:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <file:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftps:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <gopher:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ws:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <wss:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <data:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <javascript:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <mailto:/example.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftp:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <https:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <madeupscheme:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ftps:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <gopher:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <ws:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <wss:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <data:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <javascript:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <mailto:example.com/> against <about:blank>]
expected: FAIL
[Parsing: <http:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@pple.com> against <about:blank>]
expected: FAIL
[Parsing: <http::b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://:b@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://user@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <https:@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:b@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http::@/www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://a:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://www.@pple.com> against <about:blank>]
expected: FAIL
[Parsing: <http:@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http:/@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://@:www.example.com> against <about:blank>]
expected: FAIL
[Parsing: <http://:@www.example.com> against <about:blank>]
expected: FAIL
[Parsing: </> against <http://www.example.com/test>]
expected: FAIL
[Parsing: </test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <.> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <..> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <./test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../aaa/test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <../../test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <中/test.txt> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <http://www.example2.com> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <//www.example2.com> against <http://www.example.com/test>]
expected: FAIL
[Parsing: <http://ExAmPlE.CoM> against <http://other.com/>]
expected: FAIL
[Parsing: <http://example example.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://Goo%20 goo%7C|.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://[\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://[:\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://GOO  goo.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://GOOgoo.com> against <http://other.com/>] [Parsing: <http://GOOgoo.com> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://www.foo。bar.com> against <http://other.com/>] [Parsing: <http://www.foo。bar.com> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://﷐zyx.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%b7%90zyx.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://.com> against <http://other.com/>] [Parsing: <http://.com> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%bc%85%ef%bc%94%ef%bc%91.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%ef%bc%85%ef%bc%90%ef%bc%90.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://你好你好> against <http://other.com/>] [Parsing: <http://你好你好> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://%zz%66%a.com> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%25> against <http://other.com/>]
expected: FAIL
[Parsing: <http://hello%00> against <http://other.com/>]
expected: FAIL
[Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>] [Parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/>]
expected: FAIL
[Parsing: <http://192.168.0.257> against <http://other.com/>] [Parsing: <http://192.168.0.257> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://%3g%78%63%30%2e%30%32%35%30%2E.01> against <http://other.com/>]
expected: FAIL
[Parsing: <http://192.168.0.1 hello> against <http://other.com/>]
expected: FAIL
[Parsing: <http://> against <http://other.com/>] [Parsing: <http://> against <http://other.com/>]
expected: FAIL expected: FAIL
[Parsing: <http://[google.com\]> against <http://other.com/>]
expected: FAIL
[Parsing: <http://foo:💩@example.com/bar> against <http://other.com/>]
expected: FAIL
[Parsing: <x> against <test:test>]
expected: FAIL
[Parsing: </some/path> against <http://user@example.org/smth>]
expected: FAIL
[Parsing: <> against <http://user:pass@example.org:21/smth>]
expected: FAIL
[Parsing: </some/path> against <http://user:pass@example.org:21/smth>]
expected: FAIL

View file

@ -1,5 +0,0 @@
[WorkerLocation.htm]
type: testharness
[ WorkerLocation object ]
expected: FAIL

View file

@ -1,5 +0,0 @@
[WorkerLocation_pathname.htm]
type: testharness
[ WorkerLocation URL decomposition IDL attribute: pathname ]
expected: FAIL

View file

@ -54,39 +54,9 @@
[WorkerLocation interface: attribute origin] [WorkerLocation interface: attribute origin]
expected: FAIL expected: FAIL
[WorkerLocation interface: attribute protocol]
expected: FAIL
[WorkerLocation interface: attribute host]
expected: FAIL
[WorkerLocation interface: attribute hostname]
expected: FAIL
[WorkerLocation interface: attribute port]
expected: FAIL
[WorkerLocation interface: attribute pathname]
expected: FAIL
[WorkerLocation interface: self.location must inherit property "origin" with the proper type (1)] [WorkerLocation interface: self.location must inherit property "origin" with the proper type (1)]
expected: FAIL expected: FAIL
[WorkerLocation interface: self.location must inherit property "protocol" with the proper type (2)]
expected: FAIL
[WorkerLocation interface: self.location must inherit property "host" with the proper type (3)]
expected: FAIL
[WorkerLocation interface: self.location must inherit property "hostname" with the proper type (4)]
expected: FAIL
[WorkerLocation interface: self.location must inherit property "port" with the proper type (5)]
expected: FAIL
[WorkerLocation interface: self.location must inherit property "pathname" with the proper type (6)]
expected: FAIL
[DedicatedWorkerGlobalScope interface: self must inherit property "postMessage" with the proper type (0)] [DedicatedWorkerGlobalScope interface: self must inherit property "postMessage" with the proper type (0)]
expected: FAIL expected: FAIL

View file

@ -1,5 +0,0 @@
[members.html]
type: testharness
[members of WorkerLocation]
expected: FAIL

View file

@ -1,5 +0,0 @@
[setting-members.html]
type: testharness
[setting members of WorkerLocation]
expected: FAIL

View file

@ -1,5 +0,0 @@
[worker-separate-file.html]
type: testharness
[location with a worker in separate file]
expected: FAIL

View file

@ -193,6 +193,7 @@ var interfaceNamesInGlobalScope = [
"TextEncoder", "TextEncoder",
"TreeWalker", "TreeWalker",
"UIEvent", "UIEvent",
"URL",
"URLSearchParams", "URLSearchParams",
"ValidityState", "ValidityState",
"WebGLRenderingContext", "WebGLRenderingContext",