56 lines
1.9 KiB
HTML
56 lines
1.9 KiB
HTML
<!DOCTYPE html><!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true AsyncFrameScrollingEnabled=true ] -->
|
|
<html>
|
|
<body>
|
|
<script src="../../resources/js-test.js"></script>
|
|
<script>
|
|
|
|
description('This tests that scroll event is dispatched in the update-the-rendering step in the event loop across all relevant frames');
|
|
jsTestIsAsync = true;
|
|
|
|
function createIframe(parentDocument)
|
|
{
|
|
const iframe = document.createElement('iframe');
|
|
iframe.style.width = '100px';
|
|
iframe.style.height = '100px';
|
|
parentDocument.body.appendChild(iframe);
|
|
iframe.contentDocument.body.innerHTML = '<style> body { height: 2000px; } </style><span>hello, world</span>';
|
|
return iframe;
|
|
}
|
|
|
|
function updateLayout(iframe)
|
|
{
|
|
iframe.contentDocument.querySelector("span").getBoundingClientRect();
|
|
}
|
|
|
|
const iframeA = createIframe(document);
|
|
const iframeAA = createIframe(iframeA.contentDocument);
|
|
const iframeB = createIframe(document);
|
|
|
|
const logs = [];
|
|
requestAnimationFrame(() => {
|
|
setTimeout(() => {
|
|
iframeAA.contentDocument.addEventListener('scroll', () => logs.push('AA'));
|
|
iframeA.contentDocument.addEventListener('scroll', () => logs.push('A'));
|
|
iframeB.contentDocument.addEventListener('scroll', () => logs.push('B'));
|
|
|
|
evalAndLog('iframeB.contentWindow.scrollTo(0, 1000); updateLayout(iframeB)');
|
|
evalAndLog('iframeA.contentWindow.scrollTo(0, 1000); updateLayout(iframeA)');
|
|
evalAndLog('iframeAA.contentWindow.scrollTo(0, 1000); updateLayout(iframeAA)');
|
|
shouldBe('logs.length', '0');
|
|
setTimeout(() => {
|
|
requestAnimationFrame(() => {
|
|
debug('After requestAnimationFrame');
|
|
shouldBe('logs.length', '3');
|
|
shouldBeEqualToString('logs.join(", ")', 'A, AA, B');
|
|
iframeA.remove();
|
|
iframeB.remove();
|
|
finishJSTest();
|
|
});
|
|
}, 0);
|
|
}, 0);
|
|
});
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|