node/test/fixtures/wpt/resource-timing/sizes-cache.any.js
legendecas 364c0e196c
perf_hooks: fix webperf idlharness
1. Enforce receiver checks on IDL interfaces.
2. Avoid prototype manipulation on constructing IDL interfaces with
   `ReflectConstruct`.
3. `defineReplaceableAttribute` should create IDL getter/setter.
4. Corrected `PerformanceResourceTiming` to inherit the public interface
   `PerformanceEntry` instead of the internal interface
   `InternalPerformanceResourceTiming`.
5. `detail` is not a specified attribute on `PerfomanceEntry`. Node.js
   specific extensions are moved to a subclass of `PerformanceEntry` as
   `PerformanceNodeEntry`.

PR-URL: https://github.com/nodejs/node/pull/44483
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2022-10-04 00:55:58 +08:00

55 lines
1.6 KiB
JavaScript

// 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');