<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: eventCounts.</title>
<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>
<div id='div'>Click me</div>
<button id='button'>Click me</button>
<script>
  promise_test( t => {
    assert_implements(window.EventCounts, "Event Counts isn't supported");
    function testClicks(expectedCount, resolve) {
      const clickCount = performance.eventCounts.get('click');
      if (clickCount < expectedCount) {
        t.step_timeout(function() {
          testClicks(expectedCount, resolve);
        }, 5);
        return;
      }
      assert_equals(clickCount, expectedCount,'Incorrect click count.');
      assert_equals(performance.eventCounts.get('mousedown'), expectedCount, 'Incorrect mousedown count');
      assert_equals(performance.eventCounts.get('mouseup'), expectedCount, 'Incorrect mouseup count.');
      resolve();
    }
    function promiseClicks(expectedCount) {
      return new Promise(resolve => {
        testClicks(expectedCount, resolve)
      });
    }

    return test_driver.click(document.getElementById('div')).then(() => {
      return promiseClicks(1);
    }).then(() => {
      return test_driver.click(document.getElementById('button'));
    }).then(() => {
      return promiseClicks(2);
    }).then(() => {
      return test_driver.click(document.getElementById('div'));
    }).then(() => {
      return promiseClicks(3);
    });
  })
</script>
</html>
