blob: 68e3c34ee0255328e67656eff41695f472d3ea3c [file] [log] [blame]
<!doctype html>
<html>
<head>
<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>
<script src="video-test.js"></script>
</head>
<body>
<video controls width=500></video>
<script>
function castButton(element)
{
var controlID = "-internal-media-controls-cast-button";
var button = mediaControlsElement(window.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(window.internals.shadowRoot(element).firstChild, controlID);
if (!button)
throw "Failed to find cast button";
return button;
}
function castButtonDimensions(element)
{
var button = castButton(element);
var buttonBoundingRect = button.getBoundingClientRect();
return new Array(buttonBoundingRect.width, buttonBoundingRect.height);
}
function castButtonCoordinates(element, id)
{
var button = castButton(element);
var buttonBoundingRect = button.getBoundingClientRect();
var x = buttonBoundingRect.left + buttonBoundingRect.width / 2;
var y = buttonBoundingRect.top + buttonBoundingRect.height / 2;
return new Array(x, y);
}
async_test(function(t)
{
findMediaElement();
video.src = findMediaFile("video", "content/test");
mediaElement.addEventListener("loadedmetadata", function()
{
// Should not have a cast button by default
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");
dimensions = castButtonDimensions(video);
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)
position = castButtonCoordinates(video);
timelinePosition = mediaControlsButtonCoordinates(video, "timeline");
assert_greater_than(position[0], timelinePosition[0], "button should be to right of timeline");
// Check that we don't have an overlay cast button
overlayButton = overlayCastButton(video);
assert_equals(overlayButton.style.display, "none", "Overlay button should not be visible with controls");
// And to the left of the fullscreen button
fullscreenPosition = mediaControlsButtonCoordinates(video, "fullscreen-button");
assert_less_than(position[0], fullscreenPosition[0], "button should be to left 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");
t.done();
});
});
</script>
</body>
</html>