| <!DOCTYPE html><!-- webkit-test-runner [ IntersectionObserverEnabled=true ] --> |
| <html> |
| <body> |
| <pre id="log">This tests observing an element with an IntersectionObserver and removing the element from the document. |
| The element should become eligible for GC at some point. |
| |
| </pre> |
| <script src="../resources/gc.js"></script> |
| <script> |
| |
| let initialNodeCount; |
| function runTest() |
| { |
| if (!window.testRunner || !window.internals) { |
| log.textContent += 'FAIL - This test requires internals'; |
| return; |
| } |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| |
| initialNodeCount = internals.referencingNodeCount(document); |
| |
| const intersectionObservers = []; |
| for (let i = 0; i < 100; ++i) |
| intersectionObservers.push(createIntersectionObserver()); |
| |
| requestAnimationFrame(() => { |
| setTimeout(() => { |
| gc(); |
| log.textContent += internals.referencingNodeCount(document) < initialNodeCount + intersectionObservers.length * 0.8 ? 'PASS' : 'FAIL - Less than 20% of nodes were collected.' |
| testRunner.notifyDone(); |
| }, 0); |
| }); |
| } |
| |
| function createIntersectionObserver() |
| { |
| const element = document.createElement('div'); |
| const intersectionObserver = new IntersectionObserver(() => { }).observe(element); |
| document.body.appendChild(element); |
| setTimeout(() => { |
| element.remove(); |
| }, 0); |
| return intersectionObserver; |
| } |
| |
| onload = runTest; |
| |
| </script> |
| </body> |
| </html> |