summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/syntax/speculative-parsing/resources
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/html/syntax/speculative-parsing/resources
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
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.js58
-rw-r--r--testing/web-platform/tests/html/syntax/speculative-parsing/resources/stash.py12
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"])