mediasource-sourcebufferlist.html (4600B)
1 <!DOCTYPE html> 2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> 3 <html> 4 <head> 5 <title>SourceBufferList test cases.</title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="mediasource-util.js"></script> 9 </head> 10 <body> 11 <div id="log"></div> 12 <script> 13 function verifySourceBufferLists(mediaSource, expected) 14 { 15 assert_equals(mediaSource.sourceBuffers.length, expected.length, "sourceBuffers length"); 16 assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers length"); 17 for (var i = 0; i < expected.length; ++i) { 18 assert_equals(mediaSource.sourceBuffers[i], expected[i], "Verifying mediaSource.sourceBuffers[" + i + "]"); 19 } 20 assert_equals(mediaSource.sourceBuffers[expected.length], undefined, 21 "If index is greater than or equal to the length attribute then return undefined."); 22 } 23 24 mediasource_test(function(test, mediaElement, mediaSource) 25 { 26 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); 27 verifySourceBufferLists(mediaSource, [sourceBufferA]); 28 29 var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE); 30 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]); 31 test.done(); 32 }, "Test SourceBufferList getter method"); 33 34 mediasource_test(function(test, mediaElement, mediaSource) 35 { 36 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); 37 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); 38 var sourceBufferB = null; 39 40 test.waitForExpectedEvents(function() 41 { 42 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); 43 sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE); 44 45 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]); 46 }); 47 48 test.waitForExpectedEvents(function() 49 { 50 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers"); 51 mediaSource.removeSourceBuffer(sourceBufferA); 52 53 verifySourceBufferLists(mediaSource, [sourceBufferB]); 54 55 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); 56 sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); 57 58 verifySourceBufferLists(mediaSource, [sourceBufferB, sourceBufferA]); 59 }); 60 61 test.waitForExpectedEvents(function() 62 { 63 test.done(); 64 }); 65 }, "Test SourceBufferList event dispatching."); 66 67 mediasource_test(function(test, mediaElement, mediaSource) 68 { 69 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); 70 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); 71 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); 72 var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE); 73 74 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]); 75 76 test.waitForExpectedEvents(function() 77 { 78 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]); 79 80 // Force the media element to close the MediaSource object. 81 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers"); 82 test.expectEvent(mediaSource, "sourceclose", "mediaSource closing"); 83 mediaElement.src = ""; 84 }); 85 86 test.waitForExpectedEvents(function() 87 { 88 assert_equals(mediaSource.readyState, "closed", "mediaSource is closed."); 89 90 verifySourceBufferLists(mediaSource, []); 91 test.done(); 92 }); 93 }, "Test that only 1 removesourcebuffer event fires on each SourceBufferList when the MediaSource closes."); 94 95 </script> 96 </body> 97 </html>