tor-browser

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

test_performance_interactionid_pointerdown.html (2156B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>Test PerformanceEventTiming interactionId for pointerdown without a pointerup</title>
      4 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5 <script src="/tests/SimpleTest/EventUtils.js"></script>
      6 <link rel="stylesheet" href="/tests/SimpleTest/test.css" />
      7 
      8 <div id="target">Click me</div>
      9 
     10 <script>
     11  SimpleTest.waitForExplicitFinish();
     12 
     13  SimpleTest.waitForFocus(async function() {
     14    const target = document.getElementById("target");
     15    let observedEntries = [];
     16    const events = ['pointerdown'];
     17 
     18    const observerPromise = new Promise(resolve => {
     19      new PerformanceObserver((entryList) => {
     20        observedEntries = observedEntries.concat(
     21          entryList.getEntries().filter(entry => events.includes(entry.name))
     22        );
     23 
     24        if (observedEntries.length >= 2) {
     25          resolve();
     26        }
     27      }).observe({ type: "event", buffered: true });
     28    });
     29 
     30    // Block for ~110ms during pointerdown, the threshold is 104ms for event timing entries.
     31    document.getElementById("target").addEventListener("pointerdown", () => {
     32      const start = performance.now();
     33      while (performance.now() - start < 110) {
     34        // Busy loop to block rendering
     35      }
     36    });
     37 
     38    // First: pointerdown with no pointerup.
     39    await synthesizeMouseAtCenter(target, { type: "mousedown", button: 0 });
     40 
     41    // Second: pointerdown with pointerup.
     42    await synthesizeMouseAtCenter(target, { type: "mousedown", button: 0 });
     43    await synthesizeMouseAtCenter(target, { type: "mouseup", button: 0 });
     44 
     45    // Wait for entries to flush.
     46    await observerPromise;
     47    ok(observedEntries.length >= 2, `Expected at least 2 entries, got ${observedEntries.length}`);
     48 
     49    const first = observedEntries[0];
     50    const second = observedEntries[1];
     51 
     52    ok(first.name === "pointerdown", "First should be pointerdown");
     53    ok(second.name === "pointerdown", "Second should be pointerdown");
     54 
     55    is(first.interactionId, 0, "First pointerdown should have interactionId 0");
     56    ok(second.interactionId > 0, "Second pointerdown should have non-zero interactionId");
     57 
     58    SimpleTest.finish();
     59  });
     60 </script>