4 <script src="/media-resources/video-test.js"></script>
5 <script src="/media/resources/media-source/webm/segment-info.js"></script>
6 <script src="webkitmediasource-util.js"></script>
8 var segmentHelper = new MediaSourceTest.SegmentHelper(WebMSegmentInfo.testWebM);
9 var defaultSourceMimetype = segmentHelper.segmentInfo.type;
11 function expectExceptionOnAddBuffer(type, error)
14 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(type);
15 failTest("Expected an exception");
17 if (!(e.code == error)) {
18 failTest("Unexpected exception " + e);
21 consoleWrite("Got expected exception " + e);
25 function expectExceptionOnRemoveBuffer(buffer, error)
28 mediaSource.removeSourceBuffer(buffer);
29 failTest("Expected an exception");
31 if (!(e.code == error)) {
32 failTest("Unexpected exception " + e);
35 consoleWrite("Got expected exception " + e);
39 function expectExceptionOnAppend(buf, error)
42 segmentHelper.sourceBuffer.append(buf);
43 failTest("Expected an exception");
45 if (!(e.code == error)) {
46 failTest("Unexpected exception " + e);
49 consoleWrite("Got expected exception " + e);
53 function testAddBufferWhileClosed(videoTag)
55 consoleWrite("Test adding an ID while closed.");
56 expectExceptionOnAddBuffer(defaultSourceMimetype, DOMException.INVALID_STATE_ERR);
59 function testAddBufferFailureCases(runNextTestCase, videoTag)
61 consoleWrite("Test empty type.");
62 expectExceptionOnAddBuffer("", DOMException.INVALID_ACCESS_ERR);
64 consoleWrite("Test an unsupported type.");
65 expectExceptionOnAddBuffer("audio/x-unsupported-format", DOMException.NOT_SUPPORTED_ERR);
67 consoleWrite("Test a supported type with an unsupported codec.");
68 expectExceptionOnAddBuffer("video/webm; codecs=\"vp8, speex\"", DOMException.NOT_SUPPORTED_ERR);
70 consoleWrite("Test reaching sourceID limit.");
71 var reachedIdLimit = false;
73 // The 20 here is an arbitrary upper limit to make sure the test terminates. This test
74 // assumes that implementations won't support more than 20 sourceID's simultaneously.
75 for (var i = 0; i < 20; ++i) {
77 mediaSource.addSourceBuffer(defaultSourceMimetype);
79 if (e.code != DOMException.QUOTA_EXCEEDED_ERR) {
80 failTest("Unexpected exception " + e);
83 reachedIdLimit = true;
88 if (!reachedIdLimit) {
89 failTest("Failed to reach SourceID limit.");
93 consoleWrite("Test that SourceBuffers can't be added while in the ended state.");
94 mediaSource.endOfStream();
95 expectExceptionOnAddBuffer(defaultSourceMimetype, DOMException.INVALID_STATE_ERR);
100 function testRemoveNullBuffer(runNextTestCase, videoTag)
102 consoleWrite("Test null buffer case");
103 expectExceptionOnRemoveBuffer(null, DOMException.INVALID_ACCESS_ERR);
108 function testRemoveAgain(runNextTestCase, videoTag)
110 consoleWrite("Test removing a buffer that was already removed.");
111 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(defaultSourceMimetype);
112 mediaSource.removeSourceBuffer(segmentHelper.sourceBuffer);
113 expectExceptionOnRemoveBuffer(segmentHelper.sourceBuffer, DOMException.INVALID_STATE_ERR);
118 function testRemoveBufferAfterEnded(runNextTestCase, videoTag)
120 consoleWrite("Test that a buffer can be removed while in the ended state.");
121 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(defaultSourceMimetype);
122 mediaSource.endOfStream();
123 mediaSource.removeSourceBuffer(segmentHelper.sourceBuffer);
128 function testAddBufferAfterRemoving(runNextTestCase, videoTag)
130 consoleWrite("Test that a buffer can be added again after it is removed.");
131 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(defaultSourceMimetype);
132 mediaSource.removeSourceBuffer(segmentHelper.sourceBuffer);
135 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(defaultSourceMimetype);
137 consoleWrite("Unexpected exception: " + e);
143 function testAppendFailureCases(runNextTestCase, videoTag)
145 var initSegment = segmentHelper.initSegment;
146 var mediaSegment = segmentHelper.mediaSegments[0];
148 segmentHelper.sourceBuffer = mediaSource.addSourceBuffer(defaultSourceMimetype);
150 consoleWrite("Test a successful append.");
151 segmentHelper.sourceBuffer.append(initSegment);
153 consoleWrite("Test append with a null buffer.");
154 expectExceptionOnAppend(null, DOMException.INVALID_ACCESS_ERR);
156 consoleWrite("Test append after buffer has been removed.");
157 mediaSource.removeSourceBuffer(segmentHelper.sourceBuffer);
158 expectExceptionOnAppend(initSegment, DOMException.INVALID_STATE_ERR);
167 mediaSource = new WebKitMediaSource();
168 waitForEvent('webkitsourceopen', "", false, false, mediaSource);
170 segmentHelper.init(video, function(success)
173 failTest("Failed to load segment data");
177 testAddBufferWhileClosed(video);
180 testAddBufferFailureCases,
181 testRemoveNullBuffer,
183 testRemoveBufferAfterEnded,
184 testAddBufferAfterRemoving,
185 testAppendFailureCases,
188 MediaSourceTest.startSourceOpenTesting(video, testCases);
193 <body onload="onLoad()">
195 <p>Tests webkitSourceAddId() & webkitSourceRemoveId() methods</p>