source-phase-preload.tentative.html (2425B)
1 <!doctype html> 2 <title>Preload source phase modules</title> 3 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <body> 7 <script> 8 function verifyNumberOfDownloads(url, number, allowTransferSizeOfZero = false) { 9 var numDownloads = 0; 10 let absoluteURL = new URL(url, location.href).href; 11 performance.getEntriesByName(absoluteURL).forEach(entry => { 12 if (entry.transferSize > 0 || allowTransferSizeOfZero) { 13 numDownloads++; 14 } 15 }); 16 assert_equals(numDownloads, number, url); 17 } 18 19 function attachAndWaitForLoad(element) { 20 return new Promise((resolve, reject) => { 21 element.onload = resolve; 22 element.onerror = reject; 23 document.body.appendChild(element); 24 }); 25 } 26 27 promise_test(function(t) { 28 var link = document.createElement('link'); 29 link.rel = 'modulepreload'; 30 link.href = 'resources/exported-names.wasm'; 31 return attachAndWaitForLoad(link).then(() => { 32 verifyNumberOfDownloads('resources/exported-names.wasm', 1); 33 let promise = new Promise((resolve) => {window.resolveStatic = resolve}); 34 // Verify that <script> doesn't fetch the module again. 35 var script = document.createElement('script'); 36 script.type = 'module'; 37 script.text = "import source exportedNamesSource from './resources/exported-names.wasm'; window.resolveStatic()"; 38 document.body.appendChild(script); 39 return promise; 40 }).then(() => { 41 verifyNumberOfDownloads('resources/exported-names.wasm', 1); 42 }) 43 }, 'Static source phase import.'); 44 45 promise_test(function(t) { 46 var link = document.createElement('link'); 47 link.rel = 'modulepreload'; 48 link.href = 'resources/execute-start.wasm'; 49 return attachAndWaitForLoad(link).then(() => { 50 verifyNumberOfDownloads('resources/execute-start.wasm', 1); 51 let promise = new Promise((resolve) => {window.resolveDynamic = resolve}); 52 // Verify that <script> doesn't fetch the module again. 53 var script = document.createElement('script'); 54 script.type = 'module'; 55 script.text = "await import.source('./resources/execute-start.wasm'); window.resolveDynamic();"; 56 document.body.appendChild(script); 57 return promise; 58 }).then(() => { 59 verifyNumberOfDownloads('resources/execute-start.wasm', 1); 60 }) 61 }, 'Dynamic source phase import.'); 62 63 </script> 64 </body>