diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/html/syntax/speculative-parsing/resources | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/syntax/speculative-parsing/resources')
-rw-r--r-- | testing/web-platform/tests/html/syntax/speculative-parsing/resources/speculative-parsing-util.js | 58 | ||||
-rw-r--r-- | testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py | 12 |
2 files changed, 70 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/syntax/speculative-parsing/resources/speculative-parsing-util.js b/testing/web-platform/tests/html/syntax/speculative-parsing/resources/speculative-parsing-util.js new file mode 100644 index 0000000000..b675665ca9 --- /dev/null +++ b/testing/web-platform/tests/html/syntax/speculative-parsing/resources/speculative-parsing-util.js @@ -0,0 +1,58 @@ +function expect_fetched_onload(uuid, expectation) { + return new Promise(resolve => { + addEventListener('load', resolve); + }).then(async () => { + const result = await get_result(uuid); + if (expectation) { + assert_not_equals(result, '', 'speculative case did not fetch'); + } else { + assert_equals(result, '', 'speculative case incorrectly fetched'); + } + return result; + }); +} + +function compare_with_nonspeculative(uuid, title, test_nonspeculative) { + return function(speculative_result) { + if (!test_nonspeculative) { + return Promise.resolve(); + } + return new Promise(resolve => { + const iframe = document.createElement('iframe'); + iframe.onload = resolve; + iframe.src = `../resources/${title}-nonspeculative.sub.html?uuid=${uuid}`; + document.body.appendChild(iframe); + }).then(async () => { + const result = await get_result(uuid); + if (speculative_result === '') { + assert_equals(result, '', 'non-speculative case incorrectly fetched') + } else { + assert_not_equals(result, '', 'non-speculative case did not fetch'); + const speculative_headers = speculative_result.trim().split("\n"); + const nonspeculative_headers = result.trim().split("\n"); + assert_equals(speculative_headers.length, nonspeculative_headers.length, 'expected the same number of headers between speculative and non-speculative') + for (let i = 0; i < speculative_headers.length; ++i) { + let [s_header, s_value] = split_header(speculative_headers[i]); + let [ns_header, ns_value] = split_header(nonspeculative_headers[i]); + assert_equals(s_header, ns_header, 'expected the order of headers to match between speculative and non-speculative'); + assert_equals(s_value, ns_value, `expected \`${s_header}\` values to match between speculative and non-speculative`); + } + } + }); + } +} + +function split_header(line) { + let [header, value] = line.split(': '); + header = header.toLowerCase(); + value = value.trim(); + if (header === 'referer') { + value = value.replace(/\/generated\/.+$/, '/generated/...'); + } + return [header, value]; +} + +async function get_result(uuid) { + const response = await fetch(`/html/syntax/speculative-parsing/resources/stash.py?action=take&uuid=${uuid}`); + return await response.text(); +} diff --git a/testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py b/testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py new file mode 100644 index 0000000000..5ad04e1558 --- /dev/null +++ b/testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py @@ -0,0 +1,12 @@ +def main(request, response): + if request.GET[b"action"] == b"put": + encodingcheck = u"param-encodingcheck: " + request.url_parts.query.split(u"&encodingcheck=")[1] + u"\r\n" + headers = [] + for line in str(request.raw_headers).split(u'\n'): + header = line.split(':')[0] + # TODO(zcorpan): also test Cookie + if header in [u'Origin', u'Accept', u'Referer']: + headers.append(line) + request.server.stash.put(request.GET[b"uuid"], encodingcheck + u"\r\n".join(headers)) + return u'' + return request.server.stash.take(request.GET[b"uuid"]) |