<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: compare timing of two long clicks
</title>
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>
<script>
  /* Timeline:
     Observer starts
     Long click 1
     Long click 2
     Once two clicks have been received by observer, compare the timestamps.
  */
  let timeBeforeFirstClick;
  let timeAfterFirstClick;
  let timeAfterSecondClick;
  let observedEntries = [];
  async_test(function(t) {
    assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');
    new PerformanceObserver(t.step_func(entryList => {
      observedEntries = observedEntries.concat(entryList.getEntries().filter(
        entry => entry.name === 'pointerdown'));
      if (observedEntries.length < 2)
        return;

      assert_not_equals(timeBeforeFirstClick, undefined);
      assert_not_equals(timeAfterFirstClick, undefined);
      assert_not_equals(timeAfterSecondClick, undefined);
      // First click.
      verifyClickEvent(observedEntries[0], 'button');
      assert_between_exclusive(observedEntries[0].processingStart,
          timeBeforeFirstClick,
          timeAfterFirstClick,
          "First click's processingStart");
      assert_greater_than(timeAfterFirstClick, observedEntries[0].startTime,
          "timeAfterFirstClick should be later than first click's start time.");

      // Second click.
      verifyClickEvent(observedEntries[1], 'button');
      assert_between_exclusive(observedEntries[1].processingStart,
          timeAfterFirstClick,
          timeAfterSecondClick,
          "Second click's processingStart");
      assert_greater_than(timeAfterSecondClick, observedEntries[1].startTime,
          "timeAfterSecondClick should be later than second click's start time.");
      t.done();
    })).observe({type: 'event'});
    timeBeforeFirstClick = performance.now();
    clickAndBlockMain('button').then( () => {
      timeAfterFirstClick = performance.now();
      clickAndBlockMain('button').then(() => {
        timeAfterSecondClick = performance.now();
      })
    });
  }, "Event Timing: compare click timings.");
</script>
</html>
