OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <script src="/w3c/resources/testharness.js"></script> | 4 <script src="/w3c/resources/testharness.js"></script> |
5 <script src="/w3c/resources/testharnessreport.js"></script> | 5 <script src="/w3c/resources/testharnessreport.js"></script> |
6 <script src="mediasource-util.js"></script> | 6 <script src="mediasource-util.js"></script> |
7 | 7 |
8 <link rel='stylesheet' href='/w3c/resources/testharness.css'> | 8 <link rel='stylesheet' href='/w3c/resources/testharness.css'> |
9 </head> | 9 </head> |
10 <body> | 10 <body> |
11 <div id="log"></div> | 11 <div id="log"></div> |
12 <script> | 12 <script> |
13 function verifySourceBufferLists(mediaSource, expected) | 13 function verifySourceBufferLists(mediaSource, expected) |
14 { | 14 { |
15 assert_equals(mediaSource.sourceBuffers.length, expected.length, "
sourceBuffers length"); | 15 assert_equals(mediaSource.sourceBuffers.length, expected.length, "
sourceBuffers length"); |
16 assert_equals(mediaSource.activeSourceBuffers.length, expected.len
gth, "activeSourceBuffers length"); | 16 assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSo
urceBuffers length"); |
17 for (var i = 0; i < expected.length; ++i) { | 17 for (var i = 0; i < expected.length; ++i) |
18 assert_equals(mediaSource.sourceBuffers[i], expected[i], "Verify
ing mediaSource.sourceBuffers[" + i + "]"); | 18 assert_equals(mediaSource.sourceBuffers[i], expected[i], "Verify
ing mediaSource.sourceBuffers[" + i + "]"); |
19 assert_equals(mediaSource.activeSourceBuffers[i], expected[i], "
Verifying mediaSource.activeSourceBuffers[" + i + "]"); | |
20 } | |
21 } | 19 } |
22 | 20 |
23 mediasource_test(function(test, mediaElement, mediaSource) | 21 mediasource_test(function(test, mediaElement, mediaSource) |
24 { | 22 { |
25 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); | 23 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); |
26 test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer
", "activeSourceBuffers"); | |
27 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); | 24 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); |
28 var sourceBufferB = null; | 25 var sourceBufferB = null; |
29 | 26 |
30 test.waitForExpectedEvents(function() | 27 test.waitForExpectedEvents(function() |
31 { | 28 { |
32 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer",
"sourceBuffers"); | 29 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer",
"sourceBuffers"); |
33 test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebu
ffer", "activeSourceBuffers"); | |
34 sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AU
DIO_ONLY_TYPE); | 30 sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AU
DIO_ONLY_TYPE); |
35 | 31 |
36 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBuf
ferB]); | 32 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBuf
ferB]); |
37 }); | 33 }); |
38 | 34 |
39 test.waitForExpectedEvents(function() | 35 test.waitForExpectedEvents(function() |
40 { | 36 { |
41 test.expectEvent(mediaSource.activeSourceBuffers, "removesourc
ebuffer", "activeSourceBuffers"); | |
42 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffe
r", "sourceBuffers"); | 37 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffe
r", "sourceBuffers"); |
43 mediaSource.removeSourceBuffer(sourceBufferA); | 38 mediaSource.removeSourceBuffer(sourceBufferA); |
44 | 39 |
45 verifySourceBufferLists(mediaSource, [sourceBufferB]); | 40 verifySourceBufferLists(mediaSource, [sourceBufferB]); |
46 | 41 |
47 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer",
"sourceBuffers"); | 42 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer",
"sourceBuffers"); |
48 test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebu
ffer", "activeSourceBuffers"); | |
49 sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); | 43 sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); |
50 | 44 |
51 verifySourceBufferLists(mediaSource, [sourceBufferB, sourceBuf
ferA]); | 45 verifySourceBufferLists(mediaSource, [sourceBufferB, sourceBuf
ferA]); |
52 }); | 46 }); |
53 | 47 |
54 test.waitForExpectedEvents(function() | 48 test.waitForExpectedEvents(function() |
55 { | 49 { |
56 test.done(); | 50 test.done(); |
57 }); | 51 }); |
58 }, "Test SourceBufferList event dispatching."); | 52 }, "Test SourceBufferList event dispatching."); |
59 | 53 |
60 mediasource_test(function(test, mediaElement, mediaSource) | 54 mediasource_test(function(test, mediaElement, mediaSource) |
61 { | 55 { |
62 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); | 56 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); |
63 test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer
", "activeSourceBuffers"); | |
64 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); | 57 test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "so
urceBuffers"); |
65 test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer
", "activeSourceBuffers"); | |
66 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); | 58 var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VI
DEO_ONLY_TYPE); |
67 var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AU
DIO_ONLY_TYPE); | 59 var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AU
DIO_ONLY_TYPE); |
68 | 60 |
69 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB
]); | 61 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB
]); |
70 | 62 |
71 test.waitForExpectedEvents(function() | 63 test.waitForExpectedEvents(function() |
72 { | 64 { |
73 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBuf
ferB]); | 65 verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBuf
ferB]); |
74 | 66 |
75 // Force the media element to close the MediaSource object. | 67 // Force the media element to close the MediaSource object. |
76 test.expectEvent(mediaSource.activeSourceBuffers, "removesourc
ebuffer", "activeSourceBuffers"); | |
77 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffe
r", "sourceBuffers"); | 68 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffe
r", "sourceBuffers"); |
78 test.expectEvent(mediaSource, "sourceclose", "mediaSource clos
ing"); | 69 test.expectEvent(mediaSource, "sourceclose", "mediaSource clos
ing"); |
| 70 test.expectEvent(mediaElement, "error", "mediaElement error lo
ading"); |
79 mediaElement.src = ""; | 71 mediaElement.src = ""; |
80 }); | 72 }); |
81 | 73 |
82 test.waitForExpectedEvents(function() | 74 test.waitForExpectedEvents(function() |
83 { | 75 { |
| 76 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_SR
C_NOT_SUPPORTED, "Expected error code"); |
84 assert_equals(mediaSource.readyState, "closed", "mediaSource i
s closed."); | 77 assert_equals(mediaSource.readyState, "closed", "mediaSource i
s closed."); |
85 | 78 |
86 verifySourceBufferLists(mediaSource, []); | 79 verifySourceBufferLists(mediaSource, []); |
87 test.done(); | 80 test.done(); |
88 }); | 81 }); |
89 }, "Test that only 1 removesourcebuffer event fires on each SourceBuff
erList when the MediaSource closes."); | 82 }, "Test that only 1 removesourcebuffer event fires on sourceBuffers w
hen the MediaSource closes."); |
90 | 83 |
| 84 mediasource_testafterdataloaded(function(test, mediaElement, mediaSour
ce, segmentInfo, sourceBuffer, mediaData) |
| 85 { |
| 86 // FIXME: Test two activeSourceBuffers, either demuxed or once mul
titrack is supported. |
| 87 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, se
gmentInfo.init); |
| 88 |
| 89 test.expectEvent(sourceBuffer, "updateend", "initSegment append en
ded."); |
| 90 test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata d
one."); |
| 91 sourceBuffer.appendBuffer(initSegment); |
| 92 |
| 93 test.waitForExpectedEvents(function() |
| 94 { |
| 95 assert_equals(mediaSource.sourceBuffers.length, 1, "mediaSourc
e sourceBuffers"); |
| 96 assert_equals(mediaSource.activeSourceBuffers.length, 1, "medi
aSource activeSourceBuffers"); |
| 97 |
| 98 // Force the media element to close the MediaSource object. |
| 99 test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffe
r", "sourcebuffers"); |
| 100 test.expectEvent(mediaSource.activeSourceBuffers, "removesourc
ebuffer", "activesourcebuffers"); |
| 101 test.expectEvent(mediaSource, "sourceclose", "mediaSource clos
ing"); |
| 102 test.expectEvent(mediaElement, "error", "mediaElement error lo
ading"); |
| 103 mediaElement.src = ""; |
| 104 }); |
| 105 |
| 106 test.waitForExpectedEvents(function() |
| 107 { |
| 108 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_SR
C_NOT_SUPPORTED, "Expected error code"); |
| 109 assert_equals(mediaSource.readyState, "closed", "mediaSource i
s closed."); |
| 110 assert_equals(mediaSource.sourceBuffers.length, 0, "mediaSourc
e sourceBuffers"); |
| 111 assert_equals(mediaSource.activeSourceBuffers.length, 0, "medi
aSource activeSourceBuffers"); |
| 112 test.done(); |
| 113 }); |
| 114 }, "Test removesourcebuffer event firing on sourceBuffers and activeSo
urceBuffers when MediaSource closes.", { allow_media_element_error: true } ); |
91 </script> | 115 </script> |
92 </body> | 116 </body> |
93 </html> | 117 </html> |
OLD | NEW |