<!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(() => {
    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.setResourceTimingBufferSize(3);
};

let testThatBufferContainsTheRightResources = () => {
        let entries = performance.getEntriesByType('resource');
        assert_equals(entries.length, 3,
                      'All resources should be in the buffer, since its size was increased');
        assert_true(entries[0].name.includes('empty.js'), "empty.js?xhr2 is in the entries buffer");
        assert_true(entries[1].name.includes('empty.js?xhr2'), "empty.js?xhr3 is in the entries buffer");
        assert_true(entries[2].name.includes('empty.js?xhr3'), "empty.js?xhr3 is in the entries buffer");
};

promise_test(async () => {
    await fillUpTheBufferWithSingleResource("resources/empty.js");
    overflowTheBuffer();
    await waitForNextTask();
    testThatBufferContainsTheRightResources();
}, "Test that overflowing the buffer and immediately increasing its limit does not trigger the resourcetimingbufferfull event");
</script>
</body>
</html>
