<!DOCTYPE html>
<html>
<body>
<script src="/resources/js-test-pre.js"></script>
<script>

description('This tests clearing the resource timing buffer during a resourcetimingbufferfull event.<br>'
    + 'WebKit should not hit a release assertion.');

function startTest()
{
    performance.clearResourceTimings();
    shouldBe('performance.getEntriesByType("resource").length', '0');
    evalAndLog('performance.setResourceTimingBufferSize(2)');
    evalAndLog('fetchImages(3).then(checkInitialState)');
}

let resourceIndex = 0;
async function fetchImages(count)
{
    for (let i = 0; i < count; i++, resourceIndex++)
        await fetch(`../../resources/square100.png?resource=${resourceIndex}`);
}

async function checkInitialState()
{
    shouldBe('originalResources = performance.getEntriesByType("resource"); originalResources.length', '2');
    shouldBeEqualToString('originalResources[0].initiatorType', 'fetch');
    shouldBeEqualToString('new URL(originalResources[0].name).search', '?resource=0');
    shouldBeEqualToString('originalResources[1].initiatorType', 'fetch');
    shouldBeEqualToString('new URL(originalResources[1].name).search', '?resource=1');
    shouldBe('resourcetimingbufferfullEventCount', '0');
}

let resourcetimingbufferfullEventCount = 0;
performance.onresourcetimingbufferfull = () => {
    resourcetimingbufferfullEventCount++;
    debug('');
    debug(`Inside resourcetimingbufferfull ${resourcetimingbufferfullEventCount}`);
    if (resourcetimingbufferfullEventCount == 1) {
        evalAndLog('performance.setResourceTimingBufferSize(1)');
        shouldBe('resourcesAfterShrinkingBuffer = performance.getEntriesByType("resource"); resourcesAfterShrinkingBuffer.length', '2');
        shouldBe('resourcesAfterShrinkingBuffer[0]', 'originalResources[0]');
        shouldBe('resourcesAfterShrinkingBuffer[1]', 'originalResources[1]');
    } else if (resourcetimingbufferfullEventCount == 2) {
        shouldBe('performance.clearResourceTimings(); performance.getEntriesByType("resource").length', '0');
        setTimeout(() => {
            debug('');
            debug('After resourcetimingbufferfull');
            shouldBe('resourcetimingbufferfullEventCount', '2');
            shouldBe('resourcesAfterClearing = performance.getEntriesByType("resource"); resourcesAfterClearing.length', '1');
            shouldBeEqualToString('resourcesAfterClearing[0].initiatorType', 'fetch');
            shouldBeEqualToString('new URL(resourcesAfterClearing[0].name).search', '?resource=2');
            finishJSTest();
        }, 0);
    }
}

var jsTestIsAsync = true;

window.onload = startTest;

</script>
<script src="/resources/js-test-post.js"></script>
</body>
</html>
