| <!DOCTYPE html><!-- webkit-test-runner [ RequestIdleCallbackEnabled=true ] --> | |
| <html> | |
| <body> | |
| <script src="../resources/js-test.js"></script> | |
| <script> | |
| description('This tests that documents with pending requestIdleCallback is eventually collected'); | |
| const frame = document.createElement('iframe'); | |
| document.body.appendChild(frame); | |
| if (!window.internals) | |
| testFailed('This test requires internals'); | |
| else { | |
| jsTestIsAsync = true; | |
| window.onload = runTest; | |
| } | |
| function enoughDocumentCollected() | |
| { | |
| return initialCount + frameCount / 2 > internals.numberOfLiveDocuments(); | |
| } | |
| function runTest() { | |
| window.initialCount = internals.numberOfLiveDocuments(); | |
| window.frameCount = 20; | |
| for (let i = 0; i < frameCount; ++i) { | |
| const frame = document.createElement('iframe'); | |
| document.body.appendChild(frame); | |
| frame.contentWindow.requestIdleCallback(() => testFailed('idleCallback called too early')); | |
| } | |
| document.querySelectorAll('iframe').forEach((frame) => frame.remove()); | |
| setInterval(() => { | |
| GCController.collect(); | |
| }, 10); | |
| shouldBecomeEqual("enoughDocumentCollected()", "true", finishJSTest); | |
| } | |
| </script> | |
| </body> | |
| </html> |