<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<body>
<video id="video1" autoplay playsInline></video>
<video id="video2" autoplay playsInline style="visibility:hidden"></video>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>

promise_test(async() => {
    if (!window.internals)
       return Promise.reject("Test requires internals API");

    const stream = await navigator.mediaDevices.getUserMedia({video : true});
    video1.srcObject = stream;
    await video1.play();

    assert_true(internals.isPlayerVisibleInViewport(video1), "video1");
}, "Check default media stream player visibility");

promise_test(async() => {
   if (!window.internals)
        return Promise.reject("Test requires internals API");

    const stream = await navigator.mediaDevices.getUserMedia({video : true});
    video2.srcObject = stream;
    await video2.play();

    assert_false(internals.isPlayerVisibleInViewport(video2), "video2");

    video2.style.visibility = "visible";
    await new Promise(resolve => setTimeout(resolve, 0));
    assert_true(internals.isPlayerVisibleInViewport(video2), "video2 2");

    video2.style.visibility = "hidden";
    await new Promise(resolve => setTimeout(resolve, 0));
    assert_false(internals.isPlayerVisibleInViewport(video2), "video2 3");
}, "Check media stream player visibility with CSS");

promise_test(async() => {
    if (!window.internals)
        return Promise.reject("Test requires internals API");

    const video3 = document.createElement("video");
    const stream = await navigator.mediaDevices.getUserMedia({video : true});
    video3.srcObject = stream;
    video3.playsInline = true;
    await video3.play();

    assert_false(internals.isPlayerVisibleInViewport(video3), "video3");

    document.body.appendChild(video3);
    await video3.play();
    await new Promise(resolve => setTimeout(resolve, 0));
    assert_false(internals.isPlayerVisibleInViewport(video3), "video3 2");
}, "Check media stream player visibility of unattached media element");
</script>
</body>
</html>
