| <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> |