From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../resources/speculative-parsing-util.js | 58 ++++++++++++++++++++++ .../syntax/speculative-parsing/resources/stash.py | 12 +++++ 2 files changed, 70 insertions(+) create mode 100644 testing/web-platform/tests/html/syntax/speculative-parsing/resources/speculative-parsing-util.js create mode 100644 testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py (limited to 'testing/web-platform/tests/html/syntax/speculative-parsing/resources') 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"]) -- cgit v1.2.3