tor-browser

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

buffered-flag.html (1871B)


      1 <!DOCTYPE html>
      2 <html>
      3 <meta charset=utf-8 />
      4 <title>Event Timing: PerformanceObserver sees entries with buffered flag</title>
      5 <button id='button'>Generate a 'click' event</button>
      6 <script src=/resources/testharness.js></script>
      7 <script src=/resources/testharnessreport.js></script>
      8 <script src=/resources/testdriver.js></script>
      9 <script src=/resources/testdriver-vendor.js></script>
     10 <script src=resources/event-timing-test-utils.js></script>
     11 <script>
     12  let firstInputSeen = false;
     13  let eventSeen = false;
     14  async_test(t => {
     15    assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');
     16    const validateEntry = t.step_func(entry => {
     17      if (entry.entryType === 'first-input')
     18        firstInputSeen = true;
     19      else if (entry.entryType === 'event')
     20        eventSeen = true;
     21      else
     22        assert_unreached('Should only observe Event Timing entries!');
     23    });
     24    // First observer creates second in callback to ensure the entry has been dispatched by the time
     25    // the second observer begins observing.
     26    new PerformanceObserver((list, obs) => {
     27      list.getEntries().forEach(validateEntry);
     28      if (!firstInputSeen || !eventSeen)
     29        return;
     30 
     31      obs.disconnect();
     32      firstInputSeen = false;
     33      eventSeen = false;
     34      // Second observer requires 'buffered: true' to see entries.
     35      const bufferedObserver = new PerformanceObserver(entryList => {
     36          entryList.getEntries().forEach(validateEntry);
     37          if (firstInputSeen && eventSeen)
     38            t.done();
     39      });
     40      bufferedObserver.observe({type: "event", buffered: true});
     41      bufferedObserver.observe({type: 'first-input', buffered: true});
     42    }).observe({entryTypes: ['event', 'first-input']});
     43    clickAndBlockMain('button');
     44  }, "PerformanceObserver with buffered flag sees previous Event Timing entries");
     45 </script>
     46 </html>