|  | <!DOCTYPE html> | 
|  | <html> | 
|  | <head> | 
|  | <title>MediaSource.addSourceBuffer() test cases</title> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  | <script src="mediasource-util.js"></script> | 
|  | </head> | 
|  | <body> | 
|  | <div id="log"></div> | 
|  | <script> | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | mediaSource.endOfStream(); | 
|  | assert_throws("InvalidStateError", | 
|  | function() { mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); }, | 
|  | "addSourceBuffer() threw an exception when in 'ended' state."); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() in 'ended' state."); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | assert_throws("InvalidAccessError", | 
|  | function() { mediaSource.addSourceBuffer(""); }, | 
|  | "addSourceBuffer() threw an exception when passed an empty string."); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with empty type"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | assert_throws("NotSupportedError", | 
|  | function() { mediaSource.addSourceBuffer(null); }, | 
|  | "addSourceBuffer() threw an exception when passed null."); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with null"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | assert_throws("NotSupportedError", | 
|  | function() { mediaSource.addSourceBuffer("invalidType"); }, | 
|  | "addSourceBuffer() threw an exception for an unsupported type."); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with unsupported type"); | 
|  |  | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var mimetype = 'video/webm;codecs="vp8,vorbis"'; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported"); | 
|  |  | 
|  | var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 
|  | assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with Vorbis and VP8"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var videoMimetype = 'video/webm;codecs="vp8"'; | 
|  | var audioMimetype = 'audio/webm;codecs="vorbis"'; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported"); | 
|  | assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported"); | 
|  |  | 
|  | var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype); | 
|  | var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers"); | 
|  | assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var mimetype = MediaSourceUtil.VIDEO_ONLY_TYPE; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported"); | 
|  |  | 
|  | var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 
|  | assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() video only"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var mimetype = MediaSourceUtil.AUDIO_ONLY_TYPE; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported"); | 
|  |  | 
|  | var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 
|  | assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() audio only"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var mimetype = 'video/mp4;codecs="avc1.4D4001,mp4a.40.2"'; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported"); | 
|  |  | 
|  | var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 
|  | assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with AAC and H.264"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var videoMimetype = 'video/mp4;codecs="avc1.4D4001"'; | 
|  | var audioMimetype = 'audio/mp4;codecs="mp4a.40.2"'; | 
|  |  | 
|  | assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported"); | 
|  | assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported"); | 
|  |  | 
|  | var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype); | 
|  | var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype); | 
|  | assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers"); | 
|  | assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers"); | 
|  | assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers"); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers"); | 
|  |  | 
|  | mediasource_test(function(test, mediaElement, mediaSource) | 
|  | { | 
|  | var reachedLimit = false; | 
|  |  | 
|  | // The 20 here is an arbitrary upper limit to make sure the test terminates. This test | 
|  | // assumes that implementations won't support more than 20 SourceBuffers simultaneously. | 
|  | for (var i = 0; i < 20; ++i) { | 
|  | try { | 
|  | mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); | 
|  | } catch(e) { | 
|  | assert_equals(e.name, "QuotaExceededError"); | 
|  | reachedLimit = true; | 
|  | break; | 
|  | } | 
|  | } | 
|  | assert_true(reachedLimit, "Reached SourceBuffer limit."); | 
|  | test.done(); | 
|  | }, "Test addSourceBuffer() QuotaExceededError."); | 
|  |  | 
|  | </script> | 
|  | </body> | 
|  | </html> |