<!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>