tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>