| <!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> |