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 | |
8 <link rel='stylesheet' href='/w3c/resources/testharness.css'> | |
9 </head> | 7 </head> |
10 <body> | 8 <body> |
11 <div id="log"></div> | |
12 <script> | 9 <script> |
13 mediasource_testafterdataloaded(function(test, mediaElement, mediaSour
ce, segmentInfo, sourceBuffer, mediaData) | 10 function loadMediaAndVerifyAddedTracks(test, mediaElement, segmentIn
fo, sourceBuffer, mediaData, successCallback) |
14 { | 11 { |
15 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, se
gmentInfo.init); | 12 var initSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.init); |
16 test.expectEvent(sourceBuffer, 'updateend', 'initSegment append en
ded.'); | 13 test.expectEvent(sourceBuffer.audioTracks, "addtrack", "sourceBu
ffer.audioTracks addtrack event"); |
17 test.expectEvent(sourceBuffer.audioTracks, 'addtrack', 'sourceBuff
er.videoTracks addtrack event'); | 14 test.expectEvent(sourceBuffer.videoTracks, "addtrack", "sourceBu
ffer.videoTracks addtrack event"); |
18 test.expectEvent(sourceBuffer.videoTracks, 'addtrack', 'sourceBuff
er.videoTracks addtrack event'); | 15 test.expectEvent(mediaElement.audioTracks, "addtrack", "mediaEle
ment.audioTracks addtrack event"); |
19 test.expectEvent(mediaElement.audioTracks, 'addtrack', 'mediaEleme
nt.videoTracks addtrack event'); | 16 test.expectEvent(mediaElement.videoTracks, "addtrack", "mediaEle
ment.videoTracks addtrack event"); |
20 test.expectEvent(mediaElement.videoTracks, 'addtrack', 'mediaEleme
nt.videoTracks addtrack event'); | 17 test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata
done."); |
21 sourceBuffer.appendBuffer(initSegment); | 18 test.expectEvent(sourceBuffer, "updateend", "initSegment append
ended."); |
22 test.waitForExpectedEvents(function() | 19 sourceBuffer.appendBuffer(initSegment); |
23 { | 20 test.waitForExpectedEvents(function() |
| 21 { |
| 22 assert_equals(sourceBuffer.videoTracks.length, 1, "videoTrac
ks.length"); |
| 23 assert_equals(sourceBuffer.videoTracks[0].kind, "main", "vid
eoTrack.kind"); |
| 24 assert_equals(sourceBuffer.videoTracks[0].label, "", "videoT
rack.label"); |
| 25 assert_equals(sourceBuffer.videoTracks[0].language, "eng", "
videoTrack.language"); |
| 26 assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sour
ceBuffer, "videoTrack.sourceBuffer"); |
| 27 // The first video track is selected by default. |
| 28 assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuf
fer.videoTracks[0].selected"); |
| 29 |
| 30 assert_equals(sourceBuffer.audioTracks.length, 1, "audioTrac
ks.length"); |
| 31 assert_equals(sourceBuffer.audioTracks[0].kind, "main", "aud
ioTrack.kind"); |
| 32 assert_equals(sourceBuffer.audioTracks[0].label, "", "audioT
rack.label"); |
| 33 assert_equals(sourceBuffer.audioTracks[0].language, "eng", "
audioTrack.language"); |
| 34 assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sour
ceBuffer, "audioTrack.sourceBuffer"); |
| 35 // The first audio track is enabled by default. |
| 36 assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuff
er.audioTracks[0].enabled"); |
| 37 |
| 38 assert_not_equals(sourceBuffer.audioTracks[0].id, sourceBuff
er.videoTracks[0].id, "track ids must be unique"); |
| 39 |
| 40 assert_equals(mediaElement.videoTracks.length, 1, "videoTrac
ks.length"); |
| 41 assert_equals(mediaElement.videoTracks[0], sourceBuffer.vide
oTracks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack"); |
| 42 |
| 43 assert_equals(mediaElement.audioTracks.length, 1, "audioTrac
ks.length"); |
| 44 assert_equals(mediaElement.audioTracks[0], sourceBuffer.audi
oTracks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack"); |
| 45 |
| 46 successCallback(); |
| 47 }); |
| 48 } |
| 49 |
| 50 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo
urce, segmentInfo, sourceBuffer, mediaData) |
| 51 { |
| 52 loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, s
ourceBuffer, mediaData, test.step_func_done()); |
| 53 }, "Check that media tracks and their properties are populated prope
rly"); |
| 54 |
| 55 function verifyTrackRemoval(test, mediaElement, mediaSource, sourceB
uffer, trackRemovalAction, successCallback) { |
| 56 assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.l
ength"); |
| 57 assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.a
udioTracks[0].enabled"); |
24 assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.l
ength"); | 58 assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.l
ength"); |
25 assert_equals(sourceBuffer.videoTracks[0].id, "1", "videoTrack.i
d"); | |
26 assert_equals(sourceBuffer.videoTracks[0].kind, "main", "videoTr
ack.kind"); | |
27 assert_equals(sourceBuffer.videoTracks[0].label, "", "videoTrack
.label"); | |
28 assert_equals(sourceBuffer.videoTracks[0].language, "eng", "vide
oTrack.language"); | |
29 assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sourceBu
ffer, "videoTrack.sourceBuffer"); | |
30 // The first video track is selected by default. | |
31 assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.
videoTracks[0].selected"); | 59 assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.
videoTracks[0].selected"); |
32 | 60 |
33 assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.l
ength"); | 61 var audioTrack = sourceBuffer.audioTracks[0]; |
34 assert_equals(sourceBuffer.audioTracks[0].id, "2", "audioTrack.i
d"); | 62 var videoTrack = sourceBuffer.videoTracks[0]; |
35 assert_equals(sourceBuffer.audioTracks[0].kind, "main", "audioTr
ack.kind"); | |
36 assert_equals(sourceBuffer.audioTracks[0].label, "", "audioTrack
.label"); | |
37 assert_equals(sourceBuffer.audioTracks[0].language, "eng", "audi
oTrack.language"); | |
38 assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sourceBu
ffer, "audioTrack.sourceBuffer"); | |
39 // The first audio track is enabled by default. | |
40 assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.a
udioTracks[0].enabled"); | |
41 | 63 |
42 assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.l
ength"); | 64 // Verify removetrack events. |
43 assert_equals(mediaElement.videoTracks[0], sourceBuffer.videoTra
cks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack"); | 65 test.expectEvent(sourceBuffer.audioTracks, "removetrack", "sourc
eBuffer.audioTracks removetrack event"); |
| 66 test.expectEvent(sourceBuffer.videoTracks, "removetrack", "sourc
eBuffer.videoTracks removetrack event"); |
| 67 test.expectEvent(mediaElement.audioTracks, "removetrack", "media
Element.audioTracks removetrack event"); |
| 68 test.expectEvent(mediaElement.videoTracks, "removetrack", "media
Element.videoTracks removetrack event"); |
44 | 69 |
45 assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.l
ength"); | 70 // Removing enabled audio track and selected video track should
fire "change" events on mediaElement track lists. |
46 assert_equals(mediaElement.audioTracks[0], sourceBuffer.audioTra
cks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack"); | 71 test.expectEvent(mediaElement.audioTracks, "change", "mediaEleme
nt.audioTracks changed."); |
| 72 test.expectEvent(mediaElement.videoTracks, "change", "mediaEleme
nt.videoTracks changed."); |
47 | 73 |
48 test.done(); | 74 trackRemovalAction(); |
49 }); | 75 |
50 }, "MediaSource media track properties"); | 76 test.waitForExpectedEvents(function() |
| 77 { |
| 78 assert_equals(mediaSource.sourceBuffers.length, 0, "mediaSou
rce.sourceBuffers.length"); |
| 79 assert_equals(mediaElement.videoTracks.length, 0, "videoTrac
ks.length"); |
| 80 assert_equals(mediaElement.audioTracks.length, 0, "audioTrac
ks.length"); |
| 81 assert_equals(sourceBuffer.videoTracks.length, 0, "videoTrac
ks.length"); |
| 82 assert_equals(sourceBuffer.audioTracks.length, 0, "audioTrac
ks.length"); |
| 83 // Since audio and video tracks have been removed, their .so
urceBuffer property should be null now. |
| 84 assert_equals(audioTrack.sourceBuffer, null, "audioTrack.sou
rceBuffer"); |
| 85 assert_equals(videoTrack.sourceBuffer, null, "videoTrack.sou
rceBuffer"); |
| 86 successCallback(); |
| 87 }); |
| 88 } |
| 89 |
| 90 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo
urce, segmentInfo, sourceBuffer, mediaData) |
| 91 { |
| 92 loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, s
ourceBuffer, mediaData, test.step_func(function () |
| 93 { |
| 94 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu
ffer, test.step_func(function () |
| 95 { |
| 96 mediaSource.removeSourceBuffer(sourceBuffer); |
| 97 }), test.step_func_done()); |
| 98 })); |
| 99 }, "Media tracks must be removed when the SourceBuffer is removed fr
om the MediaSource"); |
| 100 |
| 101 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo
urce, segmentInfo, sourceBuffer, mediaData) |
| 102 { |
| 103 loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, s
ourceBuffer, mediaData, test.step_func(function () |
| 104 { |
| 105 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu
ffer, test.step_func(function () |
| 106 { |
| 107 mediaElement.src = ""; |
| 108 }), test.step_func_done()); |
| 109 })); |
| 110 }, "Media tracks must be removed when the HTMLMediaElement.src is ch
anged"); |
| 111 |
| 112 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo
urce, segmentInfo, sourceBuffer, mediaData) |
| 113 { |
| 114 loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, s
ourceBuffer, mediaData, test.step_func(function () |
| 115 { |
| 116 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu
ffer, test.step_func(function () |
| 117 { |
| 118 mediaElement.load(); |
| 119 }), test.step_func_done()); |
| 120 })); |
| 121 }, "Media tracks must be removed when the HTMLMediaElement.load() is
called"); |
| 122 |
51 </script> | 123 </script> |
52 </body> | 124 </body> |
53 </html> | 125 </html> |
54 | 126 |
OLD | NEW |