66 lines
1.6 KiB
HTML
66 lines
1.6 KiB
HTML
<!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>
|