<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
    <head>
        <canvas id="canvas1" width=100px height=100px></canvas>
        <video id="video" autoplay width=100px height=100px></video>
        <canvas id="canvas2" width=100px height=100px></canvas>
        <script src="../../../resources/testharness.js"></script>
        <script src="../../../resources/testharnessreport.js"></script>
        <script>

var canvas1 = document.getElementById("canvas1");
var canvas2 = document.getElementById("canvas2");
var video = document.getElementById("video");

function checkCanvas(canvas, stream)
{
    return new Promise((resolve, reject) => {
        video.srcObject = stream;
        video.onplay = () => {
            canvas2.getContext("2d").drawImage(video, 0 ,0);
            try {
                assert_array_equals(canvas.getContext("2d").getImageData(0 ,0, 100, 100), canvas2.getContext("2d").getImageData(0, 0, 100, 100));
            } catch(e) {
                reject(e);
                return;
            }
            resolve();
        }
    });
}

function printLine()
{
    var context = canvas1.getContext("2d");
    context.strokeStyle="green";
    context.beginPath();
    context.moveTo(0,0);
    context.lineTo(100, 100);
    context.stroke();

    setTimeout(printLine, 500);
}

promise_test((test) => {
    var stream = canvas1.captureStream();

    if (window.internals)
        assert_true(internals.pageMediaState().toLowerCase().indexOf("capture") == -1, "media state should not contain any camera capture");
    promise = checkCanvas(canvas1, stream);

    printLine();


    return promise;
}, "captureStream with 2d context drawing");

promise_test((test) => {
    var stream = canvas1.captureStream().clone();
    if (window.internals)
        assert_true(internals.pageMediaState().toLowerCase().indexOf("capture") == -1, "media state should not contain any camera capture");
    promise = checkCanvas(canvas1, stream);

    printLine();


    return promise;
}, "captureStream cloning");
        </script>
    </head>
</html>
