| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <script src="/resources/testharness.js"></script> | 2 <script src="/resources/testharness.js"></script> |
| 3 <script src="/resources/testharnessreport.js"></script> | 3 <script src="/resources/testharnessreport.js"></script> |
| 4 <script src="/resources/get-host-info.js?pipe=sub"></script> | 4 <script src="/resources/get-host-info.js?pipe=sub"></script> |
| 5 <script src="/misc/resources/run-async-tasks-promise.js"></script> | 5 <script src="/misc/resources/run-async-tasks-promise.js"></script> |
| 6 <script> | 6 <script src="/misc/resources/resource-timing-sizes-redirect.js"></script> |
| 7 const baseUrl = | |
| 8 new URL('/security/resources/cors-hello.php', location.href).href; | |
| 9 const expectedSize = 73; | |
| 10 | |
| 11 // Because apache decrements the Keep-Alive max value on each request, the | |
| 12 // transferSize will vary slightly between requests for the same resource. | |
| 13 const fuzzFactor = 3; // bytes | |
| 14 | |
| 15 const minHeaderSize = 100; | |
| 16 | |
| 17 const hostInfo = get_host_info(); | |
| 18 | |
| 19 var directUrl, sameOriginRedirect, crossOriginRedirect, mixedRedirect; | |
| 20 var complexRedirect; | |
| 21 | |
| 22 function checkBodySizeFields(entry) { | |
| 23 assert_equals(entry.decodedBodySize, expectedSize, 'decodedBodySize'); | |
| 24 assert_equals(entry.encodedBodySize, expectedSize, 'encodedBodySize'); | |
| 25 } | |
| 26 | |
| 27 function checkResourceSizes() { | |
| 28 var entries = performance.getEntriesByType('resource'); | |
| 29 var lowerBound, upperBound, withRedirectLowerBound; | |
| 30 var seenCount = 0; | |
| 31 for (var entry of entries) { | |
| 32 switch (entry.name) { | |
| 33 case directUrl: | |
| 34 checkBodySizeFields(entry); | |
| 35 assert_greater_than(entry.transferSize, expectedSize, | |
| 36 'transferSize'); | |
| 37 lowerBound = entry.transferSize - fuzzFactor; | |
| 38 upperBound = entry.transferSize + fuzzFactor; | |
| 39 withRedirectLowerBound = entry.transferSize + minHeaderSize; | |
| 40 ++seenCount; | |
| 41 break; | |
| 42 | |
| 43 case sameOriginRedirect: | |
| 44 checkBodySizeFields(entry); | |
| 45 assert_greater_than(entry.transferSize, withRedirectLowerBound, | |
| 46 'transferSize'); | |
| 47 ++seenCount; | |
| 48 break; | |
| 49 | |
| 50 case crossOriginRedirect: | |
| 51 case mixedRedirect: | |
| 52 case complexRedirect: | |
| 53 checkBodySizeFields(entry); | |
| 54 assert_between_exclusive(entry.transferSize, lowerBound, upperBound, | |
| 55 'transferSize'); | |
| 56 ++seenCount; | |
| 57 break; | |
| 58 | |
| 59 default: | |
| 60 break; | |
| 61 } | |
| 62 } | |
| 63 assert_equals(seenCount, 5, 'seenCount'); | |
| 64 } | |
| 65 | |
| 66 function redirectUrl(redirectSourceOrigin, allowOrigin, targetUrl) { | |
| 67 return redirectSourceOrigin + | |
| 68 '/resources/redirect.php?cors_allow_origin=' + | |
| 69 encodeURIComponent(allowOrigin) + | |
| 70 '&url=' + encodeURIComponent(targetUrl); | |
| 71 } | |
| 72 | |
| 73 promise_test(() => { | |
| 74 // Use a different URL every time so that the cache behaviour does not | |
| 75 // depend on execution order. | |
| 76 directUrl = baseUrl + '?unique=' + Math.random().toString().substring(2) + | |
| 77 '&cors=*'; | |
| 78 sameOriginRedirect = redirectUrl(hostInfo.HTTP_ORIGIN, '*', directUrl); | |
| 79 crossOriginRedirect = redirectUrl(hostInfo.HTTP_REMOTE_ORIGIN, | |
| 80 hostInfo.HTTP_ORIGIN, directUrl); | |
| 81 mixedRedirect = redirectUrl(hostInfo.HTTP_REMOTE_ORIGIN, | |
| 82 hostInfo.HTTP_ORIGIN, sameOriginRedirect); | |
| 83 complexRedirect = redirectUrl(hostInfo.HTTP_ORIGIN, | |
| 84 hostInfo.HTTP_REMOTE_ORIGIN, mixedRedirect); | |
| 85 var eatBody = response => response.arrayBuffer(); | |
| 86 return fetch(directUrl) | |
| 87 .then(eatBody) | |
| 88 .then(() => fetch(sameOriginRedirect)) | |
| 89 .then(eatBody) | |
| 90 .then(() => fetch(crossOriginRedirect)) | |
| 91 .then(eatBody) | |
| 92 .then(() => fetch(mixedRedirect)) | |
| 93 .then(eatBody) | |
| 94 .then(() => fetch(complexRedirect)) | |
| 95 .then(eatBody) | |
| 96 .then(runAsyncTasks) | |
| 97 .then(checkResourceSizes); | |
| 98 }, 'PerformanceResourceTiming sizes Fetch with redirect test'); | |
| 99 </script> | |
| OLD | NEW |