mediasource-removesourcebuffer.html (8069B)
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>MediaSource.removeSourceBuffer() 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 mediasource_test(function(test, mediaElement, mediaSource) 14 { 15 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 16 assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned"); 17 18 mediaSource.removeSourceBuffer(sourceBuffer); 19 20 var sourceBuffer2 = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 21 assert_class_string(sourceBuffer2, "SourceBuffer", "New SourceBuffer returned"); 22 assert_not_equals(sourceBuffer, sourceBuffer2, "SourceBuffers are different instances."); 23 assert_equals(mediaSource.sourceBuffers.length, 1, "sourceBuffers.length == 1"); 24 25 test.done(); 26 }, "Test addSourceBuffer(), removeSourceBuffer(), addSourceBuffer() sequence."); 27 28 mediasource_test(function(test, mediaElement, mediaSource) 29 { 30 assert_throws_js(TypeError, 31 function() { mediaSource.removeSourceBuffer(null); }, 32 "removeSourceBuffer() threw an exception when passed null."); 33 test.done(); 34 }, "Test removeSourceBuffer() with null"); 35 36 mediasource_test(function(test, mediaElement, mediaSource) 37 { 38 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 39 assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned"); 40 41 mediaSource.removeSourceBuffer(sourceBuffer); 42 43 assert_throws_dom("NotFoundError", 44 function() { mediaSource.removeSourceBuffer(sourceBuffer); }, 45 "removeSourceBuffer() threw an exception for a SourceBuffer that was already removed."); 46 47 test.done(); 48 }, "Test calling removeSourceBuffer() twice with the same object."); 49 50 mediasource_test(function(test, mediaElement1, mediaSource1) 51 { 52 var sourceBuffer1 = mediaSource1.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE); 53 assert_class_string(sourceBuffer1, "SourceBuffer", "New SourceBuffer returned"); 54 55 var mediaElement2 = document.createElement("video"); 56 document.body.appendChild(mediaElement2); 57 test.add_cleanup(function() { document.body.removeChild(mediaElement2); }); 58 59 var mediaSource2 = new MediaSource(); 60 var mediaSource2URL = URL.createObjectURL(mediaSource2); 61 mediaElement2.src = mediaSource2URL; 62 test.expectEvent(mediaSource2, "sourceopen", "Second MediaSource opened"); 63 test.waitForExpectedEvents(function() 64 { 65 URL.revokeObjectURL(mediaSource2URL); 66 67 var sourceBuffer2 = mediaSource2.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); 68 assert_class_string(sourceBuffer2, "SourceBuffer", "Second new SourceBuffer returned"); 69 assert_not_equals(mediaSource1, mediaSource2, "MediaSources are different instances"); 70 assert_not_equals(sourceBuffer1, sourceBuffer2, "SourceBuffers are different instances"); 71 assert_equals(mediaSource1.sourceBuffers[0], sourceBuffer1); 72 assert_equals(mediaSource2.sourceBuffers[0], sourceBuffer2); 73 assert_throws_dom("NotFoundError", 74 function() { mediaSource1.removeSourceBuffer(sourceBuffer2); }, 75 "MediaSource1.removeSourceBuffer() threw an exception for SourceBuffer2"); 76 assert_throws_dom("NotFoundError", 77 function() { mediaSource2.removeSourceBuffer(sourceBuffer1); }, 78 "MediaSource2.removeSourceBuffer() threw an exception for SourceBuffer1"); 79 mediaSource1.removeSourceBuffer(sourceBuffer1); 80 mediaSource2.removeSourceBuffer(sourceBuffer2); 81 test.done(); 82 }); 83 }, "Test calling removeSourceBuffer() for a sourceBuffer belonging to a different mediaSource instance."); 84 85 mediasource_test(function(test, mediaElement, mediaSource) 86 { 87 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 88 assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned"); 89 90 mediaSource.endOfStream(); 91 assert_equals(mediaSource.readyState, "ended", "MediaSource in ended state"); 92 mediaSource.removeSourceBuffer(sourceBuffer); 93 94 assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty"); 95 assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty"); 96 97 test.done(); 98 }, "Test calling removeSourceBuffer() in ended state."); 99 100 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 101 { 102 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 103 104 test.expectEvent(sourceBuffer, "updateend", "initSegment append ended."); 105 test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata done."); 106 sourceBuffer.appendBuffer(initSegment); 107 108 test.waitForExpectedEvents(function() 109 { 110 assert_equals(mediaSource.sourceBuffers.length, 1, "MediaSource.sourceBuffers is not empty"); 111 assert_equals(mediaSource.activeSourceBuffers.length, 1, "MediaSource.activesourceBuffers is not empty"); 112 assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA); 113 assert_equals(mediaSource.duration, segmentInfo.duration); 114 test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "SourceBuffer removed from activeSourceBuffers."); 115 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "SourceBuffer removed."); 116 mediaSource.removeSourceBuffer(sourceBuffer); 117 }); 118 119 test.waitForExpectedEvents(function() 120 { 121 assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty"); 122 assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty"); 123 test.done(); 124 }); 125 }, "Test removesourcebuffer event on activeSourceBuffers."); 126 127 mediasource_test(function(test, mediaElement, mediaSource) 128 { 129 mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'")); 130 var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE; 131 var sourceBuffer = mediaSource.addSourceBuffer(mimetype); 132 sourceBuffer.appendBuffer(new Uint8Array(0)); 133 assert_true(sourceBuffer.updating, "Updating flag set when a buffer is appended."); 134 test.expectEvent(sourceBuffer, 'abort'); 135 test.expectEvent(sourceBuffer, 'updateend'); 136 137 mediaSource.removeSourceBuffer(sourceBuffer); 138 assert_false(sourceBuffer.updating, "Updating flag reset after abort."); 139 test.waitForExpectedEvents(function() 140 { 141 test.done(); 142 }); 143 }, "Test abort event when removeSourceBuffer() called while SourceBuffer is updating"); 144 </script> 145 </body> 146 </html>