98 lines
3.5 KiB
HTML
98 lines
3.5 KiB
HTML
<html>
|
|
<head>
|
|
<script src='media-file.js'></script>
|
|
<script src='video-test.js'></script>
|
|
<script>
|
|
|
|
let pendingTimeout;
|
|
|
|
async function start()
|
|
{
|
|
findMediaElement();
|
|
|
|
if (window.internals) {
|
|
internals.setMockMediaPlaybackTargetPickerEnabled(true);
|
|
internals.settings.setAllowsAirPlayForMediaPlayback(true);
|
|
}
|
|
|
|
consoleWrite('<br>** prompt() when disableRemotePlayback is set should fail');
|
|
run('video.disableRemotePlayback = true');
|
|
|
|
try {
|
|
await video.remote.prompt();
|
|
failTest('prompt() succeeded when remote playback is disabled');
|
|
} catch(error) {
|
|
consoleWrite(`EXPECTED ERROR: ${ error }`);
|
|
}
|
|
|
|
run('video.disableRemotePlayback = false');
|
|
|
|
consoleWrite('<br>** prompt() outside of a user action should fail');
|
|
try {
|
|
await video.remote.prompt();
|
|
failTest('prompt() succeeded outside of a user action');
|
|
} catch(error) {
|
|
consoleWrite(`EXPECTED ERROR: ${ error }`);
|
|
}
|
|
|
|
consoleWrite('<br>** prompt() when no targets are available should fail');
|
|
runWithKeyDown(() => {
|
|
video.remote.prompt().then(failTest).catch(handleNoTargetError);
|
|
});
|
|
}
|
|
|
|
async function handleNoTargetError(error)
|
|
{
|
|
consoleWrite(`EXPECTED ERROR: ${ error }`);
|
|
consoleWrite('<br>** Simulate a device becoming available')
|
|
|
|
pendingTimeout = setTimeout(_ => {
|
|
failTest(`<br>Remote device not available after 8 seconds!`);
|
|
}, 8000);
|
|
|
|
if (window.internals)
|
|
internals.setMockMediaPlaybackTargetPickerState('', 'DeviceAvailable');
|
|
|
|
try {
|
|
await video.remote.watchAvailability(availabilityChanged);
|
|
} catch (error) {
|
|
failTest(`<br>'watchAvailability' threw error ${error}`);
|
|
}
|
|
}
|
|
|
|
async function availabilityChanged(available)
|
|
{
|
|
if (!available)
|
|
return;
|
|
|
|
video.remote.cancelWatchAvailability();
|
|
clearTimeout(pendingTimeout);
|
|
|
|
if (video.src)
|
|
return;
|
|
|
|
run('video.src = findMediaFile("video", "content/test")');
|
|
await waitForEventWithTimeout(video, 'canplaythrough', 8000, "'canplaythrough' not fired after 8 seconds");
|
|
|
|
consoleWrite('<br>** Simulate a device becoming selected');
|
|
runWithKeyDown(() => {
|
|
video.remote.prompt().catch(failTest);
|
|
});
|
|
if (window.internals)
|
|
internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
|
|
|
|
await waitForEventWithTimeout(video.remote, 'connecting', 8000, "'connecting' not fired after 8 seconds");
|
|
await waitForEventWithTimeout(video.remote, 'connect', 8000, "'connect' not fired after 8 seconds");
|
|
|
|
endTest();
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
|
|
<body onload='start()'>
|
|
<video controls></video>
|
|
<p>Test the operation of prompt().</p>
|
|
</body>
|
|
</html>
|