Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 1 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /resource-timing/sizes-cache.any.html - WPT Dashboard Interop Dashboard
- /resource-timing/sizes-cache.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /resource-timing/sizes-cache.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /resource-timing/sizes-cache.any.worker.html - WPT Dashboard Interop Dashboard
// META: global=window,worker
// META: script=/resource-timing/resources/sizes-helper.js
// META: script=/resource-timing/resources/resource-loaders.js
let url = new URL(
'/resource-timing/resources/cacheable-and-validated.py' +
'?content=loremipsumblablabla',
location.href).href;
const bodySize = 19;
const accumulateEntries = () => {
return new Promise(resolve => {
const po = new PerformanceObserver(list => {
resolve(list);
});
po.observe({type: "resource", buffered: true});
});
};
const checkResourceSizes = list => {
const entries = list.getEntriesByName(url);
assert_equals(entries.length, 3, 'Wrong number of entries');
let seenCount = 0;
for (let entry of entries) {
if (seenCount === 0) {
// 200 response
checkSizeFields(entry, bodySize, bodySize + headerSize);
} else if (seenCount === 1) {
// from cache
checkSizeFields(entry, bodySize, 0);
} else if (seenCount === 2) {
// 304 response
checkSizeFields(entry, bodySize, headerSize);
} else {
assert_unreached('Too many matching entries');
}
++seenCount;
}
};
promise_test(() => {
// Use a different URL every time so that the cache behaviour does not
// depend on execution order.
url = load.cache_bust(url);
const eatBody = response => response.arrayBuffer();
const mustRevalidate = {headers: {'Cache-Control': 'max-age=0'}};
return fetch(url)
.then(eatBody)
.then(() => fetch(url))
.then(eatBody)
.then(() => fetch(url, mustRevalidate))
.then(eatBody)
.then(accumulateEntries)
.then(checkResourceSizes);
}, 'PerformanceResourceTiming sizes caching test');