<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>getDisplayMedia and size</title>
        <script src="../../resources/testharness.js"></script>
        <script src="../../resources/testharnessreport.js"></script>
        <script src="resources/getDisplayMedia-utils.js"></script>
    </head>
    <body>
        <video id="video1" autoplay></video>
        <video id="video2" autoplay></video>
        <script>
promise_test(async () => {
    const stream1 = await callGetDisplayMedia({ video: { width: 640, height:480 } });
    video1.srcObject = stream1;
    await video1.play();

    assert_equals(video1.videoWidth, 640);

    const stream2 = stream1.clone();
    await stream2.getVideoTracks()[0].applyConstraints({ width: 320, height: 240 });
    video2.srcObject = stream2;
    await video2.play();

    assert_equals(video2.videoWidth, 320);

    test(() => {
        assert_equals(video1.videoWidth, 640);
    }, "original source should stay at a small size");
}, "Ensure getDisplayMedia size can be reduced with applyConstraints");

promise_test(async () => {
    const stream1 = await callGetDisplayMedia({ video: { width: 640, height:480 } });
    video1.srcObject = stream1;
    await video1.play();

    assert_equals(video1.videoWidth, 640);

    const stream2 = stream1.clone();
    await stream2.getVideoTracks()[0].applyConstraints({ width: 1280, height: 960 });
    video2.srcObject = stream2;
    await video2.play();

    assert_equals(video2.videoWidth, 1280);

    test(() => {
        assert_equals(video1.videoWidth, 640);
    }, "original source should stay at a big size");
}, "Ensure getDisplayMedia size can be increased with applyConstraints");
        </script>
    </body>
</html>
