tor-browser

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

fetchpriority-urgency.h2.html (7008B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <meta charset="UTF-8">
      5  <title>fetchpriority affects the urgency parameter of HTTP</title>
      6  <script src="/resources/testharness.js"></script>
      7  <script src="/resources/testharnessreport.js"></script>
      8  <script src="/common/utils.js"></script>
      9  <script src="support/priority-dependent-content.js"></script>
     10  <link rel="stylesheet" href="support/resources/priority-dependent-content.py?as-type=style&resource-id=style_low" fetchpriority="low">
     11  <link rel="stylesheet" href="support/resources/priority-dependent-content.py?as-type=style&resource-id=style_high" fetchpriority="high">
     12  <link rel="stylesheet" href="support/resources/priority-dependent-content.py?as-type=style&resource-id=style_auto" fetchpriority="auto">
     13  <link rel="stylesheet" href="support/resources/priority-dependent-content.py?as-type=style&resource-id=style_default">
     14  <script src="support/resources/priority-dependent-content.py?as-type=script&resource-id=script_low" fetchpriority="low"></script>
     15  <script src="support/resources/priority-dependent-content.py?as-type=script&resource-id=script_high" fetchpriority="high"></script>
     16  <script src="support/resources/priority-dependent-content.py?as-type=script&resource-id=script_auto" fetchpriority="auto" ></script>
     17  <script src="support/resources/priority-dependent-content.py?as-type=script&resource-id=script_default"></script>
     18 </head>
     19 <body>
     20  <img src="support/resources/priority-dependent-content.py?as-type=image&resource-id=image_low" id="image_low" fetchpriority="low"/>
     21  <img src="support/resources/priority-dependent-content.py?as-type=image&resource-id=image_high" id="image_high" fetchpriority="high"/>
     22  <img src="support/resources/priority-dependent-content.py?as-type=image&resource-id=image_auto" id="image_auto" fetchpriority="auto"/>
     23  <img src="support/resources/priority-dependent-content.py?as-type=image&resource-id=image_default" id="image_default"/>
     24  <div id="urgency_square_style_low"></div>
     25  <div id="urgency_square_style_high"></div>
     26  <div id="urgency_square_style_auto"></div>
     27  <div id="urgency_square_style_default"></div>
     28  <span id="glyph_font_low" style="font: 10px font_family_low">M</span>
     29  <span id="glyph_font_high" style="font: 10px font_family_high">M</span>
     30  <span id="glyph_font_auto" style="font: 10px font_family_auto">M</span>
     31  <span id="glyph_font_default" style="font: 10px font_family_default">M</span>
     32 
     33  <script>
     34    onload = () => {
     35        test(function() {
     36            // See kExpectedRequestsOfInitialLoad from image-test-data.js and
     37            // nsHttpHandler::UrgencyFromCoSFlags.
     38            let normalUrgency = 4;
     39            assert_equals(getElementUrgencyFromSize("image_low"), normalUrgency + 2);
     40            assert_equals(getElementUrgencyFromSize("image_high"), normalUrgency - 1);
     41            assert_equals(getElementUrgencyFromSize("image_auto"), normalUrgency + 1);
     42            assert_equals(getElementUrgencyFromSize("image_default"), normalUrgency + 1);
     43        }, "Adjustment of urgency parameter for images");
     44 
     45        test(function() {
     46            // See kExpectedRequestsForScriptsInHead from script-test-data.js
     47            // and nsHttpHandler::UrgencyFromCoSFlags.
     48            let normalUrgency = 2;
     49            assert_equals(getScriptUrgency("script_low"), normalUrgency + 1);
     50            assert_equals(getScriptUrgency("script_high"), normalUrgency - 1);
     51            assert_equals(getScriptUrgency("script_auto"), normalUrgency);
     52            assert_equals(getScriptUrgency("script_default"), normalUrgency);
     53        }, "Adjustment of urgency parameter for scripts");
     54 
     55        test(function() {
     56            // See kExpectedRequestsOfLoadStylesheet from link-tests-data.js
     57            // and nsHttpHandler::UrgencyFromCoSFlags.
     58            let normalUrgency = 2;
     59            assert_equals(getStyleUrgency("style_low"), normalUrgency);
     60            assert_equals(getStyleUrgency("style_high"), normalUrgency - 2);
     61            assert_equals(getStyleUrgency("style_auto"), normalUrgency);
     62            assert_equals(getStyleUrgency("style_default"), normalUrgency);
     63        }, "Adjustment of urgency parameter for styles");
     64 
     65        promise_test(async function() {
     66            async function fetchAndExtractUrgency(priority) {
     67                let request_init;
     68                if (priority !== "default") {
     69                    request_init = {priority: priority};
     70                }
     71                let response = await fetch(`support/resources/priority-dependent-content.py?as-type=text&resource-id=fetch_${priority}`, request_init);
     72                return getResourceUrgencyFromRawText(await response.text());
     73            }
     74 
     75            // See kExpectedRequestsOfFetchAPI from link-tests-data.js
     76            // and nsHttpHandler::UrgencyFromCoSFlags.
     77            let normalUrgency = 4;
     78            assert_equals(await fetchAndExtractUrgency("low"), normalUrgency + 1);
     79            assert_equals(await fetchAndExtractUrgency("high"), normalUrgency - 1);
     80            assert_equals(await fetchAndExtractUrgency("auto"), normalUrgency);
     81            assert_equals(await fetchAndExtractUrgency("default"), normalUrgency);
     82        }, "Adjustment of urgency parameter for global fetch");
     83 
     84        promise_test(async function() {
     85            async function loadFontAndExtractUrgency(priority) {
     86                let link = document.createElement("link");
     87                if (priority != "default")
     88                    link.fetchPriority = priority;
     89                link.rel = "preload";
     90                link.as = "font";
     91                link.crossOrigin = "";
     92                await new Promise((resolve, reject) => {
     93                    link.onload = resolve;
     94                    link.onerror = reject;
     95                    link.href = `support/resources/priority-dependent-content.py?as-type=font&resource-id=font_${priority}_${token()}&use-cache=true`;
     96                    document.body.appendChild(link);
     97                });
     98                let response = await fetch(link.href, {cache: "force-cache"});
     99                let font_face = new FontFace(`font_family_${priority}`,
    100                                             await response.arrayBuffer());
    101                document.fonts.add(font_face);
    102                let size = document.getElementById(`glyph_font_${priority}`).getBoundingClientRect().width;
    103                return convertSizeToUrgency(size);
    104            }
    105            // See kExpectedRequestsOfLinkPreloadFont from link-tests-data.js
    106            // and nsHttpHandler::UrgencyFromCoSFlags.
    107            let normalUrgency = 2;
    108            assert_equals(await loadFontAndExtractUrgency("low"), normalUrgency + 2);
    109            assert_equals(await loadFontAndExtractUrgency("high"), normalUrgency - 1);
    110            assert_equals(await loadFontAndExtractUrgency("auto"), normalUrgency);
    111            assert_equals(await loadFontAndExtractUrgency("default"), normalUrgency);
    112        }, "Adjustment of urgency parameter for fonts");
    113    }
    114  </script>
    115 </body>
    116 </html>