blob: 5308d5ebde8e0caefee3123152cfe52a345e00a0 [file] [log] [blame]
<!DOCTYPE html>
<title>media controls cast button</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="media-file.js"></script>
<script src="media-controls.js"></script>
<video controls width="500"></video>
<script>
async_test(function(t) {
var video = document.querySelector("video");
video.src = findMediaFile("video", "content/test");
video.onloadedmetadata = t.step_func_done(function() {
// Should not have a cast button by default
var button = castButton(video);
assert_equals(button.style.display, "none", "button should not be visible with no cast devices");
// Pretend we have a cast device
internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
// Now should have cast button
assert_false(("display" in button.style) && (button.style.display == "none"), "button should exist");
var buttonBoundingRect = button.getBoundingClientRect();
var dimensions = new Array(buttonBoundingRect.width, buttonBoundingRect.height);
assert_not_equals(dimensions[0], 0, "button should exist");
assert_not_equals(dimensions[1], 0, "button should exist");
// Check its position is to the right of the timeline
// (can't test against volume control or closed caption button, since these don't always exist)
var x = buttonBoundingRect.left + buttonBoundingRect.width / 2;
var timelinePosition = mediaControlsButtonCoordinates(video, "timeline");
assert_greater_than(x, timelinePosition[0], "button should be to right of timeline");
// Check that we don't have an overlay cast button
var overlayButton = overlayCastButton(video);
assert_equals(overlayButton.style.display, "none", "Overlay button should not be visible with controls");
// And to the right of the fullscreen button
var fullscreenPosition = mediaControlsButtonCoordinates(video, "fullscreen-button");
assert_greater_than(x, fullscreenPosition[0], "button should be to right of fullscreen button");
// Remove cast device - cast button should go away
internals.mediaPlayerRemoteRouteAvailabilityChanged(video, false);
assert_equals(button.style.display, "none", "button should not be visible after cast device goes away");
});
function castButton(element) {
var controlID = "-internal-media-controls-cast-button";
var button = mediaControlsElement(internals.shadowRoot(element).firstChild, controlID);
if (!button)
throw "Failed to find cast button";
return button;
}
function overlayCastButton(element) {
var controlID = "-internal-media-controls-overlay-cast-button";
var button = mediaControlsElement(internals.shadowRoot(element).firstChild, controlID);
if (!button)
throw "Failed to find cast button";
return button;
}
});
</script>