blob: 33b2fa0e9569dc963d96f42f5fac94b910189d04 [file] [log] [blame]
// This test code is shared between resource-timing-sizes-xhr-fetch.html
// and resource-timing-sizes-xhr-fetch-worker.html
if (typeof document === 'undefined') {
importScripts('/resources/testharness.js');
}
const XHR_SYNC_URL = '/resources/dummy.xml?t=syncxhr';
const XHR_ASYNC_URL = '/resources/dummy.xml?t=asyncxhr';
const FETCH_URL = '/resources/dummy.xml?t=fetch';
var sizes = {};
sizes[XHR_SYNC_URL] = sizes[XHR_ASYNC_URL] = sizes[FETCH_URL] = 60;
const totalAsyncResources = 2;
var seenAsyncResources = 0;
var seenResources = 0;
var t = async_test('PerformanceResourceTiming sizes XHR and Fetch test');
function asyncResourceLoaded(eventOrText) {
++seenAsyncResources;
if (seenAsyncResources == totalAsyncResources)
setTimeout(t.step_func(checkResourceSizes), 0);
}
function checkSizeFields(entry, expectedSize) {
assert_equals(entry.decodedBodySize, expectedSize, 'decodedBodySize');
assert_equals(entry.encodedBodySize, expectedSize, 'encodedBodySize');
// Because of caching, the value of transferSize is sensitive to the
// execution order of layout tests, and so the result of the test should not
// depend on it.
assert_true(entry.transferSize !== undefined,
'transferSize should be defined');
}
function checkResourceSizes() {
var expectedResources = Object.keys(sizes).length;
var entries = performance.getEntriesByType('resource');
for (var entry of entries) {
var urlObject = new URL(entry.name);
var urlKey = urlObject.pathname + urlObject.search;
var size = sizes[urlKey];
if (size) {
checkSizeFields(entry, size);
++seenResources;
}
}
assert_equals(seenResources, expectedResources,
'seenResources');
t.done();
}
function runTest() {
var sync = new XMLHttpRequest();
sync.open('GET', XHR_SYNC_URL, false);
sync.send();
var async = new XMLHttpRequest();
async.open('GET', XHR_ASYNC_URL);
async.onload = t.step_func(asyncResourceLoaded);
async.onerror = t.step_func(() => assert_unreached('Async XHR error'));
async.send();
fetch(FETCH_URL)
.then(response => response.text())
.then(t.step_func(asyncResourceLoaded))
.catch(t.step_func(() => assert_unreached('Fetch error')));
}
runTest();
done();