blob: cad147ff0476a185dff5ff9aa6e60aae7dab03c0 [file] [log] [blame]
<!DOCTYPE html>
<head>
<title>Cobalt HTTP Cache Test</title>
<script src="black_box_js_test_utils.js"></script>
<script>
var NUMBER_OF_CACHE_ELEMENTS = Number.MAX_SAFE_INTEGER;
var loadTimes = new Map();
var cacheSize = 0;
let url = window.location.search.substring(1);
let urlVars = url.split('&');
for (var i = 0; i < urlVars.length; i++) {
if (urlVars[i].includes('=')) {
var param = urlVars[i].split('=');
loadTimes.set(param[0], param[1]);
}
}
var initialLoadTime = loadTimes.has('initialLoadTime') ?
loadTimes.get('initialLoadTime') : new Date().getTime();
var reloadUrl = 'http_cache.html?initialLoadTime=' + initialLoadTime;
function measureLoadTime(element, initialTime) {
cacheSize++;
onLoadTime = new Date().getTime() - initialTime;
if (loadTimes.has(element)) {
// TODO: change to using transferSize once its implemented (b/231475964)
// Load times might give false positives, but should rarely give false
// negatives (i.e. this may pass when caching didn't actually occur,
// but will likely never fail when caching does occur).
console.log(element + ' first load time: ' + loadTimes.get(element));
console.log(element + ' second load time: ' + onLoadTime);
assertTrue(onLoadTime <= loadTimes.get(element));
if (cacheSize == NUMBER_OF_CACHE_ELEMENTS) {
onEndTest();
}
} else {
reloadUrl += '&' + element + '=' + onLoadTime;
if (cacheSize == NUMBER_OF_CACHE_ELEMENTS) {
setTimeout(() => { window.location.href = reloadUrl; }, 100);
}
}
}
// Add elements after window loads. In Cobalt, adding the onload property
// directly to an html tag doesn't execute.
window.onload = function () {
NUMBER_OF_CACHE_ELEMENTS = document.getElementsByTagName('div').length;
// Append the timestamp string to each resource url to force reload the
// files the first time the page is accessed each test run. The load time
// is recorded on the first run and passed to the second run to ensure
// the same url is used both times.
let timestampString = '?t=' + initialLoadTime;
let initialJsTime = new Date().getTime();
let script = document.createElement('script');
script.onload = () => {
measureLoadTime('javascript', initialJsTime);
};
script.onerror = () => {
notReached();
};
script.src = 'http_cache_test_resources/http_cache.js' + timestampString;
document.getElementById('js_div').appendChild(script);
let initialImgTime = new Date().getTime();
let image = document.createElement('img');
image.onload = () => {
measureLoadTime('image', initialImgTime);
};
image.onerror = (e) => {
notReached();
};
image.src = 'http_cache_test_resources/cobalt_logo.png' + timestampString;
image.alt = 'falied to load image';
document.getElementById('image_div').appendChild(image);
let initialCssTime = new Date().getTime();
let css = document.createElement('link');
css.onload = () => {
measureLoadTime('css', initialCssTime);
};
css.onerror = (e) => {
notReached();
};
css.rel = 'stylesheet';
css.href = 'http_cache_test_resources/http_cache.css' + timestampString;
document.getElementById('css_div').appendChild(css);
}
</script>
</head>
<body>
<h1>HTTP CACHE TEST</h1>
<div id="js_div">
<h2>Loading JS Script</h2>
</div>
<div id="image_div">
<h2>Loading image file (png)</h2>
</div>
<div id="css_div">
<h2>Loading CSS file</h2>
</div>
</body>