<!DOCTYPE html>
<script src="../../../resources/js-test-pre.js"></script>
<body>
<video src="../../content/test.mp4" style="width: 640px; height: 480px;" controls autoplay></video>
<script type="text/javascript">

window.jsTestIsAsync = true;

description("Fading in the controls when entering fullscreen.");

if (!window.internals) {
    debug("window.internals is not defined");
    finishJSTest();
}

internals.setMockVideoPresentationModeEnabled(true);

const media = document.querySelector("video");
const shadowRoot = window.internals.shadowRoot(media);
let mediaControls = shadowRoot.lastElementChild.lastElementChild;

media.addEventListener("play", () => {
    media.pause();

    window.requestAnimationFrame(() => {
        debug("We should not fade the controls in when showing them inline the first time");
        shouldBeFalse("mediaControls.classList.contains('fade-in')");
        
        clickOnFullscreenButton();
        media.addEventListener("webkitfullscreenchange", () => {
            if (!media.webkitDisplayingFullscreen) {
                media.remove();
                finishJSTest();
            }

            shouldBecomeEqual("internals.isChangingPresentationMode(media)", "false", () => {
                mediaControls = shadowRoot.lastElementChild.lastElementChild;
                debug("Obtained a webkitfullscreenchange event");
                shouldBeTrue("media.webkitDisplayingFullscreen");
                debug("We should fade the controls in when showing them fullscreen");
                shouldBeTrue("mediaControls.classList.contains('fade-in')");

                debug("");
                media.webkitExitFullscreen();
            });
        });
    });
});

function clickOnFullscreenButton()
{
    debug("Clicking on the fullscreen button");
    const bounds = shadowRoot.lastChild.querySelector("button.fullscreen").getBoundingClientRect();
    eventSender.mouseMoveTo(bounds.left + 1, bounds.top + 1);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
