Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-initsegmentreceived-alg.html |
| diff --git a/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-initsegmentreceived-alg.html b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-initsegmentreceived-alg.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f8d9c8ab802658591cfac609c6218b643c9ed74f |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-initsegmentreceived-alg.html |
| @@ -0,0 +1,113 @@ |
| +<!DOCTYPE html> |
| +<html> |
| + <head> |
| + <script src="/w3c/resources/testharness.js"></script> |
|
wolenetz
2016/06/27 19:31:06
nits: Since this is going shortly to upstream w-p-
servolk
2016/06/29 22:23:25
Since all existing tests under third_party/WebKit/
wolenetz
2016/06/30 21:03:06
Acknowledged. And it appears the guidance I was gi
|
| + <script src="/w3c/resources/testharnessreport.js"></script> |
| + <script src="mediasource-util.js"></script> |
| + </head> |
| + <body> |
| + <script> |
| + function verifyTrackProperties(trackType, track, expectedTrackInfo) { |
| + assert_equals(track.id, expectedTrackInfo.id, trackType + ".id"); |
| + assert_equals(track.kind, expectedTrackInfo.kind, trackType + ".kind"); |
| + assert_equals(track.label, expectedTrackInfo.label, trackType + ".label"); |
| + assert_equals(track.language, expectedTrackInfo.language, trackType + ".language"); |
| + } |
| + |
| + function loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, sourceBuffer, mediaData, expectedAudioTrackInfo, expectedVideoTrackInfo, successCallback) |
| + { |
| + var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); |
| + test.expectEvent(sourceBuffer.audioTracks, "addtrack", "sourceBuffer.audioTracks addtrack event"); |
| + test.expectEvent(sourceBuffer.videoTracks, "addtrack", "sourceBuffer.videoTracks addtrack event"); |
| + test.expectEvent(mediaElement.audioTracks, "addtrack", "mediaElement.audioTracks addtrack event"); |
| + test.expectEvent(mediaElement.videoTracks, "addtrack", "mediaElement.videoTracks addtrack event"); |
| + test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata done."); |
| + test.expectEvent(sourceBuffer, "updateend", "initSegment append ended."); |
| + sourceBuffer.appendBuffer(initSegment); |
| + test.waitForExpectedEvents(function() |
| + { |
| + assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length"); |
| + verifyTrackProperties("audio", sourceBuffer.audioTracks[0], expectedAudioTrackInfo); |
| + assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sourceBuffer, "audioTrack.sourceBuffer"); |
| + // The first audio track is enabled by default. |
| + assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.audioTracks[0].enabled"); |
| + |
| + assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.length"); |
| + verifyTrackProperties("video", sourceBuffer.videoTracks[0], expectedVideoTrackInfo); |
| + assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sourceBuffer, "videoTrack.sourceBuffer"); |
| + // The first video track is selected by default. |
| + assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.videoTracks[0].selected"); |
| + |
| + assert_not_equals(sourceBuffer.audioTracks[0].id, sourceBuffer.videoTracks[0].id, "track ids must be unique"); |
| + |
| + assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.length"); |
| + assert_equals(mediaElement.videoTracks[0], sourceBuffer.videoTracks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack"); |
| + |
| + assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.length"); |
| + assert_equals(mediaElement.audioTracks[0], sourceBuffer.audioTracks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack"); |
| + |
| + successCallback(); |
| + }); |
| + } |
| + |
| + mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) |
| + { |
| + var expectedAudioTrackInfo = { id: "2", kind: "main", label: "", language: "" }; |
|
wolenetz
2016/06/27 19:31:07
Hmm. This may be too specific to our implementatio
servolk
2016/06/29 22:23:24
I'm not sure what exactly you mean by 'make it mor
wolenetz
2016/06/30 21:03:06
Yes, that is what I meant. Sorry if confusing.
|
| + var expectedVideoTrackInfo = { id: "1", kind: "main", label: "", language: "" }; |
| + |
| + loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, sourceBuffer, mediaData, expectedAudioTrackInfo, expectedVideoTrackInfo, test.step_func(function () |
| + { |
| + // Now append the same exact init segment again. This should succeed, but no new tracks should |
| + // be added to the SourceBuffer or MediaElement. |
| + test.failOnEvent(sourceBuffer.audioTracks, "addtrack", "Unexpected addtrack event on sourceBuffer.audioTracks for second init segment"); |
| + test.failOnEvent(sourceBuffer.videoTracks, "addtrack", "Unexpected addtrack event on sourceBuffer.videoTracks for second init segment"); |
| + test.failOnEvent(mediaElement.audioTracks, "addtrack", "Unexpected addtrack event on mediaElement.audioTracks for second init segment"); |
| + test.failOnEvent(mediaElement.videoTracks, "addtrack", "Unexpected addtrack event on mediaElement.videoTracks for second init segment"); |
| + |
| + test.expectEvent(sourceBuffer, "updateend", "InitSegment append ended."); |
| + var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); |
| + sourceBuffer.appendBuffer(initSegment); |
| + test.waitForExpectedEvents(function() |
| + { |
| + assert_equals(mediaElement.audioTracks.length, 1, "mediaElement.audioTracks.length"); |
| + assert_equals(mediaElement.videoTracks.length, 1, "mediaElement.videoTracks.length"); |
| + assert_equals(sourceBuffer.audioTracks.length, 1, "sourceBuffer.audioTracks.length"); |
| + assert_equals(sourceBuffer.videoTracks.length, 1, "sourceBuffer.videoTracks.length"); |
| + test.done(); |
| + }); |
| + })); |
| + }, "Same init segment appended twice"); |
| + |
| + mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) |
| + { |
| + var originalTrackDefaults = [ |
| + new TrackDefault("audio", "audio-language", "audio-label", ["main"], "2"), |
|
wolenetz
2016/06/27 19:31:07
aside: these bytestreamTrackIDs ("2" and "1") are
servolk
2016/06/29 22:23:24
Acknowledged.
servolk
2016/06/29 22:23:24
Acknowledged.
|
| + new TrackDefault("video", "video-language", "video-label", ["main"], "1") |
| + ]; |
| + var trackDefaultList = new TrackDefaultList(originalTrackDefaults.slice()); |
| + sourceBuffer.trackDefaults = trackDefaultList; |
| + |
| + var expectedAudioTrackInfo = { id: "2", kind: "main", label: "audio-label", language: "audio-language" }; |
|
wolenetz
2016/06/27 19:31:07
This "2" is a generated track ID, not the same as
servolk
2016/06/29 22:23:25
Acknowledged.
|
| + var expectedVideoTrackInfo = { id: "1", kind: "main", label: "video-label", language: "video-language" }; |
| + |
| + loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, sourceBuffer, mediaData, expectedAudioTrackInfo, expectedVideoTrackInfo, test.step_func_done()); |
| + }, "Track defaults processing in the init segment algorithm (explicit bytestream ids)"); |
| + |
| + mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) |
| + { |
| + var originalTrackDefaults = [ |
| + new TrackDefault("audio", "audio-language", "audio-label", ["main"], ""), |
| + new TrackDefault("video", "video-language", "video-label", ["main"], "") |
| + ]; |
| + var trackDefaultList = new TrackDefaultList(originalTrackDefaults.slice()); |
| + sourceBuffer.trackDefaults = trackDefaultList; |
| + |
| + var expectedAudioTrackInfo = { id: "2", kind: "main", label: "audio-label", language: "audio-language" }; |
|
wolenetz
2016/06/27 19:31:07
ditto: more generic track ID uniqueness verificati
servolk
2016/06/29 22:23:25
Acknowledged.
|
| + var expectedVideoTrackInfo = { id: "1", kind: "main", label: "video-label", language: "video-language" }; |
| + |
| + loadMediaAndVerifyAddedTracks(test, mediaElement, segmentInfo, sourceBuffer, mediaData, expectedAudioTrackInfo, expectedVideoTrackInfo, test.step_func_done()); |
| + }, "Track defaults processing in the init segment algorithm (no bytestream ids)"); |
| + |
| + </script> |
| + </body> |
| +</html> |