<html>
    <head>
        <title>Drawing to canvas using video with source element does not taint canvas</title>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script src="../fast/js/resources/js-test-pre.js"></script>
        <script>
            var ctx;
            var width;
            var height;

            function canplaythrough()
            {
                width = video.videoWidth / 2;
                height = video.videoHeight / 2;

                ctx = canvas.getContext("2d");
                video.pause();
                ctx.drawImage(video, 0, 0, width, height);
                shouldBeTrue("!!ctx.getImageData(0, 0, width, height)");
                endTest();
            }

            function start()
            {
                description("Test to ensure we don't taint a canvas when drawing from a video the uses source elements rather than the src attribute");
                findMediaElement();
                canvas = document.getElementsByTagName('canvas')[0];
                waitForEvent('canplaythrough', canplaythrough);
                var mediaFile = findMediaFile("video", "content/counting");
                disableFullTestDetailsPrinting();
                runSilently("var source = document.createElement('source'); source.src = '" + mediaFile + "'; video.appendChild(source)");
                enableFullTestDetailsPrinting();
            }
        </script>
    </head>

    <body onload="start()" >
        <p id="description"></p>
        <video controls="true"></video>
        <canvas width="160" height="120" ></canvas>
        <div id="console"></div>
    </body>
</html>
