| <!DOCTYPE html> | 
 | <html> | 
 | <meta charset=utf-8 /> | 
 | <title>Event Timing: first-input entry should be buffered even without observer</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> | 
 |  async_test(function(t) { | 
 |  if (!window.PerformanceEventTiming) | 
 |  assert_unreached("PerformanceEventTiming is not supported"); | 
 |  | 
 |  function testEntries() { | 
 |  // First callback is not ensured to have the entry. | 
 |  if (performance.getEntriesByType('first-input').length === 0) { | 
 |  t.step_timeout(testEntries, 10); | 
 |  return; | 
 |  } | 
 |  assert_equals(performance.getEntriesByType('first-input').length, 1, | 
 |  "There should be a first-input entry in the performance timeline"); | 
 |  const entry = performance.getEntriesByType('first-input')[0]; | 
 |  assert_equals(entry.name, 'mousedown'); | 
 |  assert_equals(entry.entryType, 'first-input'); | 
 |  assert_greater_than_equal(entry.duration, 104, | 
 |  "The first input was a long one."); | 
 |  t.done(); | 
 |  } | 
 |  clickAndBlockMain('button').then(wait).then(t.step_func(testEntries)); | 
 |  }, | 
 |  "Event Timing: check first-input after onload, observer, click, click." | 
 |  ); | 
 | </script> | 
 | </html> |