| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <body> |
| <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"); |
| |
| var previousTrackSampleCount = 0 |
| function validateCanvas(resolve, reject) |
| { |
| try { |
| if (window.internals) { |
| assert_true((internals.trackVideoSampleCount - previousTrackSampleCount) <= 1, "got too much internals.trackVideoSampleCount"); |
| previousTrackSampleCount = internals.trackVideoSampleCount; |
| } |
| canvas2.getContext("2d").drawImage(video, 0 ,0); |
| assert_array_equals(canvas2.getContext("2d").getImageData(0 ,0, 100, 100).data, canvas2.getContext("2d").getImageData(0, 0, 100, 100).data); |
| } catch(e) { |
| reject(e); |
| return; |
| } |
| setTimeout(() => { validateCanvas(reject, resolve); }, 5); |
| } |
| |
| function checkCanvas(canvas, stream) |
| { |
| return new Promise((resolve, reject) => { |
| video.srcObject = stream; |
| video.onplay = () => { |
| if (window.internals) |
| previousTrackSampleCount = internals.trackVideoSampleCount; |
| validateCanvas(resolve, reject); |
| setTimeout(resolve, 500); |
| } |
| }); |
| } |
| |
| var cptr = 0; |
| function printLine() |
| { |
| var context = canvas1.getContext("2d"); |
| context.fillStyle = "red"; |
| for (var i = 0 ; i < 100; ++i) |
| context.fillRect(0, 0, 100, 100); |
| |
| cptr += 5; |
| if (cptr > 255) |
| cptr = 0; |
| context.fillStyle="rgb(0, " + cptr + ", 0)"; |
| context.fillRect(0, 0, 100, 100); |
| setTimeout(printLine, 100); |
| } |
| |
| promise_test((test) => { |
| var stream = canvas1.captureStream(); |
| |
| assert_false(!!stream.getAudioTracks().length); |
| assert_true(stream.getVideoTracks().length == 1); |
| |
| if (window.internals) |
| internals.observeMediaStreamTrack(stream.getVideoTracks()[0]); |
| |
| promise = checkCanvas(canvas1, stream); |
| |
| printLine(); |
| |
| return promise; |
| }, "captureStream with 2d context drawing"); |
| </script> |
| </body> |
| </html> |