blob: 8b1f18eecde9e07608827cb255ac6b3fb11635b6 [file] [log] [blame]
<!DOCTYPE html>
<title>Overflow menu updates properly.</title>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script src='../../../media-resources/media-controls.js'></script>
<script src='../../../media-resources/media-file.js'></script>
<script src='../../../media-resources/overflow-menu.js'></script>
<!--Padding ensures the overflow menu is visible for the tests. -->
<body style='padding-top: 200px; padding-left: 100px'>
<video controls></video>
<script>
async_test(t => {
assert_true('internals' in window, 'window.internals must be available');
// Set up video
var video = document.querySelector('video');
video.src = findMediaFile('video', '../resources/test');
video.setAttribute('width', '60');
// Add captions
var trackElement = document.createElement('track');
video.appendChild(trackElement);
// Pretend we have a cast device
internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
video.onloadeddata = t.step_func(_ => {
var overflowList = getOverflowList(video);
// Remove cast device and ensure the overflow menu updates as expected
// Cast option in overflow should no longer be visible, but the other
// options should all be.
var buttonsWithoutCast = overflowButtonsCSS;
buttonsWithoutCast[OverflowMenuButtons.CAST] = undefined;
internals.mediaPlayerRemoteRouteAvailabilityChanged(video, false);
var children = overflowList.children;
// Ensure that all of the buttons are visible in the right order
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (buttonsWithoutCast[i])
assert_not_equals(getComputedStyle(child).display, 'none');
else
assert_equals(getComputedStyle(child).display, 'none');
}
internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
assert_not_equals(getComputedStyle(children[OverflowMenuButtons.CAST]).display, 'none');
// Removing closed captions hides button in overflow menu
assert_not_equals(getComputedStyle(children[OverflowMenuButtons.CLOSED_CAPTIONS]).display, 'none');
video.removeChild(trackElement);
// The controls are updated asynchronously.
setTimeout(t.step_func_done(_ => {
assert_equals(getComputedStyle(children[OverflowMenuButtons.CLOSED_CAPTIONS]).display, 'none');
}));
});
});
</script>
</body>