<!DOCTYPE html>
<title>media controls picture in picture 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="../utils.js"></script>
<body>
<video controls></video>
<script>
async_test(t => {
  enablePictureInPictureForTest(t);

  var video = document.querySelector("video");
  video.src = "../../content/test.ogv";

  video.onloadedmetadata = t.step_func(function() {
    assert_true(isPictureInPictureButtonEnabled(video), "button should exist");

    video.addEventListener('enterpictureinpicture', t.step_func(() => {
      setTimeout(t.step_func_done(() => {
        assert_true(isPictureInPictureButtonEnabled(video), "button should exist");
      }));
    }), { once: true });

    clickPictureInPictureButton(video);
  });
});
</script>
</body>
