test_bug879717.html (3559B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for bug 879717, check that a video element can be drawn into a canvas at various states of playback</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 <script type="text/javascript" src="manifest.js"></script> 8 </head> 9 <body> 10 <pre id="test"> 11 <script class="testbody" type="text/javascript"> 12 13 var manager = new MediaTestManager; 14 15 var canvas = document.createElement('canvas'); 16 document.body.appendChild(canvas); 17 18 var checkDrawImage = function(eventName, videoElement) { 19 var exception = null; 20 var exceptionName = "nothing"; 21 try { 22 var ctx = canvas.getContext('2d'); 23 ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height); 24 } catch (e) { 25 exception = e; 26 exceptionName = e.name; 27 } 28 ok(exception === null, 29 "drawImage shouldn't throw an exception on " + eventName + 30 " of " + videoElement.testName + ", got " + exceptionName); 31 }; 32 33 var checkDrawImageEventHandler = function(ev) { 34 checkDrawImage(ev.type, ev.target); 35 }; 36 var startTest = function(media, token) { 37 manager.started(token); 38 39 // File playback 40 var v1 = document.createElement("video"); 41 v1.autoplay = true; 42 43 // Captured file playback 44 var v2 = document.createElement("video"); 45 46 // Stream playback 47 var v3 = document.createElement("video"); 48 v3.autoplay = true; 49 50 v1.gotLoadeddata = false; 51 v2.gotLoadeddata = false; 52 v3.gotLoadeddata = false; 53 54 v1.testName = "v1 (" + media.name + ")"; 55 v2.testName = "v2 (Captured " + media.name + ")"; 56 v3.testName = "v3 (Stream of " + media.name + ")"; 57 58 checkDrawImage("beforeplay", v1); 59 checkDrawImage("beforeplay", v2); 60 checkDrawImage("beforeplay", v3); 61 62 v1.onloadedmetadata = checkDrawImageEventHandler; 63 v2.onloadedmetadata = checkDrawImageEventHandler; 64 v3.onloadedmetadata = checkDrawImageEventHandler; 65 66 v1.onplay = checkDrawImageEventHandler; 67 v2.onplay = checkDrawImageEventHandler; 68 v3.onplay = checkDrawImageEventHandler; 69 70 function onplaying(ev) { 71 if (!ev.target.gotPlaying) { 72 ev.target.gotPlaying = true; 73 checkDrawImageEventHandler(ev); 74 } 75 } 76 v1.onplaying = onplaying; 77 v2.onplaying = onplaying; 78 v3.onplaying = onplaying; 79 80 var onloadeddata = function(ev) { 81 ev.target.gotLoadeddata = true; 82 checkDrawImageEventHandler(ev); 83 }; 84 85 v1.onloadeddata = onloadeddata; 86 v2.onloadeddata = onloadeddata; 87 v3.onloadeddata = onloadeddata; 88 89 var checkFinished = function() { 90 if (!v1.testFinished || !v2.testFinished || !v3.testFinished) { 91 return; 92 } 93 94 ok(v1.gotLoadeddata, v1.testName + " should have gotten the 'loadeddata' event callback"); 95 ok(v2.gotLoadeddata, v2.testName + " should have gotten the 'loadeddata' event callback"); 96 ok(v3.gotLoadeddata, v3.testName + " should have gotten the 'loadeddata' event callback"); 97 98 manager.finished(token); 99 }; 100 101 var onended = function(ev) { 102 checkDrawImageEventHandler(ev); 103 removeNodeAndSource(ev.target); 104 ev.target.testFinished = true; 105 checkFinished(); 106 }; 107 108 v1.onended = onended; 109 v2.onended = onended; 110 v3.onended = onended; 111 112 document.body.appendChild(v1); 113 document.body.appendChild(v2); 114 document.body.appendChild(v3); 115 116 v1.src = media.name; 117 v2.src = media.name; 118 v2.preload = 'metadata'; 119 120 v2.addEventListener('loadedmetadata', function () { 121 v3.srcObject = v2.mozCaptureStreamUntilEnded(); 122 v2.play(); 123 }); 124 } 125 126 manager.runTests(getPlayableVideos(gSmallTests), startTest); 127 </script> 128 </pre> 129 </body> 130 </html>