blob: 230a24dffbbf3cb813bb52734e25c3d4ca035b55 [file] [log] [blame]
<script src="../../../resources/js-test-pre.js"></script>
<script src="../resources/media-controls-loader.js" type="text/javascript"></script>
<body>
<video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay controls></video>
<div id="host"></div>
<script type="text/javascript">
window.jsTestIsAsync = true;
description("Testing <code>AirPlaySupport</code> stops listening to webkitplaybacktargetavailabilitychanged events when the controls are not visible to the user.");
const container = document.querySelector("div#host");
const media = document.querySelector("video");
const mediaController = createControls(container, media, null);
const controls = mediaController.controls;
controls.autoHideController.autoHideDelay = 100;
media.addEventListener("canplay", startTest);
function startTest()
{
debug("Starting test.");
shouldBeTrue("controls.visible");
shouldBeFalse("controls.faded");
debug("");
debug("Now we wait for the controls to fade after a period of inactivity.");
shouldBecomeEqual("controls.faded", "true", makeAirPlayAvailable);
}
function makeAirPlayAvailable()
{
debug("");
debug("Before turning AirPlay routes on, we check the AirPlay control state.");
shouldBeFalse("controls.airplayButton.enabled");
debug("");
debug("Making AirPlay routes available.");
media.addEventListener("webkitplaybacktargetavailabilitychanged", playbackTargetAvailabilityChangedOnce, true);
window.internals.setMockMediaPlaybackTargetPickerEnabled(true);
}
function playbackTargetAvailabilityChangedOnce(event)
{
media.removeEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedOnce, true);
media.addEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedAgain, true);
window.internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
}
function playbackTargetAvailabilityChangedAgain(event)
{
// setMockMediaPlaybackTargetPickerState happens asynchronously in WK2 and a
// "webkitplaybacktargetavailabilitychanged" is always sent when an event listener
// is added, so we may get a "not available" event first.
if (event.availability == 'not-available')
return;
media.removeEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedAgain, true);
shouldBeFalse("controls.airplayButton.enabled");
debug("");
debug("We pause the media so that controls can show again.");
media.addEventListener("pause", mediaDidPause);
media.pause();
}
function mediaDidPause()
{
debug("");
debug("Media paused, the AirPlay button should be enabled now that controls are visible.");
shouldBeFalse("controls.faded");
shouldBecomeEqual("controls.airplayButton.enabled", "true", finishTest);
}
function finishTest()
{
debug("");
container.remove();
media.remove();
finishJSTest();
}
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>