tor-browser

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

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>