tor-browser

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

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>