From 7c76b0a9163c829d90a5b9004a4123b5eacea9b4 Mon Sep 17 00:00:00 2001 From: Kenta Moriuchi Date: Wed, 17 Apr 2024 00:11:57 +0900 Subject: [PATCH] feat(ext/url): add `URL.parse` (#23318) Closes #23069 --- ext/url/00_url.js | 44 +- ext/url/lib.deno_url.d.ts | 1 + tests/wpt/runner/expectation.json | 1820 ++++++++++++++++++++++++++++- 3 files changed, 1857 insertions(+), 8 deletions(-) diff --git a/ext/url/00_url.js b/ext/url/00_url.js index 3b081218bb6fb5..577caba902f18f 100644 --- a/ext/url/00_url.js +++ b/ext/url/00_url.js @@ -351,17 +351,29 @@ function trim(s) { // Represents a "no port" value. A port in URL cannot be greater than 2^16 - 1 const NO_PORT = 65536; +const skipInit = Symbol(); const componentsBuf = new Uint32Array(8); + class URL { + /** @type {URLSearchParams|null} */ #queryObject = null; + /** @type {string} */ #serialization; + /** @type {number} */ #schemeEnd; + /** @type {number} */ #usernameEnd; + /** @type {number} */ #hostStart; + /** @type {number} */ #hostEnd; + /** @type {number} */ #port; + /** @type {number} */ #pathStart; + /** @type {number} */ #queryStart; + /** @type {number} */ #fragmentStart; [_updateUrlSearch](value) { @@ -378,18 +390,46 @@ class URL { * @param {string} [base] */ constructor(url, base = undefined) { + // skip initialization for URL.parse + if (url === skipInit) { + return; + } const prefix = "Failed to construct 'URL'"; webidl.requiredArguments(arguments.length, 1, prefix); url = webidl.converters.DOMString(url, prefix, "Argument 1"); if (base !== undefined) { base = webidl.converters.DOMString(base, prefix, "Argument 2"); } - this[webidl.brand] = webidl.brand; const status = opUrlParse(url, base); + this[webidl.brand] = webidl.brand; this.#serialization = getSerialization(status, url, base); this.#updateComponents(); } + /** + * @param {string} url + * @param {string} [base] + */ + static parse(url, base = undefined) { + const prefix = "Failed to execute 'URL.parse'"; + webidl.requiredArguments(arguments.length, 1, prefix); + url = webidl.converters.DOMString(url, prefix, "Argument 1"); + if (base !== undefined) { + base = webidl.converters.DOMString(base, prefix, "Argument 2"); + } + const status = opUrlParse(url, base); + if (status !== 0 && status !== 1) { + return null; + } + // If initialized with webidl.createBranded, private properties are not be accessible, + // so it is passed through the constructor + const self = new this(skipInit); + self[webidl.brand] = webidl.brand; + self.#serialization = getSerialization(status, url, base); + self.#updateComponents(); + return self; + } + /** * @param {string} url * @param {string} [base] @@ -799,7 +839,7 @@ class URL { } } - /** @return {string} */ + /** @return {URLSearchParams} */ get searchParams() { if (this.#queryObject == null) { this.#queryObject = new URLSearchParams(this.search); diff --git a/ext/url/lib.deno_url.d.ts b/ext/url/lib.deno_url.d.ts index a184ee4a204245..0ade8c85afeb62 100644 --- a/ext/url/lib.deno_url.d.ts +++ b/ext/url/lib.deno_url.d.ts @@ -195,6 +195,7 @@ declare interface URL { declare var URL: { readonly prototype: URL; new (url: string | URL, base?: string | URL): URL; + parse(url: string | URL, base?: string | URL): URL | null; canParse(url: string | URL, base?: string | URL): boolean; createObjectURL(blob: Blob): string; revokeObjectURL(url: string): void; diff --git a/tests/wpt/runner/expectation.json b/tests/wpt/runner/expectation.json index ec917c497ca09a..3f73bef89bd3b1 100644 --- a/tests/wpt/runner/expectation.json +++ b/tests/wpt/runner/expectation.json @@ -3967,8 +3967,7 @@ "Parsing: against ", "Parsing: against ", "Parsing: against ", - "Parsing: against ", - "Parsing: against " + "Parsing: against " ], "url-constructor.any.html?include=file": [ "Parsing: against ", @@ -4030,8 +4029,7 @@ "Parsing: against ", "Parsing: against ", "Parsing: against ", - "Parsing: against ", - "Parsing: against " + "Parsing: against " ], "url-constructor.any.worker.html?include=file": [ "Parsing: against ", @@ -4636,7 +4634,1805 @@ "url-setters.any.worker.html?include=mailto": true, "url-statics-canparse.any.html": true, "url-statics-canparse.any.worker.html": true, - "urlsearchparams-size.any.worker.html": true + "urlsearchparams-size.any.worker.html": true, + "a-element-origin.html": [ + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <\t :foo.com \n> against ", + "Parsing origin: < foo.com > against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <> against ", + "Parsing origin: < \t> against ", + "Parsing origin: <:foo.com/> against ", + "Parsing origin: <:foo.com\\> against ", + "Parsing origin: <:> against ", + "Parsing origin: <:a> against ", + "Parsing origin: <:/> against ", + "Parsing origin: <:\\> against ", + "Parsing origin: <:#> against ", + "Parsing origin: <#> against ", + "Parsing origin: <#/> against ", + "Parsing origin: <#\\> against ", + "Parsing origin: <#;?> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <:23> against ", + "Parsing origin: against ", + "Parsing origin: <\\x> against ", + "Parsing origin: <\\\\x\\hello> against ", + "Parsing origin: <::> against ", + "Parsing origin: <::23> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <[61:24:74]:98> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <#β> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <.> against ", + "Parsing origin: <..> against ", + "Parsing origin: against ", + "Parsing origin: <./test.txt> against ", + "Parsing origin: <../test.txt> against ", + "Parsing origin: <../aaa/test.txt> against ", + "Parsing origin: <../../test.txt> against ", + "Parsing origin: <中/test.txt> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <#> against ", + "Parsing origin: <#x> against ", + "Parsing origin: <#x> against ", + "Parsing origin: <#x:y> against ", + "Parsing origin: <#> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <../i> against ", + "Parsing origin: <../i> against ", + "Parsing origin: <../i> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <#i> against ", + "Parsing origin: <#i> against ", + "Parsing origin: <#i> against ", + "Parsing origin: <#i> against ", + "Parsing origin: <#i> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: bar> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: <#x> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: @[\\]^_`{|}~@host/> against ", + "Parsing origin: @[]^_`{|}~@host/> against ", + "Parsing origin: @[\\]^_`{|}~@host/> against ", + "Parsing origin: @[]^_`{|}~@host/> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: @[\\]^_`{|}~> against ", + "Parsing origin: @[\\]^_`{|}~> against ", + "Parsing origin: ?@[\\]^_`{|}~> against ", + "Parsing origin: ?@[\\]^_`{|}~> against ", + "Parsing origin: ?@[\\]^_`{|}~> against ", + "Parsing origin: ?@[\\]^_`{|}~> against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against ", + "Parsing origin: against " + ], + "a-element.html?exclude=(file|javascript|mailto)": [ + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\t :foo.com \n> against ", + "Parsing: < foo.com > against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: < \t> against ", + "Parsing: <:foo.com/> against ", + "Parsing: <:foo.com\\> against ", + "Parsing: <:> against ", + "Parsing: <:a> against ", + "Parsing: <:/> against ", + "Parsing: <:\\> against ", + "Parsing: <:#> against ", + "Parsing: <#> against ", + "Parsing: <#/> against ", + "Parsing: <#\\> against ", + "Parsing: <#;?> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <:23> against ", + "Parsing: against ", + "Parsing: <\\x> against ", + "Parsing: <\\\\x\\hello> against ", + "Parsing: <::> against ", + "Parsing: <::23> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <[61:24:74]:98> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#β> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <.> against ", + "Parsing: <..> against ", + "Parsing: against ", + "Parsing: <./test.txt> against ", + "Parsing: <../test.txt> against ", + "Parsing: <../aaa/test.txt> against ", + "Parsing: <../../test.txt> against ", + "Parsing: <中/test.txt> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#> against ", + "Parsing: <#x> against ", + "Parsing: <#x:y> against ", + "Parsing: <#> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <../i> against ", + "Parsing: <../i> against ", + "Parsing: <../i> against ", + "Parsing: <../i> against ", + "Parsing: <../i> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#i> against ", + "Parsing: <#i> against ", + "Parsing: <#i> against ", + "Parsing: <#i> against ", + "Parsing: <#i> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: b> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: b> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: bar> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\\\\\\.\\Y:> against ", + "Parsing: <\\\\\\.\\y:> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#x> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <..//path> against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: <../path> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: > against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#link> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: @[\\]^_`{|}~@host/> against ", + "Parsing: @[]^_`{|}~@host/> against ", + "Parsing: @[\\]^_`{|}~@host/> against ", + "Parsing: @[]^_`{|}~@host/> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: @[\\]^_`{|}~> against ", + "Parsing: @[\\]^_`{|}~> against ", + "Parsing: ?@[\\]^_`{|}~> against ", + "Parsing: ?@[\\]^_`{|}~> against ", + "Parsing: ?@[\\]^_`{|}~> against ", + "Parsing: ?@[\\]^_`{|}~> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against " + ], + "a-element.html?include=file": [ + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: < File:c|////foo\\bar.html> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\\\\server\\file> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <..> against ", + "Parsing: <..> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <..> against ", + "Parsing: <..> against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#x> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\\//pig> against ", + "Parsing: <\\/localhost//pig> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <10.0.0.7:8080/foo.html> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against " + ], + "a-element.html?include=javascript": [ + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against " + ], + "a-element.html?include=mailto": [ + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#x> against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against " + ], + "data-uri-fragment.html": false, + "failure.html": [ + "XHR: file://example:1/ should throw", + "Location's href: file://example:1/ should throw", + "window.open(): file://example:1/ should throw", + "XHR: file://example:test/ should throw", + "Location's href: file://example:test/ should throw", + "window.open(): file://example:test/ should throw", + "XHR: file://example%/ should throw", + "Location's href: file://example%/ should throw", + "window.open(): file://example%/ should throw", + "XHR: file://[example]/ should throw", + "Location's href: file://[example]/ should throw", + "window.open(): file://[example]/ should throw", + "XHR: http://user:pass@/ should throw", + "Location's href: http://user:pass@/ should throw", + "window.open(): http://user:pass@/ should throw", + "XHR: http://foo:-80/ should throw", + "Location's href: http://foo:-80/ should throw", + "window.open(): http://foo:-80/ should throw", + "XHR: http://user@/www.example.com should throw", + "Location's href: http://user@/www.example.com should throw", + "window.open(): http://user@/www.example.com should throw", + "XHR: http://@/www.example.com should throw", + "Location's href: http://@/www.example.com should throw", + "window.open(): http://@/www.example.com should throw", + "XHR: http://a:b@/www.example.com should throw", + "Location's href: http://a:b@/www.example.com should throw", + "window.open(): http://a:b@/www.example.com should throw", + "XHR: http://@:www.example.com should throw", + "Location's href: http://@:www.example.com should throw", + "window.open(): http://@:www.example.com should throw", + "XHR: https://� should throw", + "Location's href: https://� should throw", + "window.open(): https://� should throw", + "XHR: https://%EF%BF%BD should throw", + "Location's href: https://%EF%BF%BD should throw", + "window.open(): https://%EF%BF%BD should throw", + "XHR: http://a.b.c.xn--pokxncvks should throw", + "Location's href: http://a.b.c.xn--pokxncvks should throw", + "window.open(): http://a.b.c.xn--pokxncvks should throw", + "XHR: http://10.0.0.xn--pokxncvks should throw", + "Location's href: http://10.0.0.xn--pokxncvks should throw", + "window.open(): http://10.0.0.xn--pokxncvks should throw", + "XHR: http://a.b.c.XN--pokxncvks should throw", + "Location's href: http://a.b.c.XN--pokxncvks should throw", + "window.open(): http://a.b.c.XN--pokxncvks should throw", + "XHR: http://a.b.c.Xn--pokxncvks should throw", + "Location's href: http://a.b.c.Xn--pokxncvks should throw", + "window.open(): http://a.b.c.Xn--pokxncvks should throw", + "XHR: http://10.0.0.XN--pokxncvks should throw", + "Location's href: http://10.0.0.XN--pokxncvks should throw", + "window.open(): http://10.0.0.XN--pokxncvks should throw", + "XHR: http://10.0.0.xN--pokxncvks should throw", + "Location's href: http://10.0.0.xN--pokxncvks should throw", + "window.open(): http://10.0.0.xN--pokxncvks should throw", + "XHR: https://x x:12 should throw", + "Location's href: https://x x:12 should throw", + "window.open(): https://x x:12 should throw", + "XHR: http://[www.google.com]/ should throw", + "Location's href: http://[www.google.com]/ should throw", + "window.open(): http://[www.google.com]/ should throw", + "XHR: sc://@/ should throw", + "Location's href: sc://@/ should throw", + "window.open(): sc://@/ should throw", + "XHR: sc://te@s:t@/ should throw", + "Location's href: sc://te@s:t@/ should throw", + "window.open(): sc://te@s:t@/ should throw", + "XHR: sc://:/ should throw", + "Location's href: sc://:/ should throw", + "window.open(): sc://:/ should throw", + "XHR: sc://:12/ should throw", + "Location's href: sc://:12/ should throw", + "window.open(): sc://:12/ should throw", + "XHR: sc://a\u0000b/ should throw", + "Location's href: sc://a\u0000b/ should throw", + "window.open(): sc://a\u0000b/ should throw", + "XHR: sc://a b/ should throw", + "Location's href: sc://a b/ should throw", + "window.open(): sc://a b/ should throw", + "XHR: sc://ab should throw", + "Location's href: sc://a>b should throw", + "window.open(): sc://a>b should throw", + "XHR: sc://a[b/ should throw", + "Location's href: sc://a[b/ should throw", + "window.open(): sc://a[b/ should throw", + "XHR: sc://a\\b/ should throw", + "Location's href: sc://a\\b/ should throw", + "window.open(): sc://a\\b/ should throw", + "XHR: sc://a]b/ should throw", + "Location's href: sc://a]b/ should throw", + "window.open(): sc://a]b/ should throw", + "XHR: sc://a^b should throw", + "Location's href: sc://a^b should throw", + "window.open(): sc://a^b should throw", + "XHR: sc://a|b/ should throw", + "Location's href: sc://a|b/ should throw", + "window.open(): sc://a|b/ should throw", + "XHR: http://a\u0000b/ should throw", + "Location's href: http://a\u0000b/ should throw", + "window.open(): http://a\u0000b/ should throw", + "XHR: http://a\u0001b/ should throw", + "Location's href: http://a\u0001b/ should throw", + "window.open(): http://a\u0001b/ should throw", + "XHR: http://a\u0002b/ should throw", + "Location's href: http://a\u0002b/ should throw", + "window.open(): http://a\u0002b/ should throw", + "XHR: http://a\u0003b/ should throw", + "Location's href: http://a\u0003b/ should throw", + "window.open(): http://a\u0003b/ should throw", + "XHR: http://a\u0004b/ should throw", + "Location's href: http://a\u0004b/ should throw", + "window.open(): http://a\u0004b/ should throw", + "XHR: http://a\u0005b/ should throw", + "Location's href: http://a\u0005b/ should throw", + "window.open(): http://a\u0005b/ should throw", + "XHR: http://a\u0006b/ should throw", + "Location's href: http://a\u0006b/ should throw", + "window.open(): http://a\u0006b/ should throw", + "XHR: http://a\u0007b/ should throw", + "Location's href: http://a\u0007b/ should throw", + "window.open(): http://a\u0007b/ should throw", + "XHR: http://a\bb/ should throw", + "Location's href: http://a\bb/ should throw", + "window.open(): http://a\bb/ should throw", + "XHR: http://a\u000bb/ should throw", + "Location's href: http://a\u000bb/ should throw", + "window.open(): http://a\u000bb/ should throw", + "XHR: http://a\fb/ should throw", + "Location's href: http://a\fb/ should throw", + "window.open(): http://a\fb/ should throw", + "XHR: http://a\u000eb/ should throw", + "Location's href: http://a\u000eb/ should throw", + "window.open(): http://a\u000eb/ should throw", + "XHR: http://a\u000fb/ should throw", + "Location's href: http://a\u000fb/ should throw", + "window.open(): http://a\u000fb/ should throw", + "XHR: http://a\u0010b/ should throw", + "Location's href: http://a\u0010b/ should throw", + "window.open(): http://a\u0010b/ should throw", + "XHR: http://a\u0011b/ should throw", + "Location's href: http://a\u0011b/ should throw", + "window.open(): http://a\u0011b/ should throw", + "XHR: http://a\u0012b/ should throw", + "Location's href: http://a\u0012b/ should throw", + "window.open(): http://a\u0012b/ should throw", + "XHR: http://a\u0013b/ should throw", + "Location's href: http://a\u0013b/ should throw", + "window.open(): http://a\u0013b/ should throw", + "XHR: http://a\u0014b/ should throw", + "Location's href: http://a\u0014b/ should throw", + "window.open(): http://a\u0014b/ should throw", + "XHR: http://a\u0015b/ should throw", + "Location's href: http://a\u0015b/ should throw", + "window.open(): http://a\u0015b/ should throw", + "XHR: http://a\u0016b/ should throw", + "Location's href: http://a\u0016b/ should throw", + "window.open(): http://a\u0016b/ should throw", + "XHR: http://a\u0017b/ should throw", + "Location's href: http://a\u0017b/ should throw", + "window.open(): http://a\u0017b/ should throw", + "XHR: http://a\u0018b/ should throw", + "Location's href: http://a\u0018b/ should throw", + "window.open(): http://a\u0018b/ should throw", + "XHR: http://a\u0019b/ should throw", + "Location's href: http://a\u0019b/ should throw", + "window.open(): http://a\u0019b/ should throw", + "XHR: http://a\u001ab/ should throw", + "Location's href: http://a\u001ab/ should throw", + "window.open(): http://a\u001ab/ should throw", + "XHR: http://a\u001bb/ should throw", + "Location's href: http://a\u001bb/ should throw", + "window.open(): http://a\u001bb/ should throw", + "XHR: http://a\u001cb/ should throw", + "Location's href: http://a\u001cb/ should throw", + "window.open(): http://a\u001cb/ should throw", + "XHR: http://a\u001db/ should throw", + "Location's href: http://a\u001db/ should throw", + "window.open(): http://a\u001db/ should throw", + "XHR: http://a\u001eb/ should throw", + "Location's href: http://a\u001eb/ should throw", + "window.open(): http://a\u001eb/ should throw", + "XHR: http://a\u001fb/ should throw", + "Location's href: http://a\u001fb/ should throw", + "window.open(): http://a\u001fb/ should throw", + "XHR: http://a b/ should throw", + "Location's href: http://a b/ should throw", + "window.open(): http://a b/ should throw", + "XHR: http://a%b/ should throw", + "Location's href: http://a%b/ should throw", + "window.open(): http://a%b/ should throw", + "XHR: http://ab should throw", + "Location's href: http://a>b should throw", + "window.open(): http://a>b should throw", + "XHR: http://a[b/ should throw", + "Location's href: http://a[b/ should throw", + "window.open(): http://a[b/ should throw", + "XHR: http://a]b/ should throw", + "Location's href: http://a]b/ should throw", + "window.open(): http://a]b/ should throw", + "XHR: http://a^b should throw", + "Location's href: http://a^b should throw", + "window.open(): http://a^b should throw", + "XHR: http://a|b/ should throw", + "Location's href: http://a|b/ should throw", + "window.open(): http://a|b/ should throw", + "XHR: http://ab/ should throw", + "Location's href: http://ab/ should throw", + "window.open(): http://ab/ should throw", + "XHR: http://ho%00st/ should throw", + "Location's href: http://ho%00st/ should throw", + "window.open(): http://ho%00st/ should throw", + "XHR: http://ho%01st/ should throw", + "Location's href: http://ho%01st/ should throw", + "window.open(): http://ho%01st/ should throw", + "XHR: http://ho%02st/ should throw", + "Location's href: http://ho%02st/ should throw", + "window.open(): http://ho%02st/ should throw", + "XHR: http://ho%03st/ should throw", + "Location's href: http://ho%03st/ should throw", + "window.open(): http://ho%03st/ should throw", + "XHR: http://ho%04st/ should throw", + "Location's href: http://ho%04st/ should throw", + "window.open(): http://ho%04st/ should throw", + "XHR: http://ho%05st/ should throw", + "Location's href: http://ho%05st/ should throw", + "window.open(): http://ho%05st/ should throw", + "XHR: http://ho%06st/ should throw", + "Location's href: http://ho%06st/ should throw", + "window.open(): http://ho%06st/ should throw", + "XHR: http://ho%07st/ should throw", + "Location's href: http://ho%07st/ should throw", + "window.open(): http://ho%07st/ should throw", + "XHR: http://ho%08st/ should throw", + "Location's href: http://ho%08st/ should throw", + "window.open(): http://ho%08st/ should throw", + "XHR: http://ho%09st/ should throw", + "Location's href: http://ho%09st/ should throw", + "window.open(): http://ho%09st/ should throw", + "XHR: http://ho%0Ast/ should throw", + "Location's href: http://ho%0Ast/ should throw", + "window.open(): http://ho%0Ast/ should throw", + "XHR: http://ho%0Bst/ should throw", + "Location's href: http://ho%0Bst/ should throw", + "window.open(): http://ho%0Bst/ should throw", + "XHR: http://ho%0Cst/ should throw", + "Location's href: http://ho%0Cst/ should throw", + "window.open(): http://ho%0Cst/ should throw", + "XHR: http://ho%0Dst/ should throw", + "Location's href: http://ho%0Dst/ should throw", + "window.open(): http://ho%0Dst/ should throw", + "XHR: http://ho%0Est/ should throw", + "Location's href: http://ho%0Est/ should throw", + "window.open(): http://ho%0Est/ should throw", + "XHR: http://ho%0Fst/ should throw", + "Location's href: http://ho%0Fst/ should throw", + "window.open(): http://ho%0Fst/ should throw", + "XHR: http://ho%10st/ should throw", + "Location's href: http://ho%10st/ should throw", + "window.open(): http://ho%10st/ should throw", + "XHR: http://ho%11st/ should throw", + "Location's href: http://ho%11st/ should throw", + "window.open(): http://ho%11st/ should throw", + "XHR: http://ho%12st/ should throw", + "Location's href: http://ho%12st/ should throw", + "window.open(): http://ho%12st/ should throw", + "XHR: http://ho%13st/ should throw", + "Location's href: http://ho%13st/ should throw", + "window.open(): http://ho%13st/ should throw", + "XHR: http://ho%14st/ should throw", + "Location's href: http://ho%14st/ should throw", + "window.open(): http://ho%14st/ should throw", + "XHR: http://ho%15st/ should throw", + "Location's href: http://ho%15st/ should throw", + "window.open(): http://ho%15st/ should throw", + "XHR: http://ho%16st/ should throw", + "Location's href: http://ho%16st/ should throw", + "window.open(): http://ho%16st/ should throw", + "XHR: http://ho%17st/ should throw", + "Location's href: http://ho%17st/ should throw", + "window.open(): http://ho%17st/ should throw", + "XHR: http://ho%18st/ should throw", + "Location's href: http://ho%18st/ should throw", + "window.open(): http://ho%18st/ should throw", + "XHR: http://ho%19st/ should throw", + "Location's href: http://ho%19st/ should throw", + "window.open(): http://ho%19st/ should throw", + "XHR: http://ho%1Ast/ should throw", + "Location's href: http://ho%1Ast/ should throw", + "window.open(): http://ho%1Ast/ should throw", + "XHR: http://ho%1Bst/ should throw", + "Location's href: http://ho%1Bst/ should throw", + "window.open(): http://ho%1Bst/ should throw", + "XHR: http://ho%1Cst/ should throw", + "Location's href: http://ho%1Cst/ should throw", + "window.open(): http://ho%1Cst/ should throw", + "XHR: http://ho%1Dst/ should throw", + "Location's href: http://ho%1Dst/ should throw", + "window.open(): http://ho%1Dst/ should throw", + "XHR: http://ho%1Est/ should throw", + "Location's href: http://ho%1Est/ should throw", + "window.open(): http://ho%1Est/ should throw", + "XHR: http://ho%1Fst/ should throw", + "Location's href: http://ho%1Fst/ should throw", + "window.open(): http://ho%1Fst/ should throw", + "XHR: http://ho%20st/ should throw", + "Location's href: http://ho%20st/ should throw", + "window.open(): http://ho%20st/ should throw", + "XHR: http://ho%23st/ should throw", + "Location's href: http://ho%23st/ should throw", + "window.open(): http://ho%23st/ should throw", + "XHR: http://ho%25st/ should throw", + "Location's href: http://ho%25st/ should throw", + "window.open(): http://ho%25st/ should throw", + "XHR: http://ho%2Fst/ should throw", + "Location's href: http://ho%2Fst/ should throw", + "window.open(): http://ho%2Fst/ should throw", + "XHR: http://ho%3Ast/ should throw", + "Location's href: http://ho%3Ast/ should throw", + "window.open(): http://ho%3Ast/ should throw", + "XHR: http://ho%3Cst/ should throw", + "Location's href: http://ho%3Cst/ should throw", + "window.open(): http://ho%3Cst/ should throw", + "XHR: http://ho%3Est/ should throw", + "Location's href: http://ho%3Est/ should throw", + "window.open(): http://ho%3Est/ should throw", + "XHR: http://ho%3Fst/ should throw", + "Location's href: http://ho%3Fst/ should throw", + "window.open(): http://ho%3Fst/ should throw", + "XHR: http://ho%40st/ should throw", + "Location's href: http://ho%40st/ should throw", + "window.open(): http://ho%40st/ should throw", + "XHR: http://ho%5Bst/ should throw", + "Location's href: http://ho%5Bst/ should throw", + "window.open(): http://ho%5Bst/ should throw", + "XHR: http://ho%5Cst/ should throw", + "Location's href: http://ho%5Cst/ should throw", + "window.open(): http://ho%5Cst/ should throw", + "XHR: http://ho%5Dst/ should throw", + "Location's href: http://ho%5Dst/ should throw", + "window.open(): http://ho%5Dst/ should throw", + "XHR: http://ho%7Cst/ should throw", + "Location's href: http://ho%7Cst/ should throw", + "window.open(): http://ho%7Cst/ should throw", + "XHR: http://ho%7Fst/ should throw", + "Location's href: http://ho%7Fst/ should throw", + "window.open(): http://ho%7Fst/ should throw", + "XHR: ftp://example.com%80/ should throw", + "Location's href: ftp://example.com%80/ should throw", + "window.open(): ftp://example.com%80/ should throw", + "XHR: ftp://example.com%A0/ should throw", + "Location's href: ftp://example.com%A0/ should throw", + "window.open(): ftp://example.com%A0/ should throw", + "XHR: https://example.com%80/ should throw", + "Location's href: https://example.com%80/ should throw", + "window.open(): https://example.com%80/ should throw", + "XHR: https://example.com%A0/ should throw", + "Location's href: https://example.com%A0/ should throw", + "window.open(): https://example.com%A0/ should throw", + "XHR: https://0x100000000/test should throw", + "Location's href: https://0x100000000/test should throw", + "window.open(): https://0x100000000/test should throw", + "XHR: https://256.0.0.1/test should throw", + "Location's href: https://256.0.0.1/test should throw", + "window.open(): https://256.0.0.1/test should throw", + "XHR: file://%43%3A should throw", + "Location's href: file://%43%3A should throw", + "window.open(): file://%43%3A should throw", + "XHR: file://%43%7C should throw", + "Location's href: file://%43%7C should throw", + "window.open(): file://%43%7C should throw", + "XHR: file://%43| should throw", + "Location's href: file://%43| should throw", + "window.open(): file://%43| should throw", + "XHR: file://C%7C should throw", + "Location's href: file://C%7C should throw", + "window.open(): file://C%7C should throw", + "XHR: file://%43%7C/ should throw", + "Location's href: file://%43%7C/ should throw", + "window.open(): file://%43%7C/ should throw", + "XHR: https://%43%7C/ should throw", + "Location's href: https://%43%7C/ should throw", + "window.open(): https://%43%7C/ should throw", + "XHR: asdf://%43|/ should throw", + "Location's href: asdf://%43|/ should throw", + "window.open(): asdf://%43|/ should throw", + "XHR: https://[0::0::0] should throw", + "Location's href: https://[0::0::0] should throw", + "window.open(): https://[0::0::0] should throw", + "XHR: https://[0:.0] should throw", + "Location's href: https://[0:.0] should throw", + "window.open(): https://[0:.0] should throw", + "XHR: https://[0:0:] should throw", + "Location's href: https://[0:0:] should throw", + "window.open(): https://[0:0:] should throw", + "XHR: https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw", + "Location's href: https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw", + "window.open(): https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw", + "XHR: https://[0:1.00.0.0.0] should throw", + "Location's href: https://[0:1.00.0.0.0] should throw", + "window.open(): https://[0:1.00.0.0.0] should throw", + "XHR: https://[0:1.290.0.0.0] should throw", + "Location's href: https://[0:1.290.0.0.0] should throw", + "window.open(): https://[0:1.290.0.0.0] should throw", + "XHR: https://[0:1.23.23] should throw", + "Location's href: https://[0:1.23.23] should throw", + "window.open(): https://[0:1.23.23] should throw", + "XHR: http://? should throw", + "Location's href: http://? should throw", + "window.open(): http://? should throw", + "XHR: http://# should throw", + "Location's href: http://# should throw", + "window.open(): http://# should throw", + "XHR: non-special://[:80/ should throw", + "Location's href: non-special://[:80/ should throw", + "window.open(): non-special://[:80/ should throw", + "XHR: http://[::127.0.0.0.1] should throw", + "Location's href: http://[::127.0.0.0.1] should throw", + "window.open(): http://[::127.0.0.0.1] should throw", + "XHR: file://­/p should throw", + "Location's href: file://­/p should throw", + "window.open(): file://­/p should throw", + "XHR: file://%C2%AD/p should throw", + "Location's href: file://%C2%AD/p should throw", + "window.open(): file://%C2%AD/p should throw", + "XHR: file://xn--/p should throw", + "Location's href: file://xn--/p should throw", + "window.open(): file://xn--/p should throw", + "XHR: http://0..0x300/ should throw", + "Location's href: http://0..0x300/ should throw", + "window.open(): http://0..0x300/ should throw", + "XHR: http://0..0x300./ should throw", + "Location's href: http://0..0x300./ should throw", + "window.open(): http://0..0x300./ should throw", + "XHR: http://1.2.3.08 should throw", + "Location's href: http://1.2.3.08 should throw", + "window.open(): http://1.2.3.08 should throw", + "XHR: http://1.2.3.08. should throw", + "Location's href: http://1.2.3.08. should throw", + "window.open(): http://1.2.3.08. should throw", + "XHR: http://1.2.3.09 should throw", + "Location's href: http://1.2.3.09 should throw", + "window.open(): http://1.2.3.09 should throw", + "XHR: http://09.2.3.4 should throw", + "Location's href: http://09.2.3.4 should throw", + "window.open(): http://09.2.3.4 should throw", + "XHR: http://09.2.3.4. should throw", + "Location's href: http://09.2.3.4. should throw", + "window.open(): http://09.2.3.4. should throw", + "XHR: http://01.2.3.4.5 should throw", + "Location's href: http://01.2.3.4.5 should throw", + "window.open(): http://01.2.3.4.5 should throw", + "XHR: http://01.2.3.4.5. should throw", + "Location's href: http://01.2.3.4.5. should throw", + "window.open(): http://01.2.3.4.5. should throw", + "XHR: http://0x100.2.3.4 should throw", + "Location's href: http://0x100.2.3.4 should throw", + "window.open(): http://0x100.2.3.4 should throw", + "XHR: http://0x100.2.3.4. should throw", + "Location's href: http://0x100.2.3.4. should throw", + "window.open(): http://0x100.2.3.4. should throw", + "XHR: http://0x1.2.3.4.5 should throw", + "Location's href: http://0x1.2.3.4.5 should throw", + "window.open(): http://0x1.2.3.4.5 should throw", + "XHR: http://0x1.2.3.4.5. should throw", + "Location's href: http://0x1.2.3.4.5. should throw", + "window.open(): http://0x1.2.3.4.5. should throw", + "XHR: http://foo.1.2.3.4 should throw", + "Location's href: http://foo.1.2.3.4 should throw", + "window.open(): http://foo.1.2.3.4 should throw", + "XHR: http://foo.1.2.3.4. should throw", + "Location's href: http://foo.1.2.3.4. should throw", + "window.open(): http://foo.1.2.3.4. should throw", + "XHR: http://foo.2.3.4 should throw", + "Location's href: http://foo.2.3.4 should throw", + "window.open(): http://foo.2.3.4 should throw", + "XHR: http://foo.2.3.4. should throw", + "Location's href: http://foo.2.3.4. should throw", + "window.open(): http://foo.2.3.4. should throw", + "XHR: http://foo.09 should throw", + "Location's href: http://foo.09 should throw", + "window.open(): http://foo.09 should throw", + "XHR: http://foo.09. should throw", + "Location's href: http://foo.09. should throw", + "window.open(): http://foo.09. should throw", + "XHR: http://foo.0x4 should throw", + "Location's href: http://foo.0x4 should throw", + "window.open(): http://foo.0x4 should throw", + "XHR: http://foo.0x4. should throw", + "Location's href: http://foo.0x4. should throw", + "window.open(): http://foo.0x4. should throw", + "XHR: http://0999999999999999999/ should throw", + "Location's href: http://0999999999999999999/ should throw", + "window.open(): http://0999999999999999999/ should throw", + "XHR: http://foo.0x should throw", + "Location's href: http://foo.0x should throw", + "window.open(): http://foo.0x should throw", + "XHR: http://foo.0XFfFfFfFfFfFfFfFfFfAcE123 should throw", + "Location's href: http://foo.0XFfFfFfFfFfFfFfFfFfAcE123 should throw", + "window.open(): http://foo.0XFfFfFfFfFfFfFfFfFfAcE123 should throw", + "XHR: http://💩.123/ should throw", + "Location's href: http://💩.123/ should throw", + "window.open(): http://💩.123/ should throw", + "XHR: https://\u0000y should throw", + "Location's href: https://\u0000y should throw", + "window.open(): https://\u0000y should throw", + "XHR: https://￿y should throw", + "Location's href: https://￿y should throw", + "window.open(): https://￿y should throw", + "XHR: https://­/ should throw", + "Location's href: https://­/ should throw", + "window.open(): https://­/ should throw", + "XHR: https://%C2%AD/ should throw", + "Location's href: https://%C2%AD/ should throw", + "window.open(): https://%C2%AD/ should throw", + "XHR: https://xn--/ should throw", + "Location's href: https://xn--/ should throw", + "window.open(): https://xn--/ should throw", + "XHR: data://:443 should throw", + "Location's href: data://:443 should throw", + "window.open(): data://:443 should throw", + "XHR: data://test:test should throw", + "Location's href: data://test:test should throw", + "window.open(): data://test:test should throw", + "XHR: data://[:1] should throw", + "Location's href: data://[:1] should throw", + "window.open(): data://[:1] should throw", + "XHR: javascript://:443 should throw", + "Location's href: javascript://:443 should throw", + "window.open(): javascript://:443 should throw", + "XHR: javascript://test:test should throw", + "Location's href: javascript://test:test should throw", + "window.open(): javascript://test:test should throw", + "XHR: javascript://[:1] should throw", + "Location's href: javascript://[:1] should throw", + "window.open(): javascript://[:1] should throw", + "XHR: mailto://:443 should throw", + "Location's href: mailto://:443 should throw", + "window.open(): mailto://:443 should throw", + "XHR: mailto://test:test should throw", + "Location's href: mailto://test:test should throw", + "window.open(): mailto://test:test should throw", + "XHR: mailto://[:1] should throw", + "Location's href: mailto://[:1] should throw", + "window.open(): mailto://[:1] should throw", + "XHR: intent://:443 should throw", + "Location's href: intent://:443 should throw", + "window.open(): intent://:443 should throw", + "XHR: intent://test:test should throw", + "Location's href: intent://test:test should throw", + "window.open(): intent://test:test should throw", + "XHR: intent://[:1] should throw", + "Location's href: intent://[:1] should throw", + "window.open(): intent://[:1] should throw", + "XHR: urn://:443 should throw", + "Location's href: urn://:443 should throw", + "window.open(): urn://:443 should throw", + "XHR: urn://test:test should throw", + "Location's href: urn://test:test should throw", + "window.open(): urn://test:test should throw", + "XHR: urn://[:1] should throw", + "Location's href: urn://[:1] should throw", + "window.open(): urn://[:1] should throw", + "XHR: turn://:443 should throw", + "Location's href: turn://:443 should throw", + "window.open(): turn://:443 should throw", + "XHR: turn://test:test should throw", + "Location's href: turn://test:test should throw", + "window.open(): turn://test:test should throw", + "XHR: turn://[:1] should throw", + "Location's href: turn://[:1] should throw", + "window.open(): turn://[:1] should throw", + "XHR: stun://:443 should throw", + "Location's href: stun://:443 should throw", + "window.open(): stun://:443 should throw", + "XHR: stun://test:test should throw", + "Location's href: stun://test:test should throw", + "window.open(): stun://test:test should throw", + "XHR: stun://[:1] should throw", + "Location's href: stun://[:1] should throw", + "window.open(): stun://[:1] should throw" + ], + "url-statics-parse.any.html": true, + "url-statics-parse.any.worker.html": true }, "fetch": { "api": { @@ -8851,7 +10647,19 @@ "Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/z\"}]", "Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/0\"}]", "Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/3\"}]" - ] + ], + "urlpattern-compare.any.serviceworker.html": false, + "urlpattern-compare.any.sharedworker.html": false, + "urlpattern-compare.https.any.serviceworker.html": false, + "urlpattern-compare.https.any.sharedworker.html": false, + "urlpattern-hasregexpgroups.any.html": false, + "urlpattern-hasregexpgroups.any.serviceworker.html": false, + "urlpattern-hasregexpgroups.any.sharedworker.html": false, + "urlpattern-hasregexpgroups.any.worker.html": false, + "urlpattern.any.serviceworker.html": false, + "urlpattern.any.sharedworker.html": false, + "urlpattern.https.any.serviceworker.html": false, + "urlpattern.https.any.sharedworker.html": false }, "compression": { "compression-bad-chunks.tentative.any.html": true,