| <!DOCTYPE html> |
| <html> |
| <head> |
| <script> |
| |
| if (window.testRunner) { |
| testRunner.waitUntilDone(); |
| testRunner.dumpAsText(); |
| } |
| |
| let elementIdentifier = null; |
| let parentIdentifier = null; |
| let iterationCount = 20; |
| let watchdogTimer = null; |
| function runTest() { |
| if (!iterationCount) |
| return endTest('PASS'); |
| |
| internals.queueTask('DOMManipulation', () => { |
| GCController.collect(); |
| }); |
| |
| (() => { |
| const element = document.createElement('video'); |
| elementIdentifier = internals.elementIdentifier(element); |
| |
| const parentNode = document.createElement('div'); |
| parentIdentifier = internals.elementIdentifier(parentNode); |
| parentNode.appendChild(element); |
| |
| element.remote.watchAvailability(checkElement); |
| watchdogTimer = setTimeout(() => endTest('FAIL - the callback was never called'), 3000); |
| })(); |
| |
| GCController.collect(); |
| } |
| |
| function checkElement() |
| { |
| clearTimeout(watchdogTimer); |
| |
| if (!internals.isElementAlive(elementIdentifier)) |
| return endTest('FAIL - element is no longer alive'); |
| |
| if (!internals.isElementAlive(parentIdentifier)) |
| return endTest('FAIL - parent is no longer alive'); |
| |
| --iterationCount; |
| setTimeout(() => runTest(), 0); |
| } |
| |
| function endTest(status) |
| { |
| result.textContent = status; |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| </script> |
| </head> |
| <body onload='runTest()'> |
| <p>This tests that calling watchAvailability will keep the media element alive until the callback is called. You should see PASS below:</p> |
| <p id="result">Running</p> |
| </body> |
| </html> |