<!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>
