<!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/CC+Subtitles.mov" style="width: 320px; height: 240px;" controls autoplay></video>
<script type="text/javascript">

window.jsTestIsAsync = true;

description("Showing the tracks panel in fullscreen.");

setTimeout(() => {
    debug("FAIL: did not end fast enough");
    finishJSTest();
}, 10000);

const media = document.querySelector("video");

media.addEventListener("webkitfullscreenchange", () => {
    shouldBecomeEqual("media.webkitDisplayingFullscreen", "true", () => {
        shouldBecomeDifferent(`internals.shadowRoot(media).querySelector("button.tracks")`, "null", () => {
            shouldBecomeDifferent(`internals.shadowRoot(media).querySelector("button.tracks").getBoundingClientRect().width`, "0", () => {
                shouldBecomeEqual(`internals.shadowRoot(media).querySelector("button.tracks").getBoundingClientRect().right`, "582", () => {
                    pressOnElement(internals.shadowRoot(media).querySelector("button.tracks"));
                    shouldBecomeDifferent(`internals.shadowRoot(media).querySelector('.tracks-panel')`, "null", () => {
                        shouldBeEqualToString("internals.shadowRoot(media).querySelector('.tracks-panel').style.right", "218px");
                        shouldBeEqualToString("internals.shadowRoot(media).querySelector('.tracks-panel').style.bottom", "101px");
                        debug("");
                        media.remove();
                        finishJSTest();
                    });
                });
            });
        });
    });
});

media.addEventListener("play", () => {
    media.pause();
    shouldBecomeDifferent(`internals.shadowRoot(media).querySelector("button.fullscreen")`, "null", () => {
        shouldBecomeDifferent(`internals.shadowRoot(media).querySelector("button.fullscreen").getBoundingClientRect().width`, "0", () => {
            pressOnElement(internals.shadowRoot(media).querySelector(`button.fullscreen`));
        });
    });
});

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