| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Test cross-origin fetch redirects have the right values.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <body> |
| <script> |
| const load_font = url => { |
| document.body.innerHTML = ` |
| <style> |
| @font-face { |
| font-family: ahem; |
| src: url('${url}'); |
| } |
| </style> |
| <div style="font-family: ahem;">This fetches ahem font.</div> |
| `; |
| return document.fonts.ready; |
| }; |
| |
| const run_test = async (t, url) => { |
| // Set up PerformanceObserver |
| const href = new URL(url).href; |
| const setPerformanceObserver = new Promise(resolve => { |
| const po = new PerformanceObserver(resolve); |
| po.observe({type: "resource"}); |
| }); |
| |
| // Load the font resource and wait for it to be fetched. |
| await load_font(href); |
| |
| // Wait for an entry |
| const timeout = new Promise(resolve => t.step_timeout(resolve, 3000)); |
| const list = await Promise.race([setPerformanceObserver, timeout]); |
| assert_equals(typeof(list), "object", "No iframe entry was fired"); |
| const entries = list.getEntriesByName(url); |
| assert_equals(entries.length, 1); |
| |
| // Test entry values |
| const entry = entries[0]; |
| assert_greater_than(entry.fetchStart, 0, "fetchStart should be greater than 0 in redirects."); |
| assert_greater_than_equal(entry.domainLookupStart, entry.fetchStart, "domainLookupStart should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.domainLookupEnd, entry.domainLookupStart, "domainLookupEnd should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.connectStart, entry.domainLookupEnd, "connectStart should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.secureConnectionStart, entry.connectStart, "secureConnectionStart should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.connectEnd, entry.secureConnectionStart, "connectEnd should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.requestStart, entry.connectEnd, "requestStart should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.responseStart, entry.requestStart, "responseStart should be more than 0 in same-origin redirect."); |
| assert_greater_than_equal(entry.responseEnd, entry.responseStart, "responseEnd should be greater than 0 in redirects."); |
| assert_greater_than_equal(entry.duration, 0, "duration should be greater than 0 in redirects."); |
| } |
| |
| const {HTTPS_REMOTE_ORIGIN} = get_host_info(); |
| promise_test(t => { |
| return run_test(t, HTTPS_REMOTE_ORIGIN + "/fonts/Ahem.ttf"); |
| }, "Test a font's timestamps"); |
| |
| promise_test(t => { |
| return run_test(t, HTTPS_REMOTE_ORIGIN + "/resource-timing/resources/cors-ahem.py?pipe=trickle(d1)"); |
| }, "Test a font's timestamps with delays"); |
| </script> |