Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

URL: test host parsing of URLs with unknown schemes #4406

Merged
merged 7 commits into from
Jan 24, 2017

Conversation

annevk
Copy link
Member

@annevk annevk commented Dec 29, 2016

URL Standard change: whatwg/url#185.


This change is Reviewable

@wpt-pr-bot
Copy link
Collaborator

@annevk annevk force-pushed the annevk/url-non-special-scheme-host branch from 47efa6b to 7d81096 Compare January 5, 2017 15:36
annevk added a commit to whatwg/url that referenced this pull request Jan 20, 2017
For URLs without a special scheme we cannot use the host parser
directly due to compatibility issues. Instead we percent-encode
the input.

Tests: web-platform-tests/wpt#4406.

Fixes #148.
@annevk annevk force-pushed the annevk/url-non-special-scheme-host branch from 19ee073 to 5406bb0 Compare January 20, 2017 12:45
@annevk annevk force-pushed the annevk/url-non-special-scheme-host branch from 5406bb0 to 1d52991 Compare January 20, 2017 13:08
annevk added a commit that referenced this pull request Jan 20, 2017
These used to be part of
#4406.
@wpt-stability-bot
Copy link

wpt-stability-bot commented Jan 20, 2017

Firefox (nightly channel)

Testing web-platform-tests at revision 045b749
Using browser at version BuildID 20170118211214; SourceStamp a5253dce8b67c2248d7b92ef664a6dd6664e7609
Starting 10 test iterations
No tests run.

@wpt-stability-bot
Copy link

wpt-stability-bot commented Jan 20, 2017

Chrome (unstable channel)

Testing web-platform-tests at revision 290faf8
Using browser at version 55.0.2883.75
Starting 10 test iterations
All results were stable

All results

/url/url-constructor.html
Subtest Results
ERROR
/url/url-setters.html
Subtest Results
OK
<area>: Setting <http://me@example.net>.password = 'secret' PASS
<a>: Setting <sc://x/>.hostname = '\n' FAIL
URL: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr' PASS
<a>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must. FAIL
<a>: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value FAIL
<area>: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password PASS
URL: Setting <http://example.net/>.hostname = '[::1.2.3.4x]' FAIL
<a>: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased FAIL
<area>: Setting <nonsense:///test>.protocol = 'https' FAIL
<area>: Setting <http://example.net>.port = '8080' PASS
<area>: Setting <http://:secret@example.net>.username = 'me' PASS
URL: Setting <https://example.net>.search = '' PASS
<area>: Setting <https://example.net?lang=en-US>.hash = '##nav' PASS
<a>: Setting <sc://x/>.hostname = '\r' FAIL
URL: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
<area>: Setting <ftp://example.net>.protocol = 'test' FAIL
<a>: Setting <https://example.net#nav>.pathname = '../home' PASS
URL: Setting <sc://x/>.host = '\t' FAIL
URL: Setting <https://example.net#nav>.search = 'lang=fr' PASS
<area>: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path PASS
<area>: Setting <file:///home/me/index.html>.password = 'secret' No host means no password PASS
<a>: Setting <https://example.net#nav>.hash = 'main' PASS
URL: Setting <sc://x/>.host = '?' FAIL
<area>: Setting <sc://x/>.hostname = '@' FAIL
<a>: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
URL: Setting <file:///home/you/index.html>.username = 'me' No host means no username PASS
URL: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket' FAIL
URL: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored PASS
<area>: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
URL: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
URL: Setting <http://example.net/>.host = '[::1.]' FAIL
URL: Setting <sc://x/>.host = ' ' FAIL
<area>: Setting <sc://x/>.hostname = '\r' FAIL
<area>: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6 FAIL
<a>: Setting <sc://x/>.hostname = '?' FAIL
<area>: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored PASS
<area>: Setting <sc://x/>.hostname = '#' FAIL
<a>: Setting <http://example.net>.host = '' The empty host is not valid for special schemes PASS
<a>: Setting <http://example.net/>.host = '[::1.]' FAIL
URL: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
<a>: Setting <ssh://me@example.net>.protocol = 'file' FAIL
<area>: Setting <ssh://me@example.net>.protocol = 'gopher' FAIL
<a>: Setting <sc://x/>.hostname = '@' FAIL
<a>: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special FAIL
<area>: Setting <a:/>.pathname = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.`
URL: Setting <http://example.net:8080>.port = '80' Default port number is removed PASS
URL: Setting <http://example.net/>.host = '[::1.2.]' FAIL
<area>: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket' FAIL
<area>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized PASS
<area>: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username PASS
<area>: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr' FAIL
<a>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host PASS
<a>: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special FAIL
URL: Setting <a:/>.hash = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`
<a>: Setting <http://example.net/>.host = '[::1.2.]' FAIL
<a>: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host PASS
URL: Setting <sc://x/>.host = '@' FAIL
<area>: Setting <a://example.net>.protocol = '+b' No leading punctuation FAIL
<area>: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special FAIL
URL: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized PASS
<area>: Setting <http://example.net:8080>.port = '80' Default port number is removed PASS
URL: Setting <https://example.net?lang=en-US>.search = '' PASS
<area>: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password PASS
<a>: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr' FAIL
<a>: Setting <sc://x/>.hostname = ' ' FAIL
<area>: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value FAIL
URL: Setting <file:///home/me/index.html>.password = 'secret' No host means no password PASS
<a>: Setting <https://example.net?lang=en-US#nav>.hash = '' PASS
<a>: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value PASS
<a>: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
<area>: Setting <http://example.net>.username = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
<a>: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme PASS
<a>: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored PASS
<a>: Setting <a://example.net>.protocol = 'b' FAIL
URL: Setting <http://me@example.net>.username = '' PASS
<a>: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored FAIL
<a>: Setting <file:///home/you/index.html>.username = 'me' No host means no username PASS
<a>: Setting <sc://x/>.hostname = '\t' FAIL
<a>: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored PASS
<a>: Setting <a://example.net>.protocol = 'bC0+-.' FAIL
<a>: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though. FAIL
URL: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
<area>: Setting <sc://x/>.host = '/' FAIL
<area>: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
<a>: Setting <http://example.net/>.host = '[google.com]' Broken IPv6 FAIL
<area>: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password PASS
<a>: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers PASS
<a>: Setting <a:/>.search = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`
<a>: Setting <http://me:secret@example.net>.username = '' PASS
URL: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is FAIL
URL: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized FAIL
<a>: Setting <https://example.net>.hash = 'main' PASS
URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored FAIL
<a>: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6 FAIL
<a>: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs PASS
<area>: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr' PASS
<a>: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password PASS
<area>: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
URL: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs FAIL
<area>: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
URL: Setting <http://example.net>.pathname = '?' ? needs to be encoded PASS
<area>: Setting <file:///home/you/index.html>.username = 'me' No host means no username PASS
URL: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password PASS
URL: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized PASS
<area>: Setting <http://example.net/>.host = '[::1.]' FAIL
<area>: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs PASS
<a>: Setting <a:/>.hash = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`
<a>: Setting <sc://x/>.host = '/' FAIL
<area>: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme PASS
<area>: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
URL: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased FAIL
URL: Setting <https://example.net>.host = 'example.com:443' Default port number is removed PASS
<area>: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored PASS
<a>: Setting <http://example.net/>.host = '[::1.2.3.4x]' FAIL
URL: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host PASS
<a>: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr' PASS
<a>: Setting <https://example.net?lang=en-US#nav>.search = '?' FAIL
URL: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value PASS
<area>: Setting <a:/>.hash = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`
URL: Setting <a://example.net>.protocol = 'b' FAIL
<a>: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged. FAIL
<a>: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host PASS
URL: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored PASS
<a>: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
<a>: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme PASS
URL: Setting <https://example.net#nav>.pathname = 'home' PASS
URL: Setting <http://example.net/>.hostname = '[::1.]' FAIL
<area>: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable FAIL
<area>: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is FAIL
<a>: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
<area>: Setting <https://example.net#nav>.pathname = 'home' PASS
<area>: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored PASS
<area>: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
<area>: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected FAIL
URL: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password PASS
URL: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
<area>: Setting <http://example.net>.password = 'secret' PASS
URL: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored FAIL
URL: Setting <sc://x/>.hostname = '/' FAIL
<a>: Setting <https://example.net?lang=en-US#nav>.search = '' PASS
URL: Setting <https://example.net?lang=en-US#nav>.hash = '#' FAIL
<a>: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments. FAIL
<a>: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected FAIL
<a>: Setting <unix:/run/foo.socket>.username = 'me' No host means no username PASS
<area>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host FAIL
URL: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
URL: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme PASS
<area>: Setting <http://example.net>.host = 'example.com:8080' PASS
<a>: Setting <nonsense:///test>.protocol = 'https' FAIL
URL: Setting <sc://x/>.host = '\n' FAIL
<area>: Setting <https://example.net?lang=en-US#nav>.search = '' PASS
<a>: Setting <https://example.net?lang=en-US#nav>.hash = '#' FAIL
URL: Setting <a://example.net>.protocol = '+b' No leading punctuation FAIL
<area>: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
<area>: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password PASS
<area>: Setting <http://example.net/>.hostname = '[::1.2.3.4x]' FAIL
<area>: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
<a>: Setting <ftp://example.net>.protocol = 'test' FAIL
URL: Setting <http://example.net>.password = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
<area>: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<a>: Setting <sc://x/>.host = '#' FAIL
<area>: Setting <http://example.net>.host = '' The empty host is not valid for special schemes PASS
<a>: Setting <http://example.net>.password = 'secret' PASS
<area>: Setting <sc://x/>.hostname = '' Non-special scheme FAIL
<a>: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs FAIL
URL: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected FAIL
<area>: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes PASS
<area>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes FAIL
URL: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized PASS
<area>: Setting <https://example.net>.search = '' PASS
URL: Setting <http://me:secret@example.net>.password = '' PASS
<area>: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged. FAIL
<a>: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
URL: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified FAIL
<area>: Setting <http://example.net/>.host = '[::1.2.]' FAIL
URL: Setting <http://example.net>.host = 'example.com:80' Default port number is removed PASS
URL: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special FAIL
<area>: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored PASS
<a>: Setting <a://example.net>.protocol = '+b' No leading punctuation FAIL
<area>: Setting <https://example.net>.host = 'example.com:443' Default port number is removed PASS
<a>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host FAIL
URL: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected FAIL
URL: Setting <https://example.net?lang=en-US#nav>.search = '?' FAIL
<a>: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
<a>: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers PASS
<a>: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes PASS
<area>: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host PASS
URL: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged. FAIL
<area>: Setting <http://example.net/>.host = '[google.com]' Broken IPv6 FAIL
<a>: Setting <file:///home/me/index.html>.password = 'secret' No host means no password PASS
URL: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password PASS
<area>: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
<a>: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
URL: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host FAIL
URL: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers PASS
<a>: Setting <sc://x/>.hostname = '#' FAIL
<area>: Setting <a://example.net>.protocol = '0b' No leading digit FAIL
Loading data… PASS
<area>: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though. FAIL
<a>: Setting <https://example.net>.search = '' PASS
<a>: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected FAIL
URL: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored PASS
<a>: Setting <https://example.net?lang=en-US>.hash = '##nav' PASS
<area>: Setting <http://:secret@example.net>.password = '' PASS
<area>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host FAIL
URL: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored PASS
<area>: Setting <sc://x/>.hostname = '/' FAIL
<area>: Setting <https://example.net?lang=en-US#nav>.hash = '#' FAIL
<area>: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special FAIL
<area>: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized FAIL
<a>: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<a>: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
<area>: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored PASS
<area>: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs FAIL
<a>: Setting <sc://x/>.hostname = '' Non-special scheme FAIL
<a>: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr' PASS
<area>: Setting <sc://x/>.host = '@' FAIL
<a>: Setting <http://:secret@example.net>.username = 'me' PASS
<a>: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password PASS
URL: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
<a>: Setting <https://example.net#nav>.search = 'lang=fr' PASS
URL: Setting <sc://x/>.hostname = '\n' FAIL
URL: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs PASS
URL: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
URL: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable FAIL
<a>: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error FAIL
<a>: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <ssh://me@example.net>.protocol = 'file' FAIL
<a>: Setting <http://example.net/>.hostname = '[::1.2.3.4x]' FAIL
<area>: Setting <https://example.net?lang=en-US>.search = '' PASS
URL: Setting <sc://x/>.host = '/' FAIL
<area>: Setting <http://me:secret@example.net>.password = '' PASS
<area>: Setting <https://example.net?lang=en-US#nav>.hash = '' PASS
<area>: Setting <https://example.net?lang=en-US#nav>.hash = '#main' PASS
<a>: Setting <http://example.net>.password = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
<a>: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored PASS
<area>: Setting <https://example.net#nav>.pathname = '../home' PASS
<a>: Setting <http://example.net:8080>.port = '80' Default port number is removed PASS
<a>: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
<a>: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
<a>: Setting <sc://x/>.hostname = '/' FAIL
<area>: Setting <a://example.net>.protocol = 'bC0+-.' FAIL
URL: Setting <https://example.net>.hash = 'main' PASS
URL: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored PASS
<a>: Setting <https://example.net>.protocol = 's' FAIL
<a>: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
<area>: Setting <sc://x/>.host = '\r' FAIL
URL: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
URL: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error FAIL
<area>: Setting <https://example.net>.protocol = 's' FAIL
<area>: Setting <sc://x/>.host = '#' FAIL
<area>: Setting <http://example.net/>.hostname = '[::1.]' FAIL
<area>: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
URL: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
URL: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr' PASS
URL: Setting <a://example.net>.protocol = 'bC0+-.' FAIL
<a>: Setting <http://example.net/>.host = '[::1.2.3.]' FAIL
<a>: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored PASS
<area>: Setting <a://example.net>.protocol = 'b' FAIL
URL: Setting <https://example.net>.protocol = 's' FAIL
<area>: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error FAIL
<area>: Setting <http://example.net>.host = 'example.com:80' Default port number is removed PASS
<a>: Setting <https://example.net:4433>.port = '443' Default port number is removed PASS
<area>: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr' PASS
<a>: Setting <https://example.net#nav>.pathname = 'home' PASS
<area>: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes PASS
URL: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username PASS
URL: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized PASS
<area>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must. FAIL
<area>: Setting <https://example.net#nav>.hash = 'main' PASS
<a>: Setting <sc://x/>.host = ' ' FAIL
URL: Setting <http://example.net>.host = '' The empty host is not valid for special schemes PASS
<area>: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored FAIL
<area>: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
<a>: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is PASS
<a>: Setting <http://example.net/>.hostname = '[::1.]' FAIL
URL: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special FAIL
<a>: Setting <http://example.net>.username = 'me' PASS
<area>: Setting <sc://x/>.host = '' Non-special scheme FAIL
<area>: Setting <sc://x/>.hostname = '\n' FAIL
<a>: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
URL: Setting <http://me@example.net>.password = 'secret' PASS
URL: Setting <http://:secret@example.net>.password = '' PASS
URL: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value FAIL
URL: Setting <ssh://me@example.net>.protocol = 'file' FAIL
URL: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
URL: Setting <http://example.net>.port = '8080' PASS
<a>: Setting <http://example.net:8080>.hostname = 'example.com' PASS
URL: Setting <nonsense:///test>.protocol = 'https' FAIL
<area>: Setting <http://example.net>.username = 'me' PASS
<area>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes FAIL
<a>: Setting <a://example.net>.protocol = '0b' No leading digit FAIL
<area>: Setting <https://example.net>.hash = 'main' PASS
<area>: Setting <sc://x/>.host = '\t' FAIL
URL: Setting <https://example.net#nav>.pathname = '../home' PASS
<a>: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket' FAIL
<a>: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username PASS
<area>: Setting <http://example.net>.password = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
<area>: Setting <sc://x/>.host = '?' FAIL
URL: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<a>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized PASS
URL: Setting <sc://x/>.hostname = '@' FAIL
<area>: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
<a>: Setting <sc://x/>.host = '\t' FAIL
<area>: Setting <a:/>.search = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`
<a>: Setting <ssh://me@example.net>.protocol = 'gopher' FAIL
<area>: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts FAIL
<area>: Setting <sc://x/>.host = ' ' FAIL
<area>: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
<a>: Setting <sc://x/>.host = '' Non-special scheme FAIL
URL: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<a>: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path PASS
URL: Setting <https://example.net?lang=en-US#nav>.search = '' PASS
URL: Setting <ftp://example.net>.protocol = 'test' FAIL
<a>: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored PASS
URL: Setting <sc://x/>.host = '' Non-special scheme FAIL
<a>: Setting <sc://x/>.host = '?' FAIL
<area>: Setting <http://me@example.net>.username = '' PASS
<a>: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable FAIL
URL: Setting <sc://x/>.hostname = ' ' FAIL
<a>: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored PASS
<a>: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified FAIL
<area>: Setting <https://example.net#nav>.search = 'lang=fr' PASS
<area>: Setting <https://example.net?lang=en-US#nav>.search = '?' FAIL
URL: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path PASS
<a>: Setting <https://example.net>.host = 'example.com:443' Default port number is removed PASS
<area>: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized PASS
<a>: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized FAIL
<a>: Setting <sc://x/>.host = '@' FAIL
URL: Setting <http://me:secret@example.net>.username = '' PASS
URL: Setting <sc://x/>.hostname = '\t' FAIL
URL: Setting <https://example.net:4433>.port = '443' Default port number is removed PASS
URL: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme PASS
URL: Setting <http://example.net/>.hostname = '[::1.2.3.]' FAIL
<area>: Setting <http://example.net:8080>.hostname = 'example.com' PASS
<a>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes FAIL
URL: Setting <a:/>.pathname = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.`
<a>: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored FAIL
URL: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error FAIL
<a>: Setting <http://example.net>.host = 'example.com:8080' PASS
<a>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized PASS
URL: Setting <http://example.net>.username = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
<a>: Setting <http://example.net/>.hostname = '[::1.2.]' FAIL
URL: Setting <https://example.net?lang=en-US#nav>.hash = '' PASS
URL: Setting <http://example.net/>.host = '[google.com]' Broken IPv6 FAIL
<a>: Setting <https://example.net?lang=en-US#nav>.hash = '#main' PASS
URL: Setting <a://example.net>.protocol = '0b' No leading digit FAIL
<a>: Setting <http://me@example.net>.password = 'secret' PASS
<a>: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized PASS
<area>: Setting <http://example.net>.pathname = '?' ? needs to be encoded PASS
<area>: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored PASS
<area>: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
URL: Setting <sc://x/>.hostname = '?' FAIL
URL: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored PASS
URL: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored PASS
<a>: Setting <http://example.net>.username = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the userinfo encode set.`
URL: Setting <sc://x/>.hostname = '' Non-special scheme FAIL
URL: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes FAIL
<a>: Setting <sc://x/>.host = '\r' FAIL
<a>: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is FAIL
<area>: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments. FAIL
URL: Setting <http://example.net/>.hostname = '[::1.2.]' FAIL
<area>: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value PASS
URL: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6 FAIL
<a>: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
<area>: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored PASS
<a>: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored PASS
URL: Setting <https://example.net#nav>.hash = 'main' PASS
<a>: Setting <http://example.net>.port = '8080' PASS
<a>: Setting <sc://x/>.host = '\n' FAIL
<a>: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password PASS
URL: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<a>: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored PASS
URL: Setting <https://example.net?lang=en-US>.hash = '##nav' PASS
<a>: Setting <http://me@example.net>.username = '' PASS
URL: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password PASS
URL: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though. FAIL
<area>: Setting <https://example.net:4433>.port = '443' Default port number is removed PASS
<area>: Setting <http://example.net/>.hostname = '[::1.2.]' FAIL
<a>: Setting <https://example.net?lang=en-US>.search = '' PASS
URL: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
URL: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr' FAIL
URL: Setting <http://example.net>.host = 'example.com:8080' PASS
URL: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes PASS
<area>: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased FAIL
<area>: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected FAIL
URL: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes FAIL
<area>: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error PASS
<area>: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified FAIL
<area>: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored PASS
URL: Setting <sc://x/>.hostname = '#' FAIL
URL: Setting <sc://x/>.host = '\r' FAIL
<area>: Setting <sc://x/>.hostname = ' ' FAIL
URL: Setting <sc://x/>.hostname = '\r' FAIL
URL: Setting <sc://x/>.host = '#' FAIL
<a>: Setting <http://me:secret@example.net>.password = '' PASS
URL: Setting <http://example.net/>.host = '[::1.2.3.]' FAIL
<a>: Setting <http://example.net>.pathname = '?' ? needs to be encoded PASS
<area>: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
<a>: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes FAIL
<a>: Setting <http://:secret@example.net>.password = '' PASS
URL: Setting <http://example.net:8080>.hostname = 'example.com' PASS
<area>: Setting <sc://x/>.hostname = '\t' FAIL
<a>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes FAIL
<a>: Setting <http://example.net>.host = 'example.com:80' Default port number is removed PASS
URL: Setting <https://example.net?lang=en-US#nav>.hash = '#main' PASS
<a>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host FAIL
<area>: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is PASS
URL: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is. PASS
<area>: Setting <http://me:secret@example.net>.username = '' PASS
<area>: Setting <http://example.net/>.hostname = '[::1.2.3.]' FAIL
URL: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored FAIL
<area>: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme PASS
<a>: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored FAIL
<area>: Setting <http://example.net/>.host = '[::1.2.3.]' FAIL
<area>: Setting <unix:/run/foo.socket>.username = 'me' No host means no username PASS
URL: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host FAIL
<a>: Setting <http://example.net/>.hostname = '[::1.2.3.]' FAIL
<area>: Setting <http://example.net/>.host = '[::1.2.3.4x]' FAIL
URL: Setting <http://example.net>.username = 'me' PASS
URL: Setting <http://example.net>.password = 'secret' PASS
URL: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers PASS
URL: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is PASS
<area>: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored FAIL
<area>: Setting <sc://x/>.host = '\n' FAIL
<a>: Setting <a:/>.pathname = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.`
URL: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must. FAIL
<area>: Setting <sc://x/>.hostname = '?' FAIL
<a>: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password PASS
URL: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host PASS
URL: Setting <ssh://me@example.net>.protocol = 'gopher' FAIL
URL: Setting <http://:secret@example.net>.username = 'me' PASS
<a>: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers PASS
URL: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
URL: Setting <http://example.net/>.host = '[::1.2.3.4x]' FAIL
<a>: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored FAIL
<area>: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers PASS
URL: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored PASS
URL: Setting <a:/>.search = '�\t\n\r� !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\az{ }~���Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`
URL: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments. FAIL
URL: Setting <unix:/run/foo.socket>.username = 'me' No host means no username PASS
/url/url-origin.html
Subtest Results
OK
Origin parsing: <about:/../> against <about:blank> PASS
Origin parsing: <test.txt> against <http://www.example.com/test> PASS
Origin parsing: <中/test.txt> against <http://www.example.com/test> PASS
Origin parsing: <foo://> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://[2001::1]:80> against <http://example.org/foo/bar> PASS
Origin parsing: < \t> against <http://example.org/foo/bar> PASS
Origin parsing: <http://www/foo/%2E/html> against <about:blank> PASS
Origin parsing: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank> PASS
Origin parsing: <./test.txt> against <http://www.example.com/test> PASS
Origin parsing: <http:foo.com> against <http://example.org/foo/bar> PASS
Origin parsing: <wss:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <wss:/example.com/> against <about:blank> PASS
Origin parsing: <https:example.com/> against <about:blank> PASS
Origin parsing: <#i> against <sc:sd> FAIL
Origin parsing: <https:/example.com/> against <about:blank> PASS
Origin parsing: <wss:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <data:example.com/> against <about:blank> PASS
Origin parsing: <../i> against <sc://ho/pa> FAIL
Origin parsing: <#\> against <http://example.org/foo/bar> PASS
Origin parsing: <http://www.@pple.com> against <about:blank> PASS
Origin parsing: <http://999999999> against <http://other.com/> PASS
Origin parsing: <http://example.com/foo/../../..> against <about:blank> PASS
Origin parsing: <http://example.com/‥/foo> against <about:blank> PASS
Origin parsing: <ftp:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <sc:\../> against <about:blank> FAIL
Origin parsing: <http://example.com//foo> against <about:blank> PASS
Origin parsing: <ftp:/example.com/> against <about:blank> PASS
Origin parsing: <http://example.com/foo%2> against <about:blank> PASS
Origin parsing: <#i> against <sc://ho/pa> FAIL
Origin parsing: <http://foo.com/\@> against <http://example.org/foo/bar> PASS
Origin parsing: <:> against <http://example.org/foo/bar> PASS
Origin parsing: <http:@www.example.com> against <about:blank> PASS
Origin parsing: <:foo.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/../../../ton> against <about:blank> PASS
Origin parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank> PASS
Origin parsing: <http://example.com/foo/.> against <about:blank> PASS
Origin parsing: <https:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://256.256.256.256.256> against <http://other.com/> PASS
Origin parsing: <?i> against <sc://ho/pa> FAIL
Origin parsing: <http://a:b@www.example.com> against <about:blank> PASS
Origin parsing: <https:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: </> against <http://example.org/foo/bar> PASS
Origin parsing: <http://你好你好> against <http://other.com/> FAIL
Origin parsing: </test.txt> against <http://www.example.com/test> PASS
Origin parsing: <http://0Xc0.0250.01> against <http://other.com/> PASS
Origin parsing: <http:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <#β> against <http://example.org/foo/bar> PASS
Origin parsing: <c:/foo> against <http://example.org/foo/bar> FAIL
Origin parsing: </a/ /c> against <http://example.org/foo/bar> PASS
Origin parsing: <http://192.0x00A80001> against <about:blank> PASS
Origin parsing: <foo:/bar.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://www.google.com/foo?bar=baz#> against <about:blank> PASS
Origin parsing: <https://foo:80/> against <about:blank> PASS
Origin parsing: <http://192.168.257> against <http://other.com/> PASS
Origin parsing: <http://example.com/foo%00%51> against <about:blank> FAIL
Origin parsing: <#/> against <http://example.org/foo/bar> PASS
Origin parsing: <ftps:example.com/> against <about:blank> FAIL
Origin parsing: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/%2e> against <about:blank> PASS
Origin parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> PASS
Origin parsing: <http://@pple.com> against <about:blank> PASS
Origin parsing: <http://192.168.257.com> against <http://other.com/> PASS
Origin parsing: <http://0xffffffff> against <http://other.com/> PASS
Origin parsing: <http://example.com////../..> against <about:blank> PASS
Origin parsing: <//www.example2.com> against <http://www.example.com/test> PASS
Origin parsing: <http://:@www.example.com> against <about:blank> PASS
Origin parsing: <#> against <http://example.org/foo/bar> PASS
Origin parsing: <http::@c:29> against <http://example.org/foo/bar> PASS
Origin parsing: <gopher:example.com/> against <about:blank> PASS
Origin parsing: <wss:example.com/> against <about:blank> PASS
Origin parsing: <#i> against <sc:sd/sd> FAIL
Origin parsing: <http://foo:80/> against <about:blank> PASS
Origin parsing: <gopher:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/bar/..> against <about:blank> PASS
Origin parsing: <mailto:/../> against <about:blank> FAIL
Origin parsing: < foo.com > against <http://example.org/foo/bar> PASS
Origin parsing: </a%2fc> against <http://example.org/foo/bar> PASS
Origin parsing: <ftp://foo:80/> against <about:blank> PASS
Origin parsing: <\t :foo.com \n> against <http://example.org/foo/bar> PASS
Origin parsing: <http://foo.com:b@d/> against <http://example.org/foo/bar> PASS
Origin parsing: <gopher://foo:70/> against <about:blank> PASS
Origin parsing: <http://example.com\\foo\\bar> against <about:blank> PASS
Origin parsing: <??a=b&c=d> against <http://example.org/foo/bar> PASS
Origin parsing: <http://a:@www.example.com> against <about:blank> PASS
Origin parsing: <http://example.com/foo\t�%91> against <about:blank> PASS
Origin parsing: <http://example.com/././foo> against <about:blank> PASS
Origin parsing: <../i> against <sc:/pa/pa> FAIL
Origin parsing: <madeupscheme:example.com/> against <about:blank> FAIL
Origin parsing: </a/%2f/c> against <http://example.org/foo/bar> PASS
Origin parsing: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar> PASS
Origin parsing: <http://foo.bar/baz?qux#foo�bar> against <about:blank> PASS
Origin parsing: <http://example.com/foo%2zbar> against <about:blank> PASS
Origin parsing: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar> PASS
Origin parsing: <mailto:/example.com/> against <about:blank> FAIL
Origin parsing: <#x> against <about:blank> PASS
Origin parsing: <.> against <http://www.example.com/test> PASS
Origin parsing: <sc:> against <https://example.org/foo/bar> FAIL
Origin parsing: <http:/:b@www.example.com> against <about:blank> PASS
Origin parsing: <data:/../> against <about:blank> PASS
Origin parsing: <http://f:21/ b ? d # e > against <http://example.org/foo/bar> PASS
Origin parsing: <..> against <http://www.example.com/test> PASS
Origin parsing: </i> against <sc:/pa/pa> FAIL
Origin parsing: <non-special://:@test/x> against <about:blank> FAIL
Origin parsing: <//foo/bar> against <http://example.org/foo/bar> PASS
Origin parsing: <../../test.txt> against <http://www.example.com/test> PASS
Origin parsing: <http:example.com/> against <about:blank> PASS
Origin parsing: <non-special://test:@test/x> against <about:blank> FAIL
Origin parsing: <ftp://foo:21/> against <about:blank> PASS
Origin parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank> PASS
Origin parsing: <http://example\t.\norg> against <http://example.org/foo/bar> PASS
Origin parsing: <https://@@@example> against <http://doesnotmatter/> PASS
Origin parsing: <:\> against <http://example.org/foo/bar> PASS
Origin parsing: <http:> against <http://example.org/foo/bar> PASS
Origin parsing: <[61:24:74]:98> against <http://example.org/foo/bar> PASS
Origin parsing: <http://f:00000000000000/c> against <http://example.org/foo/bar> FAIL
Origin parsing: <../i> against <sc:///pa/pa> FAIL
Origin parsing: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/bar//..> against <about:blank> PASS
Origin parsing: <javascript:/../> against <about:blank> PASS
Origin parsing: <https://localhost:3000/jqueryui@1.2.3> against <about:blank> PASS
Origin parsing: </a/b/c> against <http://example.org/foo/bar> PASS
Origin parsing: <i> against <sc:/pa/pa> FAIL
Origin parsing: <i> against <sc://ho/pa> FAIL
Origin parsing: <sc://ñ.test/> against <about:blank> FAIL
Origin parsing: <a:\t foo.com> against <http://example.org/foo/bar> FAIL
Origin parsing: <?a=b&c=d> against <http://example.org/foo/bar> PASS
Origin parsing: <http://@www.example.com> against <about:blank> PASS
Origin parsing: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank> PASS
Origin parsing: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar> PASS
Origin parsing: <http://www.foo。bar.com> against <http://other.com/> PASS
Origin parsing: <madeupscheme:/example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <:/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://GOO​⁠goo.com> against <http://other.com/> PASS
Origin parsing: <x> against <sc://ñ> FAIL
Origin parsing: <data:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://127.0.0.1:10100/relative_import.html> against <about:blank> PASS
Origin parsing: <#i> against <sc:/pa/pa> FAIL
Origin parsing: <http://example.com/foo> against <about:blank> PASS
Origin parsing: <#> against <test:test?test> FAIL
Origin parsing: <wss://foo:443/> against <about:blank> PASS
Origin parsing: <#x> against <data:,> PASS
Origin parsing: <foo://///////> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://999999999.com> against <http://other.com/> PASS
Origin parsing: <http://www.google.com> against <about:blank> PASS
Origin parsing: <sc::a@example.net> against <about:blank> FAIL
Origin parsing: <http://[2001::1]> against <http://example.org/foo/bar> PASS
Origin parsing: </i> against <sc://ho/pa> FAIL
Origin parsing: <ws:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <:foo.com\> against <http://example.org/foo/bar> PASS
Origin parsing: <ftps:example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://www/foo%2Ehtml> against <about:blank> PASS
Origin parsing: <https://test:@test> against <about:blank> PASS
Origin parsing: <ftp:example.com/> against <about:blank> PASS
Origin parsing: <http://256.com> against <http://other.com/> PASS
Origin parsing: <http://example.com/foo/bar//../..> against <about:blank> PASS
Origin parsing: </some/path> against <http://user@example.org/smth> PASS
Origin parsing: <ws://foo:815/> against <about:blank> PASS
Origin parsing: <http://\{}:`{}@h/`{}?`{}> against http://doesnotmatter/` PASS
Origin parsing: <http://256> against <http://other.com/> PASS
Origin parsing: <http://example.com/(%28:%3A%29)> against <about:blank> PASS
Origin parsing: <#i> against <sc:///pa/pa> FAIL
Origin parsing: <gopher://foo:443/> against <about:blank> PASS
Origin parsing: <http://example.com/foo\tbar> against <about:blank> PASS
Origin parsing: </some/path> against <http://user:pass@example.org:21/smth> PASS
Origin parsing: <http:/a:@www.example.com> against <about:blank> PASS
Origin parsing: <> against <http://user:pass@example.org:21/smth> PASS
Origin parsing: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar> PASS
Origin parsing: <ws://foo:443/> against <about:blank> PASS
Origin parsing: <#x> against <mailto:x@x.com> FAIL
Origin parsing: <gopher:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/..bar> against <about:blank> PASS
Origin parsing: <../aaa/test.txt> against <http://www.example.com/test> PASS
Origin parsing: <http://10000000000.com> against <http://other.com/> PASS
Origin parsing: <javascript:/example.com/> against <about:blank> PASS
Origin parsing: <http://example.com/foo%2©zbar> against <about:blank> PASS
Origin parsing: <http::b@www.example.com> against <about:blank> PASS
Origin parsing: <http://Go.com> against <http://other.com/> PASS
Origin parsing: <ftps:/example.com/> against <about:blank> FAIL
Origin parsing: <mailto:example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://example.com/foo%> against <about:blank> PASS
Origin parsing: <https://:@test> against <about:blank> PASS
Origin parsing: <http://ExAmPlE.CoM> against <http://other.com/> PASS
Origin parsing: <http:\\foo.com\> against <http://example.org/foo/bar> PASS
Origin parsing: <http://[::127.0.0.1]> against <http://example.org/foo/bar> PASS
Origin parsing: <javascript:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: </:23> against <http://example.org/foo/bar> PASS
Origin parsing: <data:test# »> against <about:blank> PASS
Loading data… PASS
Origin parsing: <foo:/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://a:b@c:29/d> against <http://example.org/foo/bar> PASS
Origin parsing: <ws:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <::23> against <http://example.org/foo/bar> PASS
Origin parsing: <ftps:/example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <https://@test@test@example:800/> against <http://doesnotmatter/> PASS
Origin parsing: <foo:////://///> against <http://example.org/foo/bar> FAIL
Origin parsing: <madeupscheme:example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <::> against <http://example.org/foo/bar> PASS
Origin parsing: <http:a:@www.example.com> against <about:blank> PASS
Origin parsing: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar> PASS
Origin parsing: <http:\\www.google.com\foo> against <about:blank> PASS
Origin parsing: <?> against <http://example.org/foo/bar> PASS
Origin parsing: <foo://///////bar.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/> PASS
Origin parsing: <mailto:/example.com/> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://f:/c> against <http://example.org/foo/bar> PASS
Origin parsing: <mailto:example.com/> against <about:blank> FAIL
Origin parsing: <madeupscheme:/example.com/> against <about:blank> FAIL
Origin parsing: <http://f:\n/c> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/bar/../ton> against <about:blank> PASS
Origin parsing: <ftp:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/%20foo> against <about:blank> PASS
Origin parsing: </> against <http://www.example.com/test> PASS
Origin parsing: <tel:1234567890> against <http://example.org/foo/bar> FAIL
Origin parsing: <?i> against <sc:/pa/pa> FAIL
Origin parsing: <wss://foo:80/> against <about:blank> PASS
Origin parsing: <data:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/foo/%2e%2> against <about:blank> PASS
Origin parsing: <i> against <sc:///pa/pa> FAIL
Origin parsing: <../test.txt> against <http://www.example.com/test> PASS
Origin parsing: <http://example.com/‮/foo/‭/bar> against <about:blank> PASS
Origin parsing: <wss://foo:81/> against <about:blank> PASS
Origin parsing: <http://example.com/foo/./> against <about:blank> PASS
Origin parsing: <http:/@www.example.com> against <about:blank> PASS
Origin parsing: <http://example.com/foo/bar/../ton/../../a> against <about:blank> PASS
Origin parsing: </i> against <sc:///pa/pa> FAIL
Origin parsing: <http://example.com/foo%41%7a> against <about:blank> PASS
Origin parsing: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank> PASS
Origin parsing: <http:/example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <ws:/example.com/> against <about:blank> PASS
Origin parsing: <ws://foo:81/> against <about:blank> PASS
Origin parsing: <ws:example.com/> against <about:blank> PASS
Origin parsing: <:a> against <http://example.org/foo/bar> PASS
Origin parsing: <https://foo:443/> against <about:blank> PASS
Origin parsing: <http://foo:💩@example.com/bar> against <http://other.com/> PASS
Origin parsing: <sc://�!"$&'()*+,-.;<=>^_\{ }~/> against about:blank`
Origin parsing: <gopher:/example.com/> against <about:blank> PASS
Origin parsing: <javascript:example.com/> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/@asdf%40> against <about:blank> PASS
Origin parsing: <http://::@c@d:2> against <http://example.org/foo/bar> PASS
Origin parsing: <http://example.com/你好你好> against <about:blank> PASS
Origin parsing: <> against <http://example.org/foo/bar> PASS
Origin parsing: <http://4294967295> against <http://other.com/> PASS
Origin parsing: <http://example.com/./.foo> against <about:blank> PASS
Origin parsing: <http://www.example2.com> against <http://www.example.com/test> PASS
Origin parsing: <ws://foo:80/> against <about:blank> PASS
Origin parsing: <:#> against <http://example.org/foo/bar> PASS
Origin parsing: <http:/a:b@www.example.com> against <about:blank> PASS
Origin parsing: <http://foo:81/> against <about:blank> PASS
Origin parsing: <javascript:example.com/> against <about:blank> PASS
Origin parsing: <http://example.com/%3A%3a%3C%3c> against <about:blank> PASS
Origin parsing: <httpa://foo:80/> against <about:blank> FAIL
Origin parsing: <wss://foo:815/> against <about:blank> PASS
Origin parsing: <#> against <test:test> FAIL
Origin parsing: <data:text/html,test#test> against <http://example.org/foo/bar> PASS
Origin parsing: <http:/example.com/> against <about:blank> PASS
Origin parsing: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/> PASS
Origin parsing: <http://f:0/c> against <http://example.org/foo/bar> FAIL
Origin parsing: <http://example.com/foo/bar/../> against <about:blank> PASS
Origin parsing: <:23> against <http://example.org/foo/bar> PASS
Origin parsing: <http://:b@www.example.com> against <about:blank> PASS
Origin parsing: <http://[1:0::]> against <http://example.net/> PASS
Origin parsing: <data:/example.com/> against <about:blank> PASS
Origin parsing: <?i> against <sc:///pa/pa> FAIL
Origin parsing: <http:[61:27]/:foo> against <http://example.org/foo/bar> PASS
Origin parsing: <http:a:b@www.example.com> against <about:blank> PASS
Origin parsing: <#;?> against <http://example.org/foo/bar> PASS
/url/a-element-xhtml.xhtml
Subtest Results
ERROR
/url/a-element.html
Subtest Results
ERROR
/url/a-element-origin.html
Subtest Results
OK
Parsing origin: <about:/../> against <about:blank> PASS
Parsing origin: <javascript:/example.com/> against <about:blank> PASS
Parsing origin: <中/test.txt> against <http://www.example.com/test> PASS
Parsing origin: <foo://> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://[2001::1]:80> against <http://example.org/foo/bar> PASS
Parsing origin: < \t> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www/foo/%2E/html> against <about:blank> PASS
Parsing origin: <./test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http://example.com/foo/bar//../..> against <about:blank> PASS
Parsing origin: <http:foo.com> against <http://example.org/foo/bar> PASS
Parsing origin: <wss:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <wss:/example.com/> against <about:blank> PASS
Parsing origin: <https:example.com/> against <about:blank> PASS
Parsing origin: <#i> against <sc:sd> FAIL
Parsing origin: <https:/example.com/> against <about:blank> PASS
Parsing origin: <wss:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <data:example.com/> against <about:blank> PASS
Parsing origin: <../i> against <sc://ho/pa> FAIL
Parsing origin: <#\> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www.@pple.com> against <about:blank> PASS
Parsing origin: <http://999999999> against <http://other.com/> PASS
Parsing origin: <http://example.com/foo/../../..> against <about:blank> PASS
Parsing origin: <ftp:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/你好你好> against <about:blank> PASS
Parsing origin: <http://4294967295> against <http://other.com/> PASS
Parsing origin: <http://www.example2.com> against <http://www.example.com/test> PASS
Parsing origin: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank> PASS
Parsing origin: <http://example.com//foo> against <about:blank> PASS
Parsing origin: <ftp:/example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/foo%2> against <about:blank> PASS
Parsing origin: <http://foo.com/\@> against <http://example.org/foo/bar> PASS
Parsing origin: <:> against <http://example.org/foo/bar> PASS
Parsing origin: <http:@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo:💩@example.com/bar> against <http://other.com/> PASS
Parsing origin: <test.txt> against <http://www.example.com/test> PASS
Parsing origin: <:foo.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/../../../ton> against <about:blank> PASS
Parsing origin: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank> PASS
Parsing origin: <http://example.com/foo/.> against <about:blank> PASS
Parsing origin: <https:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://a:b@www.example.com> against <about:blank> PASS
Parsing origin: <https:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: </> against <http://example.org/foo/bar> PASS
Parsing origin: <http://你好你好> against <http://other.com/> FAIL
Parsing origin: <http://www/foo%2Ehtml> against <about:blank> PASS
Parsing origin: <http://0Xc0.0250.01> against <http://other.com/> PASS
Parsing origin: <http:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <#β> against <http://example.org/foo/bar> PASS
Parsing origin: <c:/foo> against <http://example.org/foo/bar> FAIL
Parsing origin: </a/ /c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://192.0x00A80001> against <about:blank> PASS
Parsing origin: <foo:/bar.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <#/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www.google.com/foo?bar=baz#> against <about:blank> PASS
Parsing origin: <https://foo:80/> against <about:blank> PASS
Parsing origin: <http://example.com/foo%00%51> against <about:blank> FAIL
Loading data… PASS
Parsing origin: <ftps:example.com/> against <about:blank> FAIL
Parsing origin: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/%2e> against <about:blank> PASS
Parsing origin: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> PASS
Parsing origin: <ws://foo:80/> against <about:blank> PASS
Parsing origin: <http://192.168.257.com> against <http://other.com/> PASS
Parsing origin: <http://0xffffffff> against <http://other.com/> PASS
Parsing origin: <http://example.com////../..> against <about:blank> PASS
Parsing origin: <//www.example2.com> against <http://www.example.com/test> PASS
Parsing origin: <http://:@www.example.com> against <about:blank> PASS
Parsing origin: <#> against <http://example.org/foo/bar> PASS
Parsing origin: <http::@c:29> against <http://example.org/foo/bar> PASS
Parsing origin: <http://999999999.com> against <http://other.com/> PASS
Parsing origin: <gopher:example.com/> against <about:blank> PASS
Parsing origin: <wss:example.com/> against <about:blank> PASS
Parsing origin: <#i> against <sc:sd/sd> FAIL
Parsing origin: <http://foo:80/> against <about:blank> PASS
Parsing origin: <data:test# »> against <about:blank> PASS
Parsing origin: <gopher:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar/..> against <about:blank> PASS
Parsing origin: <mailto:/../> against <about:blank> FAIL
Parsing origin: < foo.com > against <http://example.org/foo/bar> PASS
Parsing origin: </a%2fc> against <http://example.org/foo/bar> PASS
Parsing origin: <ftp://foo:80/> against <about:blank> PASS
Parsing origin: <\t :foo.com \n> against <http://example.org/foo/bar> PASS
Parsing origin: <http://foo.com:b@d/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://256.256.256.256.256> against <http://other.com/> PASS
Parsing origin: <gopher://foo:70/> against <about:blank> PASS
Parsing origin: <http://example.com\\foo\\bar> against <about:blank> PASS
Parsing origin: <??a=b&c=d> against <http://example.org/foo/bar> PASS
Parsing origin: <http://a:@www.example.com> against <about:blank> PASS
Parsing origin: <ws:/example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/././foo> against <about:blank> PASS
Parsing origin: <../i> against <sc:/pa/pa> FAIL
Parsing origin: <madeupscheme:example.com/> against <about:blank> FAIL
Parsing origin: </a/%2f/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/‥/foo> against <about:blank> PASS
Parsing origin: <http://foo.bar/baz?qux#foo�bar> against <about:blank> PASS
Parsing origin: <http://example.com/foo%2zbar> against <about:blank> PASS
Parsing origin: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <mailto:/example.com/> against <about:blank> FAIL
Parsing origin: <#x> against <about:blank> PASS
Parsing origin: <http:/:b@www.example.com> against <about:blank> PASS
Parsing origin: <http://192.168.257> against <http://other.com/> PASS
Parsing origin: <http://f:21/ b ? d # e > against <http://example.org/foo/bar> PASS
Parsing origin: <..> against <http://www.example.com/test> PASS
Parsing origin: </i> against <sc:/pa/pa> FAIL
Parsing origin: <non-special://:@test/x> against <about:blank> FAIL
Parsing origin: <//foo/bar> against <http://example.org/foo/bar> PASS
Parsing origin: <../../test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http:example.com/> against <about:blank> PASS
Parsing origin: <non-special://test:@test/x> against <about:blank> FAIL
Parsing origin: <sc://ñ.test/> against <about:blank> FAIL
Parsing origin: <ftp://foo:21/> against <about:blank> PASS
Parsing origin: <http://www.google.com/foo?bar=baz# »> against <about:blank> PASS
Parsing origin: <http://example\t.\norg> against <http://example.org/foo/bar> PASS
Parsing origin: <https://@@@example> against <http://doesnotmatter/> PASS
Parsing origin: <:\> against <http://example.org/foo/bar> PASS
Parsing origin: <https://@test@test@example:800/> against <http://doesnotmatter/> PASS
Parsing origin: <?i> against <sc://ho/pa> FAIL
Parsing origin: <[61:24:74]:98> against <http://example.org/foo/bar> PASS
Parsing origin: <http://f:00000000000000/c> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://10000000000.com> against <http://other.com/> PASS
Parsing origin: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar//..> against <about:blank> PASS
Parsing origin: <javascript:/../> against <about:blank> PASS
Parsing origin: <https://localhost:3000/jqueryui@1.2.3> against <about:blank> PASS
Parsing origin: <i> against <sc://ho/pa> FAIL
Parsing origin: </a/b/c> against <http://example.org/foo/bar> PASS
Parsing origin: <i> against <sc:/pa/pa> FAIL
Parsing origin: <a:\t foo.com> against <http://example.org/foo/bar> FAIL
Parsing origin: <?a=b&c=d> against <http://example.org/foo/bar> PASS
Parsing origin: <http://@www.example.com> against <about:blank> PASS
Parsing origin: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank> PASS
Parsing origin: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[1:0::]> against <http://example.net/> PASS
Parsing origin: <http://www.foo。bar.com> against <http://other.com/> PASS
Parsing origin: <madeupscheme:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <:/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://GOO​⁠goo.com> against <http://other.com/> PASS
Parsing origin: <x> against <sc://ñ> PASS
Parsing origin: <http://example.com/foo\t�%91> against <about:blank> PASS
Parsing origin: <data:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://127.0.0.1:10100/relative_import.html> against <about:blank> PASS
Parsing origin: <#i> against <sc:/pa/pa> FAIL
Parsing origin: <http://example.com/foo> against <about:blank> PASS
Parsing origin: <wss://foo:443/> against <about:blank> PASS
Parsing origin: <wss://foo:81/> against <about:blank> PASS
Parsing origin: <#x> against <data:,> PASS
Parsing origin: <foo://///////> against <http://example.org/foo/bar> FAIL
Parsing origin: <sc:\../> against <about:blank> FAIL
Parsing origin: <http://www.google.com> against <about:blank> PASS
Parsing origin: <sc::a@example.net> against <about:blank> FAIL
Parsing origin: <http://[2001::1]> against <http://example.org/foo/bar> PASS
Parsing origin: <sc:> against <https://example.org/foo/bar> FAIL
Parsing origin: <ws:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <:foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <ftps:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <https://test:@test> against <about:blank> PASS
Parsing origin: <ftp:example.com/> against <about:blank> PASS
Parsing origin: <data:/../> against <about:blank> PASS
Parsing origin: <http://example.com/(%28:%3A%29)> against <about:blank> PASS
Parsing origin: </some/path> against <http://user@example.org/smth> PASS
Parsing origin: <ws://foo:815/> against <about:blank> PASS
Parsing origin: <http://\{}:`{}@h/`{}?`{}> against http://doesnotmatter/` PASS
Parsing origin: <http://256> against <http://other.com/> PASS
Parsing origin: <#i> against <sc:///pa/pa> FAIL
Parsing origin: <gopher://foo:443/> against <about:blank> PASS
Parsing origin: <http://example.com/foo\tbar> against <about:blank> PASS
Parsing origin: </some/path> against <http://user:pass@example.org:21/smth> PASS
Parsing origin: <http:/a:@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar> PASS
Parsing origin: <ws://foo:443/> against <about:blank> PASS
Parsing origin: <#x> against <mailto:x@x.com> FAIL
Parsing origin: <gopher:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/..bar> against <about:blank> PASS
Parsing origin: <../aaa/test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http://example.com/foo%2©zbar> against <about:blank> PASS
Parsing origin: <http:> against <http://example.org/foo/bar> PASS
Parsing origin: <http::b@www.example.com> against <about:blank> PASS
Parsing origin: <http://Go.com> against <http://other.com/> PASS
Parsing origin: <ftps:/example.com/> against <about:blank> FAIL
Parsing origin: <mailto:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://example.com/foo%> against <about:blank> PASS
Parsing origin: <https://:@test> against <about:blank> PASS
Parsing origin: <http://ExAmPlE.CoM> against <http://other.com/> PASS
Parsing origin: </i> against <sc://ho/pa> FAIL
Parsing origin: <http:\\foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[::127.0.0.1]> against <http://example.org/foo/bar> PASS
Parsing origin: <javascript:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: </:23> against <http://example.org/foo/bar> PASS
Parsing origin: <foo:/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://@pple.com> against <about:blank> PASS
Parsing origin: <http://a:b@c:29/d> against <http://example.org/foo/bar> PASS
Parsing origin: </test.txt> against <http://www.example.com/test> PASS
Parsing origin: <ws:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <::23> against <http://example.org/foo/bar> PASS
Parsing origin: <.> against <http://www.example.com/test> PASS
Parsing origin: <ftps:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://256.com> against <http://other.com/> PASS
Parsing origin: <foo:////://///> against <http://example.org/foo/bar> FAIL
Parsing origin: <madeupscheme:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <::> against <http://example.org/foo/bar> PASS
Parsing origin: <http:a:@www.example.com> against <about:blank> PASS
Parsing origin: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http:\\www.google.com\foo> against <about:blank> PASS
Parsing origin: <?> against <http://example.org/foo/bar> PASS
Parsing origin: <foo://///////bar.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <mailto:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://f:/c> against <http://example.org/foo/bar> PASS
Parsing origin: <mailto:example.com/> against <about:blank> FAIL
Parsing origin: <> against <http://user:pass@example.org:21/smth> PASS
Parsing origin: <http://f:\n/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar/../ton> against <about:blank> PASS
Parsing origin: <ftp:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <#i> against <sc://ho/pa> FAIL
Parsing origin: <http://example.com/%20foo> against <about:blank> PASS
Parsing origin: </> against <http://www.example.com/test> PASS
Parsing origin: <tel:1234567890> against <http://example.org/foo/bar> FAIL
Parsing origin: <?i> against <sc:/pa/pa> FAIL
Parsing origin: <sc://�!"$&'()*+,-.;<=>^_\{ }~/> against about:blank`
Parsing origin: <wss://foo:80/> against <about:blank> PASS
Parsing origin: <data:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/%2e%2> against <about:blank> PASS
Parsing origin: <i> against <sc:///pa/pa> FAIL
Parsing origin: <../test.txt> against <http://www.example.com/test> PASS
Parsing origin: <madeupscheme:/example.com/> against <about:blank> FAIL
Parsing origin: <http://example.com/‮/foo/‭/bar> against <about:blank> PASS
Parsing origin: <http://example.com/foo/./> against <about:blank> PASS
Parsing origin: <#> against <test:test?test> FAIL
Parsing origin: <http:/@www.example.com> against <about:blank> PASS
Parsing origin: <http://example.com/foo/bar/../ton/../../a> against <about:blank> PASS
Parsing origin: <http://example.com/foo%41%7a> against <about:blank> PASS
Parsing origin: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank> PASS
Parsing origin: <http:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <ws://foo:81/> against <about:blank> PASS
Parsing origin: <ws:example.com/> against <about:blank> PASS
Parsing origin: <:a> against <http://example.org/foo/bar> PASS
Parsing origin: <https://foo:443/> against <about:blank> PASS
Parsing origin: <gopher:/example.com/> against <about:blank> PASS
Parsing origin: <javascript:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/@asdf%40> against <about:blank> PASS
Parsing origin: <http://::@c@d:2> against <http://example.org/foo/bar> PASS
Parsing origin: <> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/./.foo> against <about:blank> PASS
Parsing origin: <../i> against <sc:///pa/pa> FAIL
Parsing origin: <:#> against <http://example.org/foo/bar> PASS
Parsing origin: </i> against <sc:///pa/pa> FAIL
Parsing origin: <http:/a:b@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo:81/> against <about:blank> PASS
Parsing origin: <javascript:example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/%3A%3a%3C%3c> against <about:blank> PASS
Parsing origin: <httpa://foo:80/> against <about:blank> FAIL
Parsing origin: <wss://foo:815/> against <about:blank> PASS
Parsing origin: <#> against <test:test> FAIL
Parsing origin: <data:text/html,test#test> against <http://example.org/foo/bar> PASS
Parsing origin: <http:/example.com/> against <about:blank> PASS
Parsing origin: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/> PASS
Parsing origin: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/> PASS
Parsing origin: <http://f:0/c> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://example.com/foo/bar/../> against <about:blank> PASS
Parsing origin: <:23> against <http://example.org/foo/bar> PASS
Parsing origin: <http://:b@www.example.com> against <about:blank> PASS
Parsing origin: <data:/example.com/> against <about:blank> PASS
Parsing origin: <?i> against <sc:///pa/pa> FAIL
Parsing origin: <http:[61:27]/:foo> against <http://example.org/foo/bar> PASS
Parsing origin: <http:a:b@www.example.com> against <about:blank> PASS
Parsing origin: <#;?> against <http://example.org/foo/bar> PASS
/url/a-element-origin-xhtml.xhtml
Subtest Results
OK
Parsing origin: <about:/../> against <about:blank> PASS
Parsing origin: <javascript:/example.com/> against <about:blank> PASS
Parsing origin: <中/test.txt> against <http://www.example.com/test> PASS
Parsing origin: <foo://> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://[2001::1]:80> against <http://example.org/foo/bar> PASS
Parsing origin: < \t> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www/foo/%2E/html> against <about:blank> PASS
Parsing origin: <./test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http://example.com/foo/bar//../..> against <about:blank> PASS
Parsing origin: <http:foo.com> against <http://example.org/foo/bar> PASS
Parsing origin: <wss:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <wss:/example.com/> against <about:blank> PASS
Parsing origin: <https:example.com/> against <about:blank> PASS
Parsing origin: <#i> against <sc:sd> FAIL
Parsing origin: <https:/example.com/> against <about:blank> PASS
Parsing origin: <wss:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <data:example.com/> against <about:blank> PASS
Parsing origin: <../i> against <sc://ho/pa> FAIL
Parsing origin: <#\> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www.@pple.com> against <about:blank> PASS
Parsing origin: <http://999999999> against <http://other.com/> PASS
Parsing origin: <http://example.com/foo/../../..> against <about:blank> PASS
Parsing origin: <ftp:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/你好你好> against <about:blank> PASS
Parsing origin: <http://4294967295> against <http://other.com/> PASS
Parsing origin: <http://www.example2.com> against <http://www.example.com/test> PASS
Parsing origin: <http://facebook.com/?foo=%7B%22abc%22> against <about:blank> PASS
Parsing origin: <http://example.com//foo> against <about:blank> PASS
Parsing origin: <ftp:/example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/foo%2> against <about:blank> PASS
Parsing origin: <http://foo.com/\@> against <http://example.org/foo/bar> PASS
Parsing origin: <:> against <http://example.org/foo/bar> PASS
Parsing origin: <http:@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo:💩@example.com/bar> against <http://other.com/> PASS
Parsing origin: <test.txt> against <http://www.example.com/test> PASS
Parsing origin: <:foo.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/../../../ton> against <about:blank> PASS
Parsing origin: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank> PASS
Parsing origin: <http://example.com/foo/.> against <about:blank> PASS
Parsing origin: <https:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://a:b@www.example.com> against <about:blank> PASS
Parsing origin: <https:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: </> against <http://example.org/foo/bar> PASS
Parsing origin: <http://你好你好> against <http://other.com/> FAIL
Parsing origin: <http://www/foo%2Ehtml> against <about:blank> PASS
Parsing origin: <http://0Xc0.0250.01> against <http://other.com/> PASS
Parsing origin: <http:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <#β> against <http://example.org/foo/bar> PASS
Parsing origin: <c:/foo> against <http://example.org/foo/bar> FAIL
Parsing origin: </a/ /c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://192.0x00A80001> against <about:blank> PASS
Parsing origin: <foo:/bar.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <#/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://www.google.com/foo?bar=baz#> against <about:blank> PASS
Parsing origin: <https://foo:80/> against <about:blank> PASS
Parsing origin: <http://example.com/foo%00%51> against <about:blank> FAIL
Loading data… PASS
Parsing origin: <ftps:example.com/> against <about:blank> FAIL
Parsing origin: <http://foo/abcd?efgh?ijkl> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/%2e> against <about:blank> PASS
Parsing origin: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> PASS
Parsing origin: <ws://foo:80/> against <about:blank> PASS
Parsing origin: <http://192.168.257.com> against <http://other.com/> PASS
Parsing origin: <http://0xffffffff> against <http://other.com/> PASS
Parsing origin: <http://example.com////../..> against <about:blank> PASS
Parsing origin: <//www.example2.com> against <http://www.example.com/test> PASS
Parsing origin: <http://:@www.example.com> against <about:blank> PASS
Parsing origin: <#> against <http://example.org/foo/bar> PASS
Parsing origin: <http::@c:29> against <http://example.org/foo/bar> PASS
Parsing origin: <http://999999999.com> against <http://other.com/> PASS
Parsing origin: <gopher:example.com/> against <about:blank> PASS
Parsing origin: <wss:example.com/> against <about:blank> PASS
Parsing origin: <#i> against <sc:sd/sd> FAIL
Parsing origin: <http://foo:80/> against <about:blank> PASS
Parsing origin: <data:test# »> against <about:blank> PASS
Parsing origin: <gopher:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar/..> against <about:blank> PASS
Parsing origin: <mailto:/../> against <about:blank> FAIL
Parsing origin: < foo.com > against <http://example.org/foo/bar> PASS
Parsing origin: </a%2fc> against <http://example.org/foo/bar> PASS
Parsing origin: <ftp://foo:80/> against <about:blank> PASS
Parsing origin: <\t :foo.com \n> against <http://example.org/foo/bar> PASS
Parsing origin: <http://foo.com:b@d/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://256.256.256.256.256> against <http://other.com/> PASS
Parsing origin: <gopher://foo:70/> against <about:blank> PASS
Parsing origin: <http://example.com\\foo\\bar> against <about:blank> PASS
Parsing origin: <??a=b&c=d> against <http://example.org/foo/bar> PASS
Parsing origin: <http://a:@www.example.com> against <about:blank> PASS
Parsing origin: <ws:/example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/././foo> against <about:blank> PASS
Parsing origin: <../i> against <sc:/pa/pa> FAIL
Parsing origin: <madeupscheme:example.com/> against <about:blank> FAIL
Parsing origin: </a/%2f/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[0:0:0:0:0:0:13.1.68.3]> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/‥/foo> against <about:blank> PASS
Parsing origin: <http://foo.bar/baz?qux#foo�bar> against <about:blank> PASS
Parsing origin: <http://example.com/foo%2zbar> against <about:blank> PASS
Parsing origin: <http:\\a\b:c\d@foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <mailto:/example.com/> against <about:blank> FAIL
Parsing origin: <#x> against <about:blank> PASS
Parsing origin: <http:/:b@www.example.com> against <about:blank> PASS
Parsing origin: <http://192.168.257> against <http://other.com/> PASS
Parsing origin: <http://f:21/ b ? d # e > against <http://example.org/foo/bar> PASS
Parsing origin: <..> against <http://www.example.com/test> PASS
Parsing origin: </i> against <sc:/pa/pa> FAIL
Parsing origin: <non-special://:@test/x> against <about:blank> FAIL
Parsing origin: <//foo/bar> against <http://example.org/foo/bar> PASS
Parsing origin: <../../test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http:example.com/> against <about:blank> PASS
Parsing origin: <non-special://test:@test/x> against <about:blank> FAIL
Parsing origin: <sc://ñ.test/> against <about:blank> FAIL
Parsing origin: <ftp://foo:21/> against <about:blank> PASS
Parsing origin: <http://www.google.com/foo?bar=baz# »> against <about:blank> PASS
Parsing origin: <http://example\t.\norg> against <http://example.org/foo/bar> PASS
Parsing origin: <https://@@@example> against <http://doesnotmatter/> PASS
Parsing origin: <:\> against <http://example.org/foo/bar> PASS
Parsing origin: <https://@test@test@example:800/> against <http://doesnotmatter/> PASS
Parsing origin: <?i> against <sc://ho/pa> FAIL
Parsing origin: <[61:24:74]:98> against <http://example.org/foo/bar> PASS
Parsing origin: <http://f:00000000000000/c> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://10000000000.com> against <http://other.com/> PASS
Parsing origin: <http://foo/path;a??e#f#g> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar//..> against <about:blank> PASS
Parsing origin: <javascript:/../> against <about:blank> PASS
Parsing origin: <https://localhost:3000/jqueryui@1.2.3> against <about:blank> PASS
Parsing origin: <i> against <sc://ho/pa> FAIL
Parsing origin: </a/b/c> against <http://example.org/foo/bar> PASS
Parsing origin: <i> against <sc:/pa/pa> FAIL
Parsing origin: <a:\t foo.com> against <http://example.org/foo/bar> FAIL
Parsing origin: <?a=b&c=d> against <http://example.org/foo/bar> PASS
Parsing origin: <http://@www.example.com> against <about:blank> PASS
Parsing origin: <http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd> against <about:blank> PASS
Parsing origin: <http://user:pass@foo:21/bar;par?b#c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[1:0::]> against <http://example.net/> PASS
Parsing origin: <http://www.foo。bar.com> against <http://other.com/> PASS
Parsing origin: <madeupscheme:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <:/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://GOO​⁠goo.com> against <http://other.com/> PASS
Parsing origin: <x> against <sc://ñ> PASS
Parsing origin: <http://example.com/foo\t�%91> against <about:blank> PASS
Parsing origin: <data:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://127.0.0.1:10100/relative_import.html> against <about:blank> PASS
Parsing origin: <#i> against <sc:/pa/pa> FAIL
Parsing origin: <http://example.com/foo> against <about:blank> PASS
Parsing origin: <wss://foo:443/> against <about:blank> PASS
Parsing origin: <wss://foo:81/> against <about:blank> PASS
Parsing origin: <#x> against <data:,> PASS
Parsing origin: <foo://///////> against <http://example.org/foo/bar> FAIL
Parsing origin: <sc:\../> against <about:blank> FAIL
Parsing origin: <http://www.google.com> against <about:blank> PASS
Parsing origin: <sc::a@example.net> against <about:blank> FAIL
Parsing origin: <http://[2001::1]> against <http://example.org/foo/bar> PASS
Parsing origin: <sc:> against <https://example.org/foo/bar> FAIL
Parsing origin: <ws:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <:foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <ftps:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <https://test:@test> against <about:blank> PASS
Parsing origin: <ftp:example.com/> against <about:blank> PASS
Parsing origin: <data:/../> against <about:blank> PASS
Parsing origin: <http://example.com/(%28:%3A%29)> against <about:blank> PASS
Parsing origin: </some/path> against <http://user@example.org/smth> PASS
Parsing origin: <ws://foo:815/> against <about:blank> PASS
Parsing origin: <http://\{}:`{}@h/`{}?`{}> against http://doesnotmatter/` PASS
Parsing origin: <http://256> against <http://other.com/> PASS
Parsing origin: <#i> against <sc:///pa/pa> FAIL
Parsing origin: <gopher://foo:443/> against <about:blank> PASS
Parsing origin: <http://example.com/foo\tbar> against <about:blank> PASS
Parsing origin: </some/path> against <http://user:pass@example.org:21/smth> PASS
Parsing origin: <http:/a:@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo/abcd#foo?bar> against <http://example.org/foo/bar> PASS
Parsing origin: <ws://foo:443/> against <about:blank> PASS
Parsing origin: <#x> against <mailto:x@x.com> FAIL
Parsing origin: <gopher:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/..bar> against <about:blank> PASS
Parsing origin: <../aaa/test.txt> against <http://www.example.com/test> PASS
Parsing origin: <http://example.com/foo%2©zbar> against <about:blank> PASS
Parsing origin: <http:> against <http://example.org/foo/bar> PASS
Parsing origin: <http::b@www.example.com> against <about:blank> PASS
Parsing origin: <http://Go.com> against <http://other.com/> PASS
Parsing origin: <ftps:/example.com/> against <about:blank> FAIL
Parsing origin: <mailto:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://example.com/foo%> against <about:blank> PASS
Parsing origin: <https://:@test> against <about:blank> PASS
Parsing origin: <http://ExAmPlE.CoM> against <http://other.com/> PASS
Parsing origin: </i> against <sc://ho/pa> FAIL
Parsing origin: <http:\\foo.com\> against <http://example.org/foo/bar> PASS
Parsing origin: <http://[::127.0.0.1]> against <http://example.org/foo/bar> PASS
Parsing origin: <javascript:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: </:23> against <http://example.org/foo/bar> PASS
Parsing origin: <foo:/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://@pple.com> against <about:blank> PASS
Parsing origin: <http://a:b@c:29/d> against <http://example.org/foo/bar> PASS
Parsing origin: </test.txt> against <http://www.example.com/test> PASS
Parsing origin: <ws:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <::23> against <http://example.org/foo/bar> PASS
Parsing origin: <.> against <http://www.example.com/test> PASS
Parsing origin: <ftps:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://256.com> against <http://other.com/> PASS
Parsing origin: <foo:////://///> against <http://example.org/foo/bar> FAIL
Parsing origin: <madeupscheme:example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <::> against <http://example.org/foo/bar> PASS
Parsing origin: <http:a:@www.example.com> against <about:blank> PASS
Parsing origin: <http://f:00000000000000000000080/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http:\\www.google.com\foo> against <about:blank> PASS
Parsing origin: <?> against <http://example.org/foo/bar> PASS
Parsing origin: <foo://///////bar.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <mailto:/example.com/> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://f:/c> against <http://example.org/foo/bar> PASS
Parsing origin: <mailto:example.com/> against <about:blank> FAIL
Parsing origin: <> against <http://user:pass@example.org:21/smth> PASS
Parsing origin: <http://f:\n/c> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/bar/../ton> against <about:blank> PASS
Parsing origin: <ftp:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <#i> against <sc://ho/pa> FAIL
Parsing origin: <http://example.com/%20foo> against <about:blank> PASS
Parsing origin: </> against <http://www.example.com/test> PASS
Parsing origin: <tel:1234567890> against <http://example.org/foo/bar> FAIL
Parsing origin: <?i> against <sc:/pa/pa> FAIL
Parsing origin: <sc://�!"$&'()*+,-.;<=>^_\{ }~/> against about:blank`
Parsing origin: <wss://foo:80/> against <about:blank> PASS
Parsing origin: <data:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/foo/%2e%2> against <about:blank> PASS
Parsing origin: <i> against <sc:///pa/pa> FAIL
Parsing origin: <../test.txt> against <http://www.example.com/test> PASS
Parsing origin: <madeupscheme:/example.com/> against <about:blank> FAIL
Parsing origin: <http://example.com/‮/foo/‭/bar> against <about:blank> PASS
Parsing origin: <http://example.com/foo/./> against <about:blank> PASS
Parsing origin: <#> against <test:test?test> FAIL
Parsing origin: <http:/@www.example.com> against <about:blank> PASS
Parsing origin: <http://example.com/foo/bar/../ton/../../a> against <about:blank> PASS
Parsing origin: <http://example.com/foo%41%7a> against <about:blank> PASS
Parsing origin: <http://&a:foo(b]c@d:2/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank> PASS
Parsing origin: <http:/example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <ws://foo:81/> against <about:blank> PASS
Parsing origin: <ws:example.com/> against <about:blank> PASS
Parsing origin: <:a> against <http://example.org/foo/bar> PASS
Parsing origin: <https://foo:443/> against <about:blank> PASS
Parsing origin: <gopher:/example.com/> against <about:blank> PASS
Parsing origin: <javascript:example.com/> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/@asdf%40> against <about:blank> PASS
Parsing origin: <http://::@c@d:2> against <http://example.org/foo/bar> PASS
Parsing origin: <> against <http://example.org/foo/bar> PASS
Parsing origin: <http://example.com/./.foo> against <about:blank> PASS
Parsing origin: <../i> against <sc:///pa/pa> FAIL
Parsing origin: <:#> against <http://example.org/foo/bar> PASS
Parsing origin: </i> against <sc:///pa/pa> FAIL
Parsing origin: <http:/a:b@www.example.com> against <about:blank> PASS
Parsing origin: <http://foo:81/> against <about:blank> PASS
Parsing origin: <javascript:example.com/> against <about:blank> PASS
Parsing origin: <http://example.com/%3A%3a%3C%3c> against <about:blank> PASS
Parsing origin: <httpa://foo:80/> against <about:blank> FAIL
Parsing origin: <wss://foo:815/> against <about:blank> PASS
Parsing origin: <#> against <test:test> FAIL
Parsing origin: <data:text/html,test#test> against <http://example.org/foo/bar> PASS
Parsing origin: <http:/example.com/> against <about:blank> PASS
Parsing origin: <http://%30%78%63%30%2e%30%32%35%30.01> against <http://other.com/> PASS
Parsing origin: <http://%30%78%63%30%2e%30%32%35%30.01%2e> against <http://other.com/> PASS
Parsing origin: <http://f:0/c> against <http://example.org/foo/bar> FAIL
Parsing origin: <http://example.com/foo/bar/../> against <about:blank> PASS
Parsing origin: <:23> against <http://example.org/foo/bar> PASS
Parsing origin: <http://:b@www.example.com> against <about:blank> PASS
Parsing origin: <data:/example.com/> against <about:blank> PASS
Parsing origin: <?i> against <sc:///pa/pa> FAIL
Parsing origin: <http:[61:27]/:foo> against <http://example.org/foo/bar> PASS
Parsing origin: <http:a:b@www.example.com> against <about:blank> PASS
Parsing origin: <#;?> against <http://example.org/foo/bar> PASS

@annevk annevk merged commit 69c16f6 into master Jan 24, 2017
annevk added a commit to whatwg/url that referenced this pull request Jan 24, 2017
For URLs without a special scheme we cannot use the host parser directly due to compatibility issues. Instead we percent-encode the input.

Also make sure that if "userinfo" or port is present, host is non-empty. 

Tests: web-platform-tests/wpt#4406.

Fixes #148 and fixes #214.
@annevk annevk deleted the annevk/url-non-special-scheme-host branch January 24, 2017 20:13
annevk added a commit that referenced this pull request Jan 24, 2017
These used to be part of
#4406.
annevk added a commit that referenced this pull request Jan 27, 2017
These used to be part of
#4406.
annevk added a commit that referenced this pull request Jan 31, 2017
Some of these used to be part of #4406.

See also whatwg/url#212.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants