70 lines
1.6 KiB
HTML
70 lines
1.6 KiB
HTML
<!DOCTYPE html><!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
|
|
<html>
|
|
<body>
|
|
<style>
|
|
.container > div { width: 10px; height: 10px; overflow: scroll; }
|
|
</style>
|
|
<p>This tests scheduling a scroll event on an element then removing the element.<br>WebKit should not collect its JS wrappers.</p>
|
|
<pre id="result"></pre>
|
|
<div class="container"></div>
|
|
<script src="../../resources/gc.js"></script>
|
|
<script>
|
|
|
|
if (window.testRunner) {
|
|
testRunner.waitUntilDone();
|
|
testRunner.dumpAsText();
|
|
}
|
|
|
|
const logs = [];
|
|
let currentNumber = 0;
|
|
function scheduleScrollEvents(count)
|
|
{
|
|
let container = document.querySelector('.container');
|
|
for (let i = 0; i < count; i++) {
|
|
const div = document.createElement('div');
|
|
div.innerHTML = '<p>hello, world<br>this is a test</p>';
|
|
container.appendChild(div);
|
|
div.liveNumber = currentNumber;
|
|
div.addEventListener('scroll', log);
|
|
currentNumber++;
|
|
}
|
|
|
|
for (const div of container.children)
|
|
div.scrollTo(10, 10);
|
|
|
|
container.textContent = '';
|
|
}
|
|
|
|
function log()
|
|
{
|
|
logs.push(this.liveNumber);
|
|
}
|
|
|
|
function checkLogs()
|
|
{
|
|
let failed = false;
|
|
for (let i = 0; i < logs.length; ++i) {
|
|
if (logs[i] != i) {
|
|
result.textContent += `FAIL at ${i}: ${logs[i]}\n`;
|
|
failed = true;
|
|
}
|
|
}
|
|
if (!failed)
|
|
result.textContent = 'PASS';
|
|
}
|
|
|
|
for (let i = 0; i < 5; ++i) {
|
|
scheduleScrollEvents(20);
|
|
gc();
|
|
}
|
|
|
|
requestAnimationFrame(() => {
|
|
checkLogs();
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
});
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|