<!DOCTYPE html>
<html>
<head>
<script>
internals.setLowPowerModeEnabled(true);
</script>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../resources/media-controls-loader.js" type="text/javascript"></script>
<script src="../resources/media-controls-utils.js" type="text/javascript"></script>
</head>
<body>
<video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay></video>
<script>
description("Test that silent autoplay videos do not start playing without user gesture while in low power mode.");
jsTestIsAsync = true;

let hasUserGesture = false;
const media = document.querySelector("video");

function endTest()
{
    media.remove();
    finishJSTest();
}

media.addEventListener("canplaythrough", function() {
    debug("Received 'canplaythrough' event");
    // We should display the start button since we denied autoplay and the user needs a way to start playback.
    shouldBecomeEqual("!!internals.shadowRoot(media).querySelector('button.play-pause')", "true", function() {
        shouldBeFalse("media.controls");

        debug("Pressing on the start button");
        hasUserGesture = true;
        pressOnElement(internals.shadowRoot(media).querySelector('button.play-pause'));
    });
});

media.addEventListener("play", function() {
    debug("Received 'play' event");
    shouldBeFalse("media.controls");
    if (hasUserGesture) {
        shouldBecomeEqual("internals.shadowRoot(media).querySelector('button.play-pause')", "null", endTest);
    } else {
        testFailed("Media started playing without user interaction");
        endTest();
    }
});

setTimeout(finishJSTest, 5000);

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