<!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="overflow-menu.js"></script>

<!--Padding ensures the overflow menu is visible for the tests. -->
<body style="padding-top: 200px; padding-left: 100px">
<video controls disablePictureInPicture></video>
<script>
async_test(function(t) {
  // Set up video
  var video = document.querySelector("video");
  video.src = "content/test.ogv";
  video.setAttribute("width", "60");
  video.setAttribute("height", "100");

  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>
