diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/mozilla/tests/xml | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/mozilla/tests/xml')
-rw-r--r-- | testing/web-platform/mozilla/tests/xml/parsedepth.html | 62 | ||||
-rw-r--r-- | testing/web-platform/mozilla/tests/xml/responsexml-content-type.html | 49 |
2 files changed, 111 insertions, 0 deletions
diff --git a/testing/web-platform/mozilla/tests/xml/parsedepth.html b/testing/web-platform/mozilla/tests/xml/parsedepth.html new file mode 100644 index 0000000000..dab64d9dcc --- /dev/null +++ b/testing/web-platform/mozilla/tests/xml/parsedepth.html @@ -0,0 +1,62 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> + +function parseBlob(blob) { + return new Promise(resolve => { + let xhr = new XMLHttpRequest(); + xhr.open("GET", URL.createObjectURL(blob)); + xhr.onload = () => { + resolve(xhr.responseXML); + } + xhr.send(); + }); +} + +promise_test(async (t) => { + // Most browser engines, including Gecko, use 5000 as the limit, so test a + // range around that. + const cutoff = 5000; + + let minDepth = cutoff - 100; + let maxDepth = cutoff + 100; + + // Generate a string with elements nested maxDepth deep. + const openTag = "<x>"; + const closeTag = "</x>"; + let xml = openTag.repeat(maxDepth) + closeTag.repeat(maxDepth); + + // Compute where we change from opening to closing tags. + const middle = maxDepth * openTag.length; + + // Create a blob around the string. + let blob = new Blob([xml], { type: "application/xml" }); + + while (minDepth < maxDepth) { + // Try to parse a number of nested tags between minDepth and maxDepth. + let test = Math.ceil((minDepth + maxDepth) / 2); + + // We need the number of opening and closing tags to be equal to the number + // that we calculated above. + let slice = blob.slice(middle - (test * openTag.length), + middle + (test * closeTag.length), blob.type); + + let responseXML = await parseBlob(slice); + + // Move either minDepth or maxDepth so that the actual limit is still in the + // range of [minDepth-maxDepth]. + if (responseXML) { + // Depth is ok. + minDepth = test; + } else { + maxDepth = test - 1; + } + } + assert_equals(minDepth, maxDepth); + assert_equals(minDepth, cutoff); +},"Parsing XML fails when the nesting depth is 5000"); + +</script> diff --git a/testing/web-platform/mozilla/tests/xml/responsexml-content-type.html b/testing/web-platform/mozilla/tests/xml/responsexml-content-type.html new file mode 100644 index 0000000000..9e7b0919bc --- /dev/null +++ b/testing/web-platform/mozilla/tests/xml/responsexml-content-type.html @@ -0,0 +1,49 @@ +<!doctype html> +<html> + <head> + <title>XMLHttpRequest: responseXML content-type test</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-responsexml"/> + </head> + <body> + </body> + <script> + +function parseBlob(blob) { + return new Promise(resolve => { + let xhr = new XMLHttpRequest(); + xhr.open("GET", URL.createObjectURL(blob)); + xhr.onload = () => { + resolve(xhr.responseXML); + } + xhr.send(); + }); +} + +promise_test(async function() { + let blob = new Blob(["<x></x>"]); + let responseXML = await parseBlob(blob); + assert_not_equals(responseXML, null); +}, "Empty MIME type should be equivalent to text/xml") + +promise_test(async function() { + let blob = new Blob(["<x></x>"], {type: "text/html"}); + let responseXML = await parseBlob(blob); + assert_equals(responseXML, null); +}, "HTML content type should return null") + +promise_test(async function() { + let blob = new Blob(["<x></x>"], {type: "text/plain"}); + let responseXML = await parseBlob(blob); + assert_equals(responseXML, null); +}, "Non XML or HTML content type should return null") + +promise_test(async function() { + let blob = new Blob(["<x></x>"], {type: "text/xml"}); + let responseXML = await parseBlob(blob); + assert_not_equals(responseXML, null); +}, "XML content type should parse") + + </script> +</html> |