Chromium Code Reviews| 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, mediaSour ce, segmentInfo, sourceBuffer, mediaData, successCallback) |
|
wolenetz
2016/04/28 00:46:47
nit: mediaSource is unused param. remove please.
servolk
2016/04/28 18:37:53
Done.
| |
| 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].id, "1", "videoTra ck.id"); | |
|
wolenetz
2016/04/28 00:46:46
nit: to help upstream this, all that's needed is f
servolk
2016/04/28 18:37:53
Done.
| |
| 24 assert_equals(sourceBuffer.videoTracks[0].kind, "main", "vid eoTrack.kind"); | |
| 25 assert_equals(sourceBuffer.videoTracks[0].label, "", "videoT rack.label"); | |
| 26 assert_equals(sourceBuffer.videoTracks[0].language, "eng", " videoTrack.language"); | |
| 27 assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sour ceBuffer, "videoTrack.sourceBuffer"); | |
| 28 // The first video track is selected by default. | |
| 29 assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuf fer.videoTracks[0].selected"); | |
| 30 | |
| 31 assert_equals(sourceBuffer.audioTracks.length, 1, "audioTrac ks.length"); | |
| 32 assert_equals(sourceBuffer.audioTracks[0].id, "2", "audioTra ck.id"); | |
|
wolenetz
2016/04/28 00:46:47
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 33 assert_equals(sourceBuffer.audioTracks[0].kind, "main", "aud ioTrack.kind"); | |
| 34 assert_equals(sourceBuffer.audioTracks[0].label, "", "audioT rack.label"); | |
| 35 assert_equals(sourceBuffer.audioTracks[0].language, "eng", " audioTrack.language"); | |
| 36 assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sour ceBuffer, "audioTrack.sourceBuffer"); | |
| 37 // The first audio track is enabled by default. | |
| 38 assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuff er.audioTracks[0].enabled"); | |
| 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, mediaSource, s egmentInfo, sourceBuffer, mediaData, function() { test.done(); }); | |
| 53 }, "Check that media tracks and their properties are populated prope rly"); | |
| 54 | |
| 55 function verifyTrackRemoval(test, mediaElement, mediaSource, segment Info, sourceBuffer, mediaData, trackRemovalAction, successCallback) { | |
|
wolenetz
2016/04/28 00:46:46
nit: mediaSource, segmentInfo, mediaData are unuse
servolk
2016/04/28 18:37:53
mediaSource is used to verify that sourceBuffers c
wolenetz
2016/04/28 18:48:29
Acknowledged.
| |
| 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, mediaSource, s egmentInfo, sourceBuffer, mediaData, function() { | |
|
wolenetz
2016/04/28 00:46:47
nit: s/function()/test.step_func()/
servolk
2016/04/28 18:37:53
Done.
| |
| 93 verifyTrackRemoval(test, mediaElement, mediaSource, segmentI nfo, sourceBuffer, mediaData, function removeSB() { | |
|
wolenetz
2016/04/28 00:46:46
nit: s/function removeSB()/test.step_func()/
servolk
2016/04/28 18:37:53
Done.
| |
| 94 mediaSource.removeSourceBuffer(sourceBuffer); | |
| 95 }, function successCallback() { | |
|
wolenetz
2016/04/28 00:46:46
nit: s/function successCallback(){...}/test.step_f
servolk
2016/04/28 18:37:52
Done.
| |
| 96 test.done(); | |
| 97 }); | |
| 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, mediaSource, s egmentInfo, sourceBuffer, mediaData, function() { | |
|
wolenetz
2016/04/28 00:46:47
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 104 verifyTrackRemoval(test, mediaElement, mediaSource, segmentI nfo, sourceBuffer, mediaData, function removeSB() { | |
|
wolenetz
2016/04/28 00:46:47
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 105 mediaElement.src = ""; | |
| 106 }, function successCallback() { | |
|
wolenetz
2016/04/28 00:46:47
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 107 test.done(); | |
| 108 }); | |
| 109 }); | |
| 110 }, "Media tracks must be removed when the HTMLMediaElement is reset" ); | |
|
wolenetz
2016/04/28 00:46:46
nit:s/is reset/src is changed/
servolk
2016/04/28 18:37:52
Done.
| |
| 111 | |
| 112 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) | |
| 113 { | |
| 114 loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, s egmentInfo, sourceBuffer, mediaData, function() { | |
|
wolenetz
2016/04/28 00:46:47
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 115 verifyTrackRemoval(test, mediaElement, mediaSource, segmentI nfo, sourceBuffer, mediaData, function removeSB() { | |
|
wolenetz
2016/04/28 00:46:46
nit ditto
servolk
2016/04/28 18:37:53
Done.
| |
| 116 mediaElement.load(); | |
| 117 }, function successCallback() { | |
| 118 test.done(); | |
|
wolenetz
2016/04/28 00:46:46
nit ditto
servolk
2016/04/28 18:37:52
Done.
| |
| 119 }); | |
| 120 }); | |
| 121 }, "Media tracks must be removed when the HTMLMediaElement is reset" ); | |
|
wolenetz
2016/04/28 00:46:46
nit:s/is reset/load() is called/
servolk
2016/04/28 18:37:53
Done.
| |
| 122 | |
| 51 </script> | 123 </script> |
| 52 </body> | 124 </body> |
| 53 </html> | 125 </html> |
| 54 | 126 |
| OLD | NEW |