<!DOCTYPE html> <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> <html> <head> <title>MediaSource.readyState equals "closed" 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> 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(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_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(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>