modulepreload-as.html (3812B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <link rel="modulepreload" href="resources/module1.js?empty-string" as="" data-as=""> 6 <link rel="modulepreload" href="resources/module1.js?audio" as="audio" data-as="audio"> 7 <link rel="modulepreload" href="resources/module1.js?audioworklet" as="audioworklet" data-as="audioworklet"> 8 <link rel="modulepreload" href="resources/module1.js?document" as="document" data-as="document"> 9 <link rel="modulepreload" href="resources/module1.js?embed" as="embed" data-as="embed"> 10 <link rel="modulepreload" href="resources/module1.js?font" as="font" data-as="font"> 11 <link rel="modulepreload" href="resources/module1.js?frame" as="frame" data-as="frame"> 12 <link rel="modulepreload" href="resources/module1.js?iframe" as="iframe" data-as="iframe"> 13 <link rel="modulepreload" href="resources/module1.js?image" as="image" data-as="image"> 14 <link rel="modulepreload" href="resources/module1.js?json" as="json" data-as="json"> 15 <link rel="modulepreload" href="resources/module1.js?manifest" as="manifest" data-as="manifest"> 16 <link rel="modulepreload" href="resources/module1.js?object" as="object" data-as="object"> 17 <link rel="modulepreload" href="resources/module1.js?paintworklet" as="paintworklet" data-as="paintworklet"> 18 <link rel="modulepreload" href="resources/module1.js?report" as="report" data-as="report"> 19 <link rel="modulepreload" href="resources/module1.js?script" as="script" data-as="script"> 20 <link rel="modulepreload" href="resources/module1.js?serviceworker" as="serviceworker" data-as="serviceworker"> 21 <link rel="modulepreload" href="resources/module1.js?sharedworker" as="sharedworker" data-as="sharedworker"> 22 <link rel="modulepreload" href="resources/module1.js?style" as="style" data-as="style"> 23 <link rel="modulepreload" href="resources/module1.js?track" as="track" data-as="track"> 24 <link rel="modulepreload" href="resources/module1.js?video" as="video" data-as="video"> 25 <link rel="modulepreload" href="resources/module1.js?webidentity" as="webidentity" data-as="webidentity"> 26 <link rel="modulepreload" href="resources/module1.js?worker" as="worker" data-as="worker"> 27 <link rel="modulepreload" href="resources/module1.js?xslt" as="xslt" data-as="xslt"> 28 <link rel="modulepreload" href="resources/module1.js?fetch" as="fetch" data-as="fetch"> 29 <link rel="modulepreload" href="resources/module1.js?invalid-dest" as="invalid-dest" data-as="invalid-dest"> 30 <link rel="modulepreload" href="resources/module1.js?iMaGe" as="iMaGe" data-as="iMaGe"> 31 <link rel="modulepreload" href="resources/module1.js?sCrIpT" as="sCrIpT" data-as="sCrIpT"> 32 <body> 33 <script> 34 // compared to modulepreload.html, this tests behavior when elements are 35 // initially on an HTML page instead of being added by JS 36 37 const scriptLikes = [ 38 'audioworklet', 39 'paintworklet', 40 'script', 41 'serviceworker', 42 'sharedworker', 43 'worker', 44 ]; 45 46 const goodAsValues = ['', 'invalid-dest', 'sCrIpT', ...scriptLikes]; 47 48 for (const link of document.querySelectorAll('link')) { 49 const asValue = link.dataset.as; // don't depend on "as" attribute reflection 50 const good = goodAsValues.includes(asValue); 51 52 // promise tests are queued sequentially, so create the promise here to 53 // ensure we don't miss the error event 54 const promise = new Promise((resolve, reject) => { 55 link.onload = good ? resolve : reject; 56 link.onerror = good ? reject : resolve; 57 }); 58 59 promise_test(() => promise.then(() => { 60 const downloads = performance 61 .getEntriesByName(new URL(link.href, location.href)) 62 .filter(entry => entry.transferSize > 0) 63 .length; 64 assert_equals(downloads, good ? 1 : 0); 65 66 }), `Modulepreload with as="${asValue}"`); 67 } 68 </script>