<!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/resource-loaders.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);
    performance.addEventListener('resourcetimingbufferfull', () => { assert_unreached("resourcetimingbufferfull should not fire")});
});

let overflowTheBuffer = () => {
    // These resources overflow the entry buffer, and go into the secondary buffer.
    xhrScript('resources/empty.js?xhr2');
    xhrScript('resources/empty.js?xhr3');
    performance.clearResourceTimings();
    performance.setResourceTimingBufferSize(3);
    xhrScript('resources/empty.js?xhr4');
    window.entriesAfterAddition = performance.getEntriesByType('resource');
};

let testThatBufferContainsTheRightResources = () => {
    let entries = performance.getEntriesByType('resource');
    assert_equals(entries.length, 3,
                  'the last 3 resources should be in the buffer, since the first one was cleared');
    assert_true(entries[0].name.includes('empty.js?xhr2'), "empty.js?xhr2 is in the entries buffer");
    assert_true(entries[1].name.includes('empty.js?xhr3'), "empty.js?xhr3 is in the entries buffer");
    assert_true(entries[2].name.includes('empty.js?xhr4'), "empty.js?xhr4 is in the entries buffer");
    assert_equals(entriesAfterAddition.length, 0, "No entries should have been added to the primary buffer before the task to 'fire a buffer full event'.");
};

promise_test(async () => {
    await fillUpTheBufferWithSingleResource("resources/empty.js");
    overflowTheBuffer();
    await waitForNextTask();
    testThatBufferContainsTheRightResources();
}, "Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one");
</script>
</body>
</html>
