blob: dea81df6b464f3ac3129c0462f32b4b19d968b6e [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<style>
#container div { width: 10px; height: 10px; }
</style>
<script src="/resources/js-test-pre.js"></script>
<div id="container">
</div>
<script>
description('This tests causing resource timing buffer to be full during a style recalc.<br>'
+ 'WebKit should not hit a release assertion by dispatching an event synchronously.');
function loadImagesInAnotherFrame(count)
{
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const doc = iframe.contentDocument;
let loadCount = 0;
for (let i = 0; i < count; i++) {
const image = doc.createElement('img');
image.src = '../../resources/square100.png?resource=' + i;
doc.body.appendChild(image);
image.onload = () => {
loadCount++;
if (loadCount == count)
startTest();
}
}
}
function startTest()
{
evalAndLog('container.innerHTML = ""; resourcetimingbufferfullFired = false');
evalAndLog('performance.setResourceTimingBufferSize(3); performance.clearResourceTimings()');
shouldBe('performance.getEntriesByType("resource").length', '0');
evalAndLog('divsWithBackgroundImages(7); container.getBoundingClientRect()');
shouldBe('resources = performance.getEntriesByType("resource"); resources.length', '3');
shouldBeEqualToString('resources[0].initiatorType', 'css');
shouldBeEqualToString('new URL(resources[0].name).search', '?resource=0');
shouldBeEqualToString('new URL(resources[1].name).search', '?resource=1');
shouldBeEqualToString('new URL(resources[2].name).search', '?resource=2');
shouldBe('resourcetimingbufferfullEventCount', '0');
}
function divsWithBackgroundImages(count)
{
const container = document.getElementById('container');
for (let i = 0; i < count; i++) {
const div = document.createElement('div');
div.style.backgroundImage = `url('../../resources/square100.png?resource=${i}')`;
container.appendChild(div);
}
}
setTimeout(finishJSTest, 3000);
let resourcetimingbufferfullEventCount = 0;
performance.onresourcetimingbufferfull = () => {
resourcetimingbufferfullEventCount++;
debug('');
debug('Inside resourcetimingbufferfull ' + resourcetimingbufferfullEventCount);
if (resourcetimingbufferfullEventCount == 2) {
shouldBe('resources = performance.getEntriesByType("resource"); resources.length', '3');
shouldBeEqualToString('new URL(resources[0].name).search', '?resource=3');
shouldBeEqualToString('new URL(resources[1].name).search', '?resource=4');
shouldBeEqualToString('new URL(resources[2].name).search', '?resource=5');
}
shouldBe('performance.clearResourceTimings(); performance.getEntriesByType("resource").length', '0');
if (resourcetimingbufferfullEventCount < 2)
return;
setTimeout(() => {
debug('');
debug('After resourcetimingbufferfull');
shouldBe('resources = performance.getEntriesByType("resource"); resources.length', '1');
shouldBeEqualToString('resources[0].initiatorType', 'css');
shouldBeEqualToString('new URL(resources[0].name).search', '?resource=6');
finishJSTest();
}, 0);
}
evalAndLog('loadImagesInAnotherFrame(7)');
var jsTestIsAsync = true;
</script>
<script src="/resources/js-test-post.js"></script>
</body>
</html>