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

window.jsTestIsAsync = true;

description("Testing ltr is set correctly when entering fullscreen.");

const media = document.querySelector("video");
const button = document.body.appendChild(document.createElement("button"));
let shadowRoot = window.internals.shadowRoot(media);
let mediaControlsElement, volumeSliderElement;

media.addEventListener("webkitfullscreenchange", function() {
    shouldBecomeEqual("media.webkitDisplayingFullscreen", "true", () => {
        window.requestAnimationFrame(() => {
            window.requestAnimationFrame(() => {
                debug("Media entered fullscreen");

                mediaControlsElement = shadowRoot.lastElementChild.lastElementChild;
                volumeSliderElement = mediaControlsElement.querySelector(".volume.slider");

                shouldBeTrue("mediaControlsElement.classList.contains('uses-ltr-user-interface-layout-direction')");
                shouldBeEqualToString("document.defaultView.getComputedStyle(volumeSliderElement).transform", "none");

                debug("");
                debug("Setting layout direction to RTL");
                window.internals.setUserInterfaceLayoutDirection("RTL");
                shouldBeFalse("mediaControlsElement.classList.contains('uses-ltr-user-interface-layout-direction')");
                shouldBeEqualToString("document.defaultView.getComputedStyle(volumeSliderElement).transform", "matrix(-1, 0, 0, 1, 0, 0)");

                debug("");
                debug("Setting layout direction back to LTR");
                window.internals.setUserInterfaceLayoutDirection("LTR");
                shouldBeTrue("mediaControlsElement.classList.contains('uses-ltr-user-interface-layout-direction')");
                shouldBeEqualToString("document.defaultView.getComputedStyle(volumeSliderElement).transform", "none");

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

media.addEventListener("loadedmetadata", () => {
    if (!("eventSender" in window)) {
        debug("This test is designed to run in DRT");
        return;
    }

    // Click a button so we may enter fullscreen.
    button.addEventListener("click", event => {
        try {
            media.webkitEnterFullscreen();
        } catch(e) {
            debug("Toggling fullscreen failed");
            finishJSTest();
        }
    });

    eventSender.mouseMoveTo(button.offsetLeft + 1, button.offsetTop + 1);
    eventSender.mouseDown();
    eventSender.mouseUp();
});

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