<!DOCTYPE html>
<title>Clicking on the overflow fullscreen button opens the video in fullscreen.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="media-controls.js"></script>
<script src="media-file.js"></script>
<script src="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(function(t) {
  // Set up video
  var video = document.querySelector("video");
  video.src = findMediaFile("video", "content/test");
  video.setAttribute("width", "60");

  window.addEventListener("load", t.step_func(function() {
    var overflowList = getOverflowList(video);
    var overflowMenu = getOverflowMenuButton(video);

    // Click on the overflow menu button
    var coords = elementCoordinates(overflowMenu);
    clickAtCoordinates(coords[0], coords[1]);

    // Clicking on the fullscreen button should open up the video in fullscreen
    var coords = elementCoordinates(overflowList.children[OverflowMenuButtons.FULLSCREEN]);
    clickAtCoordinates(coords[0], coords[1]);

    document.onwebkitfullscreenchange = t.step_func(() => {
      assert_equals(document.fullscreenElement, video);
      // Hiding the overflow menu is triggered by layout.
      testRunner.layoutAndPaintAsyncThen(t.step_func_done(() => {
        assert_equals(getComputedStyle(overflowMenu).display, "none");
      }));
    });
  }));
});
</script>
</body>
