| <!DOCTYPE html><!-- webkit-test-runner [ experimental:ResizeObserverEnabled=true ] --> |
| <html> |
| <body> |
| <p>This tests that JS wrappers of targets removed from document to be delivered to an resize observer do not get collected.</p> |
| <pre id="log"></pre> |
| <script src="../resources/gc.js"></script> |
| <script> |
| |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| const targetCount = 5; |
| const iterationCount = 10; |
| var deadCount = 0; |
| |
| async function runAll() { |
| if (window.testRunner) |
| testRunner.waitUntilDone(); |
| |
| for (let i = 0; i < iterationCount; ++i) { |
| runTest(); |
| gc(); |
| await new Promise((resolve) => requestAnimationFrame(resolve)) |
| } |
| |
| document.getElementById('log').textContent = (deadCount ? `FAIL - ${deadCount} targets lost JS wrappers` : 'PASS') + '\n'; |
| |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function runTest() { |
| document.querySelectorAll('div').forEach(target => target.remove()); |
| |
| for (let i = 0; i < targetCount; ++i) { |
| let target = document.createElement('div'); |
| target.myState = 'live'; |
| document.body.appendChild(target); |
| } |
| |
| document.querySelectorAll('div').forEach(target => observer.observe(target)); |
| } |
| |
| const observer = new ResizeObserver(entries => { |
| for (const entry of entries) { |
| if (entry.target.myState != 'live') |
| deadCount++; |
| } |
| }); |
| |
| runAll(); |
| |
| </script> |
| </body> |
| </html> |