<!DOCTYPE html>
<html>
<head>
<script src="/w3c/resources/testharness.js"></script>
<script src="/w3c/resources/testharnessreport.js"></script>
<script src="mediasource-util.js"></script>
<link rel='stylesheet' href='/w3c/resources/testharness.css'>
</head>
<body>
<div id="log"></div>
<script>
test(function ()
{
var mediaSource = new MediaSource();
assert_equals(mediaSource.sourceBuffers.length, 0, 'sourceBuffers is empty');
assert_equals(mediaSource.activeSourceBuffers.length, 0, 'activeSourceBuffers is empty');
assert_equals(mediaSource.readyState, 'closed', 'readyState is "closed"');
assert_true(Number.isNaN(mediaSource.duration), 'duration is NaN');
}, 'Test attribute values on a closed MediaSource object.');
test(function ()
{
var mediaSource = new MediaSource();
assert_throws_dom('InvalidStateError',
function() { mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); },
'addSourceBuffer() throws an exception when closed.');
}, 'Test addSourceBuffer() while closed.');
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
// Setup a handler to run when the MediaSource closes.
mediaSource.addEventListener('sourceclose', test.step_func(function (event)
{
assert_equals(mediaSource.sourceBuffers.length, 0, 'sourceBuffers is empty');
assert_equals(mediaSource.activeSourceBuffers.length, 0, 'activeSourceBuffers is empty');
assert_equals(mediaSource.readyState, 'closed', 'readyState is "closed"');
assert_true(Number.isNaN(mediaSource.duration), 'duration is NaN');
assert_throws_dom('NotFoundError',
function() { mediaSource.removeSourceBuffer(sourceBuffer); },
'removeSourceBuffer() throws an exception when closed.');
test.done();
}));
// Trigger the MediaSource to close.
mediaElement.src = '';
}, 'Test removeSourceBuffer() while closed.');
test(function ()
{
var mediaSource = new MediaSource();
assert_throws_dom('InvalidStateError',
function() { mediaSource.endOfStream(); },
'endOfStream() throws an exception when closed.');
}, 'Test endOfStream() while closed.');
test(function ()
{
var mediaSource = new MediaSource();
assert_throws_dom('InvalidStateError',
function() { mediaSource.endOfStream('decode'); },
'endOfStream(decode) throws an exception when closed.');
}, 'Test endOfStream(decode) while closed.');
test(function ()
{
var mediaSource = new MediaSource();
assert_throws_dom('InvalidStateError',
function() { mediaSource.endOfStream('network'); },
'endOfStream(network) throws an exception when closed.');
}, 'Test endOfStream(network) while closed.');
test(function ()
{
var mediaSource = new MediaSource();
assert_throws_dom('InvalidStateError',
function() { mediaSource.duration = 10; },
'Setting duration throws an exception when closed.');
}, 'Test setting duration while closed.');
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
assert_equals(mediaSource.readyState, 'open', 'readyState is "open"');
// Setup a handler to run when the MediaSource closes.
mediaSource.addEventListener('sourceclose', test.step_func(function (event)
{
assert_equals(mediaSource.readyState, 'closed', 'readyState is "closed"');
assert_throws_dom('InvalidStateError',
function() { mediaSource.duration = 10; },
'Setting duration when closed throws an exception');
test.done();
}));
// Trigger the MediaSource to close.
mediaElement.src = '';
}, 'Test setting duration while open->closed.');
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
assert_equals(mediaSource.readyState, 'open', 'readyState is "open"');
// Setup a handler to run when the MediaSource closes.
mediaSource.addEventListener('sourceclose', test.step_func(function (event)
{
assert_equals(mediaSource.readyState, 'closed', 'readyState is "closed"');
assert_true(Number.isNaN(mediaSource.duration), 'duration is NaN');
test.done();
}));
// Trigger the MediaSource to close.
mediaElement.src = '';
}, 'Test getting duration while open->closed.');
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
assert_equals(mediaSource.readyState, 'open', 'readyState is open');
// Setup a handler to run when the MediaSource closes.
mediaSource.addEventListener('sourceclose', test.step_func(function (event)
{
assert_equals(mediaSource.readyState, 'closed', 'readyState is closed');
assert_throws_dom('InvalidStateError',
function() { sourceBuffer.abort(); },
'sourceBuffer.abort() throws INVALID_STATE_ERROR');
test.done();
}));
// Trigger the MediaSource to close.
mediaElement.src = '';
}, 'Test sourcebuffer.abort when closed.');
</script>
</body>
</html>