<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<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_dom("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_js(TypeError,
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_dom("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_dom("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 not 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 not 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");
</script>
</body>
</html>