<!DOCTYPE html>
<script src="../../../../resources/js-test-pre.js"></script>
<script src="../../resources/media-controls-utils.js" type="text/javascript"></script>
<body>
<video src="../../../content/test.mp4" style="width: 320px; height: 240px;" controls autoplay plays-inline></video>
<script type="text/javascript">

window.jsTestIsAsync = true;

description("Testing we stop updating controls while in fullscreen and then update them again when back to inline on iOS.");

const media = document.querySelector("video");
const button = document.body.appendChild(document.createElement("button"));
button.textContent = "Enter Fullscreen";
button.style = "position: absolute; left: 0; top: 0";

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

media.addEventListener("webkitpresentationmodechanged", () => {
    if (enteringFullscreen) {
        shouldBecomeEqual("media.webkitDisplayingFullscreen", "true", () => {
            debug("");
            debug("Entered fullscreen");

            shouldBeFalse("media.paused");
            shouldBecomeEqual("window.internals.shadowRoot(media).querySelector('.media-controls').childElementCount", "0", () => {
                media.pause();
                enteringFullscreen = false;
                media.webkitExitFullscreen();
            });
        });
    } else {
        shouldBecomeEqual("media.webkitDisplayingFullscreen", "false", () => {
            debug("");
            debug("Exited fullscreen");
            endTest();
        });
    }
});

media.addEventListener("play", () => {
    debug("");
    debug("Obtained a 'play' event.");

    startTest();
});

function enterFullscreen() {
    debug("");
    debug("Entering fullscreen.");
    button.addEventListener("click", () => {
        try {
            enteringFullscreen = true;
            media.webkitEnterFullscreen();
        } catch(e) {
            debug("Toggling fullscreen failed.");
            finishJSTest();
        }
    });

    pressOnElement(button);
}

function startTest()
{
    enterFullscreen();
}

function endTest()
{
    debug("");
    button.remove();
    media.remove();
    finishJSTest();
}

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