| // META: global=window,worker |
| // META: script=/common/get-host-info.sub.js |
| // META: script=/resource-timing/resources/sizes-helper.js |
| |
| const baseUrl = |
| new URL('/resource-timing/resources/TAOResponse.py?tao=wildcard', location.href).href; |
| const expectedSize = 4; |
| |
| const hostInfo = get_host_info(); |
| performance.clearResourceTimings(); |
| |
| const accumulateEntry = () => { |
| return new Promise(resolve => { |
| const po = new PerformanceObserver(list => { |
| resolve(list); |
| }); |
| po.observe({type: "resource", buffered: true}); |
| }); |
| }; |
| |
| const checkResourceSizes = () => { |
| const entries = performance.getEntriesByType('resource'); |
| for (let entry of entries) { |
| checkSizeFields(entry, expectedSize, expectedSize + headerSize); |
| } |
| } |
| |
| const redirectUrl = (redirectSourceOrigin, allowOrigin, targetUrl) => { |
| return redirectSourceOrigin + |
| '/resource-timing/resources/redirect-cors.py?allow_origin=' + |
| encodeURIComponent(allowOrigin) + |
| '&timing_allow_origin=*' + |
| '&location=' + encodeURIComponent(targetUrl); |
| } |
| |
| promise_test(() => { |
| // Use a different URL every time so that the cache behaviour does not |
| // depend on execution order. |
| const directUrl = cacheBustUrl(baseUrl); |
| const sameOriginRedirect = redirectUrl(hostInfo.ORIGIN, '*', directUrl); |
| const crossOriginRedirect = redirectUrl(hostInfo.REMOTE_ORIGIN, |
| hostInfo.ORIGIN, directUrl); |
| const mixedRedirect = redirectUrl(hostInfo.REMOTE_ORIGIN, |
| hostInfo.ORIGIN, sameOriginRedirect); |
| const complexRedirect = redirectUrl(hostInfo.ORIGIN, |
| hostInfo.REMOTE_ORIGIN, mixedRedirect); |
| let eatBody = response => response.arrayBuffer(); |
| return fetch(directUrl) |
| .then(eatBody) |
| .then(() => fetch(sameOriginRedirect)) |
| .then(eatBody) |
| .then(() => fetch(crossOriginRedirect)) |
| .then(eatBody) |
| .then(() => fetch(mixedRedirect)) |
| .then(eatBody) |
| .then(() => fetch(complexRedirect)) |
| .then(eatBody) |
| .then(accumulateEntry) |
| .then(checkResourceSizes); |
| }, 'PerformanceResourceTiming sizes Fetch with redirect test'); |
| |
| done(); |