tor-browser

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

larger-text.html (3453B)


      1 <!DOCTYPE HTML>
      2 <meta charset=utf-8>
      3 <title>Largest Contentful Paint: largest text is reported.</title>
      4 
      5 <body>
      6  <script src="/resources/testharness.js"></script>
      7  <script src="/resources/testharnessreport.js"></script>
      8  <style type="text/css">
      9    #text2 {
     10      position: absolute;
     11      width: auto;
     12      white-space: nowrap;
     13    }
     14 
     15  </style>
     16  <!-- These are some text and some tiny images. We care about the largest text. -->
     17  <img id='image1' />
     18  <div id='text1'></div>
     19  <div id='text2'></div>
     20  <img id='image2' />
     21  <script>
     22    const load_image = async (id, url) => {
     23      await new Promise(resolve => {
     24        const image = document.getElementById(id);
     25        image.addEventListener('load', resolve);
     26        image.src = url;
     27      });
     28    }
     29 
     30    const load_text = (id, text) => {
     31      let div = document.getElementById(id);
     32      div.innerHTML = text;
     33    }
     34 
     35    promise_test(async (t) => {
     36      assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented");
     37      let beforeRender = performance.now();
     38 
     39      // Load images and add texts.
     40      await load_image('image1', '/images/lcp-1x1.png');
     41 
     42      load_text('text1', 'This is some text.');
     43 
     44      load_text('text2', 'This is more text so it will be the Largest Contentful Paint!');
     45 
     46      await load_image('image2', '/images/lcp-2x2.png');
     47 
     48      await new Promise(resolve => {
     49        new PerformanceObserver(
     50          (entryList, observer) => {
     51            entryList.getEntries().forEach(entry => {
     52              // The tiny images or text1 could be reported as LCP if it is rendered before text2.
     53              if (entry.id !== 'text2')
     54                return;
     55 
     56              assert_equals(entry.entryType, 'largest-contentful-paint',
     57                'The entry entryType should be largest-contentful-paint.');
     58 
     59              assert_greater_than_equal(entry.renderTime, beforeRender,
     60                'The entry renderTime should be greater than or equal to the beforeRender.');
     61 
     62              assert_greater_than_equal(performance.now(), entry.renderTime,
     63                'The performance.now() timestamp should be greater than or equal to the entry renderTime.');
     64 
     65              assert_approx_equals(entry.startTime, entry.renderTime, 0.001,
     66                'The entry startTime should be equal to renderTime to the precision of 1 millisecond.');
     67 
     68              assert_equals(entry.duration, 0, 'The entry duration should be 0.');
     69 
     70              const div = document.getElementById('text2');
     71 
     72              // The div styling makes it approximate the text size.
     73              assert_greater_than_equal(entry.size, (div.clientHeight - 5) * (div.clientWidth - 5),
     74                'Reported LCP size should not be significantly smaller than the text2 div.');
     75 
     76              assert_less_than_equal(entry.size, (div.clientHeight + 1) * (div.clientWidth + 1),
     77                'Reported LCP size should not be larger than the text2 div.');
     78 
     79              assert_equals(entry.loadTime, 0, 'The entry loadTime should be 0.');
     80 
     81              assert_equals(entry.url, '', 'The entry url should be empty.');
     82 
     83              assert_equals(entry.element, div, 'The entry element should be test2 div.');
     84 
     85              observer.disconnect();
     86 
     87              resolve();
     88            })
     89          }).observe({ type: 'largest-contentful-paint', buffered: true });
     90      });
     91    }, 'Largest Contentful Paint: largest text is reported.');
     92  </script>
     93 </body>