Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html

Issue 1846863002: Remove SourceBuffer media tracks on detach from media element (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blink-sb-tracks6
Patch Set: CR feedback Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
diff --git a/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
index 131e1d05683727ecd9dbf16088ea921b4a7fe022..1bc1a1406f85c663d16da2f9d08f0acabea892d2 100644
--- a/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
+++ b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
@@ -4,50 +4,122 @@
<script src="/w3c/resources/testharness.js"></script>
<script src="/w3c/resources/testharnessreport.js"></script>
<script src="mediasource-util.js"></script>
-
- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</head>
<body>
- <div id="log"></div>
<script>
- mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
- {
- var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
- test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.');
- test.expectEvent(sourceBuffer.audioTracks, 'addtrack', 'sourceBuffer.videoTracks addtrack event');
- test.expectEvent(sourceBuffer.videoTracks, 'addtrack', 'sourceBuffer.videoTracks addtrack event');
- test.expectEvent(mediaElement.audioTracks, 'addtrack', 'mediaElement.videoTracks addtrack event');
- test.expectEvent(mediaElement.videoTracks, 'addtrack', 'mediaElement.videoTracks addtrack event');
- sourceBuffer.appendBuffer(initSegment);
- test.waitForExpectedEvents(function()
- {
- assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.length");
- assert_equals(sourceBuffer.videoTracks[0].id, "1", "videoTrack.id");
- assert_equals(sourceBuffer.videoTracks[0].kind, "main", "videoTrack.kind");
- assert_equals(sourceBuffer.videoTracks[0].label, "", "videoTrack.label");
- assert_equals(sourceBuffer.videoTracks[0].language, "eng", "videoTrack.language");
- 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");
+ function loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, 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.
+ {
+ 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.videoTracks.length, 1, "videoTracks.length");
+ assert_equals(sourceBuffer.videoTracks[0].id, "1", "videoTrack.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.
+ assert_equals(sourceBuffer.videoTracks[0].kind, "main", "videoTrack.kind");
+ assert_equals(sourceBuffer.videoTracks[0].label, "", "videoTrack.label");
+ assert_equals(sourceBuffer.videoTracks[0].language, "eng", "videoTrack.language");
+ 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_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length");
+ assert_equals(sourceBuffer.audioTracks[0].id, "2", "audioTrack.id");
wolenetz 2016/04/28 00:46:47 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ assert_equals(sourceBuffer.audioTracks[0].kind, "main", "audioTrack.kind");
+ assert_equals(sourceBuffer.audioTracks[0].label, "", "audioTrack.label");
+ assert_equals(sourceBuffer.audioTracks[0].language, "eng", "audioTrack.language");
+ 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(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)
+ {
+ loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function() { test.done(); });
+ }, "Check that media tracks and their properties are populated properly");
+ function verifyTrackRemoval(test, mediaElement, mediaSource, segmentInfo, 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.
assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length");
- assert_equals(sourceBuffer.audioTracks[0].id, "2", "audioTrack.id");
- assert_equals(sourceBuffer.audioTracks[0].kind, "main", "audioTrack.kind");
- assert_equals(sourceBuffer.audioTracks[0].label, "", "audioTrack.label");
- assert_equals(sourceBuffer.audioTracks[0].language, "eng", "audioTrack.language");
- 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");
+ assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.videoTracks[0].selected");
+
+ var audioTrack = sourceBuffer.audioTracks[0];
+ var videoTrack = sourceBuffer.videoTracks[0];
+
+ // Verify removetrack events.
+ test.expectEvent(sourceBuffer.audioTracks, "removetrack", "sourceBuffer.audioTracks removetrack event");
+ test.expectEvent(sourceBuffer.videoTracks, "removetrack", "sourceBuffer.videoTracks removetrack event");
+ test.expectEvent(mediaElement.audioTracks, "removetrack", "mediaElement.audioTracks removetrack event");
+ test.expectEvent(mediaElement.videoTracks, "removetrack", "mediaElement.videoTracks removetrack event");
+
+ // Removing enabled audio track and selected video track should fire "change" events on mediaElement track lists.
+ test.expectEvent(mediaElement.audioTracks, "change", "mediaElement.audioTracks changed.");
+ test.expectEvent(mediaElement.videoTracks, "change", "mediaElement.videoTracks changed.");
+
+ trackRemovalAction();
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaSource.sourceBuffers.length, 0, "mediaSource.sourceBuffers.length");
+ assert_equals(mediaElement.videoTracks.length, 0, "videoTracks.length");
+ assert_equals(mediaElement.audioTracks.length, 0, "audioTracks.length");
+ assert_equals(sourceBuffer.videoTracks.length, 0, "videoTracks.length");
+ assert_equals(sourceBuffer.audioTracks.length, 0, "audioTracks.length");
+ // Since audio and video tracks have been removed, their .sourceBuffer property should be null now.
+ assert_equals(audioTrack.sourceBuffer, null, "audioTrack.sourceBuffer");
+ assert_equals(videoTrack.sourceBuffer, null, "videoTrack.sourceBuffer");
+ successCallback();
+ });
+ }
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function() {
wolenetz 2016/04/28 00:46:47 nit: s/function()/test.step_func()/
servolk 2016/04/28 18:37:53 Done.
+ verifyTrackRemoval(test, mediaElement, mediaSource, segmentInfo, 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.
+ mediaSource.removeSourceBuffer(sourceBuffer);
+ }, function successCallback() {
wolenetz 2016/04/28 00:46:46 nit: s/function successCallback(){...}/test.step_f
servolk 2016/04/28 18:37:52 Done.
+ test.done();
+ });
+ });
+ }, "Media tracks must be removed when the SourceBuffer is removed from the MediaSource");
- assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.length");
- assert_equals(mediaElement.videoTracks[0], sourceBuffer.videoTracks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack");
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function() {
wolenetz 2016/04/28 00:46:47 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ verifyTrackRemoval(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function removeSB() {
wolenetz 2016/04/28 00:46:47 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ mediaElement.src = "";
+ }, function successCallback() {
wolenetz 2016/04/28 00:46:47 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ test.done();
+ });
+ });
+ }, "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.
- assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.length");
- assert_equals(mediaElement.audioTracks[0], sourceBuffer.audioTracks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack");
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ loadMediaAndVerifyAddedTracks(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function() {
wolenetz 2016/04/28 00:46:47 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ verifyTrackRemoval(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData, function removeSB() {
wolenetz 2016/04/28 00:46:46 nit ditto
servolk 2016/04/28 18:37:53 Done.
+ mediaElement.load();
+ }, function successCallback() {
+ test.done();
wolenetz 2016/04/28 00:46:46 nit ditto
servolk 2016/04/28 18:37:52 Done.
+ });
+ });
+ }, "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.
- test.done();
- });
- }, "MediaSource media track properties");
</script>
</body>
</html>

Powered by Google App Engine
This is Rietveld 408576698