Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<title>Makes sure that only matching types are loaded</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/preload/resources/preload_helper.js"></script>
<script src="/common/media.js"></script>
<script>
const hrefs = {
png: '/common/square.png',
svg: '/images/pattern.svg',
ttf: '/fonts/Ahem.ttf',
script: 'resources/dummy.js',
css: 'resources/dummy.css',
track: '/media/foo.vtt',
json: '/common/dummy.json',
}
function test_type_with_destination(type, as, resourceType, expect) {
const timeoutMillis = 400;
promise_test(async t => {
const link = document.createElement('link');
link.rel = 'preload';
link.href = hrefs[resourceType];
link.as = as;
if (type)
link.type = type;
const result = await new Promise(resolve => {
link.addEventListener('load', () => resolve('load'));
link.addEventListener('error', () => resolve('error'));
t.step_timeout(() => resolve('timeout'), timeoutMillis);
document.head.appendChild(link);
})
assert_equals(result, expect);
}, `Preload with {as=${as}; type=${type}} should ${expect} when retrieved resource is a ${resourceType}`);
}
test_type_with_destination('', 'image', 'png', 'load');
test_type_with_destination('image/png', 'image', 'svg', 'load');
test_type_with_destination('image/png', 'image', 'png', 'load');
test_type_with_destination('image/unknown', 'image', 'png', 'timeout');
test_type_with_destination('not-a-mime-type', 'image','png', 'timeout');
test_type_with_destination('', 'font', 'ttf', 'load');
test_type_with_destination('font/ttf', 'font', 'ttf', 'load');
test_type_with_destination('font/otf', 'font', 'ttf', 'load');
test_type_with_destination('font/not-a-font', 'font', 'ttf', 'timeout');
test_type_with_destination('not-a-mime', 'font', 'ttf', 'timeout');
test_type_with_destination('', 'script', 'script', 'load');
for (const type of [
'application/ecmascript', 'application/javascript', 'application/x-ecmascript',
'application/x-javascript', 'text/ecmascript', 'text/javascript', 'text/javascript1.0',
'text/javascript1.1', 'text/javascript1.2', 'text/javascript1.3', 'text/javascript1.4',
'text/javascript1.5', 'text/jscript', 'text/livescript', 'text/x-ecmascript', 'text/x-javascript'
]) {
test_type_with_destination(type, 'script', 'script', 'load');
}
test_type_with_destination('text/not-javascript', 'script', 'script', 'timeout');
test_type_with_destination('not-a-mime', 'script', 'script', 'timeout');
test_type_with_destination('text/css', 'style', 'css', 'load');
test_type_with_destination('application/css', 'style', 'css', 'timeout');
test_type_with_destination('text/plain', 'style', 'css', 'timeout');
test_type_with_destination('text/vtt', 'track', 'track', 'load');
test_type_with_destination('text/plain', 'track', 'track', 'timeout');
test_type_with_destination('not-a-mime', 'track', 'track', 'timeout');
test_type_with_destination('application/json', 'json', 'json', 'load');
test_type_with_destination('text/json', 'json', 'json', 'load');
test_type_with_destination('application/geo+json', 'json', 'json', 'load');
test_type_with_destination('text/plain', 'json', 'json', 'timeout');
test_type_with_destination('application/javascript', 'json', 'json', 'timeout');
</script>