diff options
Diffstat (limited to 'testing/web-platform/tests/resource-timing/cross-origin-status-codes.html')
-rw-r--r-- | testing/web-platform/tests/resource-timing/cross-origin-status-codes.html | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/testing/web-platform/tests/resource-timing/cross-origin-status-codes.html b/testing/web-platform/tests/resource-timing/cross-origin-status-codes.html new file mode 100644 index 0000000000..197a766339 --- /dev/null +++ b/testing/web-platform/tests/resource-timing/cross-origin-status-codes.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> +<head> +<title>Resource Timing: PerformanceResourceTiming attributes shouldn't change + if the HTTP status code changes</title> +<link rel="help" href="https://www.w3.org/TR/resource-timing-2/#sec-performanceresourcetiming"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=/common/get-host-info.sub.js></script> +</head> +<body> +<img id="img_200"> +<img id="img_307"> +<img id="img_404"> +<img id="img_502"> +<script id="script_200"></script> +<script id="script_307"></script> +<script id="script_404"></script> +<script id="script_502"></script> +<script> + +const listenForPerformanceEntries = num_expected => { + return new Promise(resolve => { + let results = []; + new PerformanceObserver(entryList => { + entryList.getEntries().forEach(entry => { + if (!entry.name.includes("status-code")) + return; + + results.push(entry); + if (results.length == num_expected) { + resolve(results); + } + }); + }).observe({entryTypes: ['resource']}); + }); +} + +promise_test(async t => { + const destUrl = get_host_info().HTTP_REMOTE_ORIGIN + '/resource-timing/resources/'; + const statusCodes = ['200', '307', '404', '502']; + + let expected_entry_count = 0; + statusCodes.forEach(status => { + document.getElementById(`img_${status}`).src = `${destUrl}status-code.py?status=${status}`; + document.getElementById(`script_${status}`).src = `${destUrl}status-code.py?status=${status}&script=1`; + expected_entry_count += 2; + }); + + const entries = await listenForPerformanceEntries(expected_entry_count); + + // We will check that the non-timestamp values of the entry match for all + // entries. + const keys = [ + 'entryType', + 'nextHopProtocol', + 'transferSize', + 'encodedBodySize', + 'decodedBodySize', + ]; + + const first = entries[0]; + entries.slice(1).forEach(entry => { + keys.forEach(attribute => { + assert_equals(entry[attribute], first[attribute], + `There must be no discernible difference for the ${attribute} ` + + `attribute but found a difference for the ${entry.name} resource.`); + })}); +}, "Make sure cross origin resource fetch failures with different status codes are indistinguishable"); +</script> |