| <!DOCTYPE HTML> | 
 | <html> | 
 | <head onload> | 
 | <meta charset="utf-8" /> | 
 | <title>This test validates that synchronously adding entries in onresourcetimingbufferfull callback results in these entries being properly handled.</title> | 
 | <link rel="help" href="http://www.w3.org/TR/resource-timing/#performanceresourcetiming"/> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <script src="resources/buffer-full-utilities.js"></script> | 
 | </head> | 
 | <body> | 
 | <script> | 
 | const resource_timing_buffer_size = 1; | 
 |  | 
 | setup(() => { | 
 |  // Get the browser into a consistent state. | 
 |  clearBufferAndSetSize(resource_timing_buffer_size); | 
 | }); | 
 |  | 
 | let overflowTheBufferAndWaitForEvent = () => { | 
 |  return new Promise(resolve => { | 
 |  var add_entry = () => { | 
 |  performance.setResourceTimingBufferSize(resource_timing_buffer_size + 2); | 
 |  xhrScript("resources/empty.js?xhr"); | 
 |  resolve(); | 
 |  } | 
 |  performance.addEventListener('resourcetimingbufferfull', add_entry); | 
 |  // This resource overflows the entry buffer, and goes into the secondary buffer. | 
 |  appendScript('resources/empty_script.js'); | 
 |  }); | 
 | }; | 
 |  | 
 | let testThatBufferContainsTheRightResources = () => { | 
 |  let entries = performance.getEntriesByType('resource'); | 
 |  assert_equals(entries.length, 3, | 
 |  'All entries should be stored in resource timing buffer since its increases size once it overflows.'); | 
 |  assert_true(entries[0].name.includes('empty.js'), "empty.js is in the entries buffer"); | 
 |  assert_true(entries[1].name.includes('empty_script.js'), "empty_script.js is in the entries buffer"); | 
 |  assert_true(entries[2].name.includes('empty.js?xhr'), "empty.js?xhr is in the entries buffer"); | 
 | }; | 
 |  | 
 | promise_test(async () => { | 
 |  await fillUpTheBufferWithSingleResource("resources/empty.js"); | 
 |  await overflowTheBufferAndWaitForEvent(); | 
 |  await waitForNextTask(); | 
 |  testThatBufferContainsTheRightResources(); | 
 | }, "Test that entries synchronously added to the buffer during the callback don't get dropped if the buffer is increased"); | 
 | </script> | 
 | </body> | 
 | </html> |