loaf-script-block.html (2783B)
1 <!DOCTYPE HTML> 2 <meta charset=utf-8> 3 <title>Long Animation Frame Timing: script blocks</title> 4 <meta name="timeout" content="long"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="resources/utils.js"></script> 9 <script> 10 window.generate_loaf_now = window.busy_wait 11 </script> 12 <script src="resources/busy.js?from-parser"></script> 13 <script> 14 delete window.generate_loaf_now; 15 </script> 16 <body> 17 <h1>Long Animation Frame: script blocks</h1> 18 <div id="log"></div> 19 <script> 20 promise_test(async t => { 21 await new Promise(resolve => { 22 new PerformanceObserver((list, observer) => { 23 if (list.getEntries().find(loaf => loaf.scripts.some(script => 24 script.invoker === new URL("resources/busy.js?from-parser", location.href).href))) { 25 observer.disconnect(); 26 resolve(); 27 } 28 }).observe({type: "long-animation-frame", buffered: true}); 29 }) 30 }, "Parser-inserted classic script should generate a long script"); 31 32 test_self_script_block(t => { 33 const script = document.createElement("script"); 34 script.type = "module"; 35 script.innerHTML = `window.generate_loaf_now()`; 36 document.body.appendChild(script); 37 }, location.href, "module-script"); 38 39 test_self_script_block(t => { 40 const script = document.createElement("script"); 41 script.src = "resources/busy.js"; 42 document.body.appendChild(script); 43 }, new URL("resources/busy.js", location.href).href, "classic-script"); 44 45 test_self_script_block(t => { 46 const uid = token(); 47 const script = document.createElement("script"); 48 script.src = `resources/busy.js?token=${uid}`; 49 script.type = "module"; 50 document.body.appendChild(script); 51 }, new URL("resources/busy.js", location.href).href, "module-script"); 52 53 test_self_script_block(t => { 54 const uid = token(); 55 const script = document.createElement("script"); 56 script.type = "module"; 57 script.innerHTML = `import("./resources/busy.js?import=${uid}");`; 58 document.body.appendChild(script); 59 }, new URL("resources/busy.js?import", location.href).href, "module-script"); 60 61 const busy_wait_str = ` (function() { 62 generate_loaf_now(); 63 })() 64 `; 65 66 const data_url = `data:text/javascript;charset=utf-8,${encodeURIComponent(busy_wait_str)}`; 67 68 test_self_script_block(t => { 69 const script = document.createElement("script"); 70 script.src = data_url; 71 document.body.appendChild(script); 72 }, "data:", "classic-script"); 73 74 const blob_url = URL.createObjectURL(new Blob([busy_wait_str], {type: "text/javascript"})); 75 76 test_self_script_block(t => { 77 const script = document.createElement("script"); 78 script.src = blob_url; 79 document.body.appendChild(script); 80 }, blob_url, "classic-script"); 81 </script> 82 </body>