test_video_dimensions.html (2765B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test that a video element has set video dimensions on loadedmetadata</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 var manager = new MediaTestManager; 13 14 var startTest = function(test, token) { 15 manager.started(token); 16 var v1 = document.createElement('video'); 17 var v2 = document.createElement('video'); 18 var vout = document.createElement('video'); 19 20 // Avoid a race for hardware resources between v1 and v2 on platforms with 21 // a hardware decoder, like B2G. 22 v1.preload = 'none'; 23 v2.preload = 'none'; 24 25 var numVideoElementsFinished = 0; 26 27 var ondurationchange = function(ev) { 28 var v = ev.target; 29 info(v.testName + " got durationchange"); 30 v.durationchange = true; 31 }; 32 var onresize = function(ev) { 33 var v = ev.target; 34 info(v.testName + " got resize"); 35 ok(!v.resize, v.testName + " should only fire resize once for same size"); 36 v.resize = true; 37 ok(v.durationchange, v.testName + 38 " durationchange event should have been emitted before resize"); 39 is(v.videoWidth, test.width, v.testName + " width should be set on resize"); 40 is(v.videoHeight, test.height, v.testName + " height should be set on resize"); 41 }; 42 var onloadedmetadata = function(ev) { 43 var v = ev.target; 44 info(v.testName + " got loadedmetadata"); 45 ok(!v.loadedmetadata, v.testName + " should only fire loadedmetadata once"); 46 v.loadedmetadata = true; 47 ok(v.resize, v.testName + 48 " resize event should have been emitted before loadedmetadata"); 49 50 numVideoElementsFinished += 1; 51 if (v === v1) { 52 removeNodeAndSource(v1); 53 v2.load(); 54 } 55 56 if (v === v2) { 57 vout.srcObject = v2.mozCaptureStreamUntilEnded(); 58 v2.play(); 59 vout.play(); 60 } 61 62 if (numVideoElementsFinished === 3) { 63 removeNodeAndSource(v2); 64 removeNodeAndSource(vout); 65 manager.finished(token); 66 } 67 }; 68 var setupElement = function(v) { 69 v.durationchange = false; 70 v.ondurationchange = ondurationchange; 71 v.resize = false; 72 v.onresize = onresize; 73 v.loadedmetadata = false; 74 v.onloadedmetadata = onloadedmetadata; 75 document.body.appendChild(v); 76 }; 77 78 v1.testName = test.name; 79 v2.testName = test.name + " (Captured)"; 80 vout.testName = test.name + " (Stream)"; 81 82 v1.src = test.name; 83 v2.src = test.name; 84 85 setupElement(v1, "v1"); 86 setupElement(v2, "v2"); 87 setupElement(vout, "vout"); 88 89 v1.play(); 90 }; 91 92 manager.runTests(getPlayableVideos(gSmallTests), startTest); 93 </script> 94 </pre> 95 </body> 96 </html>