<!DOCTYPE html>
<script src="../../../resources/js-test-pre.js"></script>
<body>
<video src="../../content/test.mp4" style="position: absolute; top: 0; left: 0; width: 320px; height: 240px;" controls autoplay></video>
<div id="shadow"></div>
<script type="text/javascript">

window.jsTestIsAsync = true;

description("Testing that entering fullscreen then going back into inline presents inline controls.");

if (window.internals)
    internals.setMockVideoPresentationModeEnabled(true);

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

media.addEventListener("play", () => {
    debug("");
    debug("Media started playing, we pause it and enter fullscreen by clicking on the matching button.");
    shouldBeTrue("shadowRoot.querySelector('.media-controls').classList.contains('inline')");

    media.pause();
    window.requestAnimationFrame(() => clickFullscreenButton());
});

media.addEventListener("webkitfullscreenchange", () => {
    debug("");

    if (window.internals)
        shouldBecomeEqual("internals.isChangingPresentationMode(media)", "false", toggleFullscreen);
    else
        toggleFullscreen();
});

function toggleFullscreen()
{
    if (media.webkitDisplayingFullscreen) {
        debug("Media entered fullscreen.");
        window.requestAnimationFrame(() => {
            shouldBeTrue("shadowRoot.querySelector('.media-controls').classList.contains('fullscreen')");

            debug("");
            debug("We exit fullscreen by clicking on the matching button.");
            clickFullscreenButton();
        });
    } else {
        debug("Media exited fullscreen.");
        window.requestAnimationFrame(() => {
            shouldBeTrue("shadowRoot.querySelector('.media-controls').classList.contains('inline')");
            shouldBeNull("shadowRoot.querySelector('.start-button')");

            debug("");
            media.remove();
            finishJSTest();
        });
    }
}

function clickFullscreenButton()
{
    const element = shadowRoot.querySelector("button.fullscreen");
    const bounds = element.getBoundingClientRect();
    eventSender.mouseMoveTo(bounds.left + 1, bounds.top + 1);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

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