<!DOCTYPE HTML>
<html>
<head onload>
<meta charset="utf-8" />
<title>This test validates that decreasing the buffer size in onresourcetimingbufferfull callback does not result in extra entries being dropped.</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 = 2;
let eventFired = false;
setup(() => {
    // Get the browser into a consistent state.
    clearBufferAndSetSize(resource_timing_buffer_size);
    let resize = () => {
        performance.setResourceTimingBufferSize(resource_timing_buffer_size - 1);
        eventFired = true;
    }
    performance.addEventListener('resourcetimingbufferfull', resize);
});

let overflowTheBuffer = () => {
    return new Promise(resolve => {
        // This resource overflows the entry buffer, and goes into the secondary buffer.
        // Since the buffer size doesn't increase, it will eventually be dropped.
        appendScript('resources/empty_script.js', resolve);
    });
};

let testThatBufferContainsTheRightResources = () => {
    let entries = performance.getEntriesByType('resource');
    assert_equals(entries.length, 2,
                  'Both entries should be stored in resource timing buffer since it decreased its limit only after it overflowed.');
    assert_true(entries[0].name.includes('empty.js'), "empty.js is in the entries buffer");
    assert_true(entries[1].name.includes('empty.js?second'), "empty.js?second is in the entries buffer");
};

promise_test(async () => {
    await fillUpTheBufferWithTwoResources('resources/empty.js');
    await overflowTheBuffer();
    await waitForEventToFire();
    testThatBufferContainsTheRightResources();
}, "Test that decreasing the buffer limit during the callback does not drop entries");
</script>
</body>
</html>
