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

Side by Side 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, 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/mediasource/MediaSource.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 (event)
wolenetz 2016/04/28 18:48:29 nit: s/function (event)/function()/
servolk 2016/04/28 18:52:53 Done.
93 {
94 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu ffer, test.step_func(function (event)
wolenetz 2016/04/28 18:48:29 nit ditto
servolk 2016/04/28 18:52:53 Done.
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 (event)
wolenetz 2016/04/28 18:48:29 nit ditto
servolk 2016/04/28 18:52:53 Done.
104 {
105 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu ffer, test.step_func(function (event)
wolenetz 2016/04/28 18:48:29 nit ditto
servolk 2016/04/28 18:52:53 Done.
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 (event)
wolenetz 2016/04/28 18:48:29 nit ditto
servolk 2016/04/28 18:52:54 Done.
115 {
116 verifyTrackRemoval(test, mediaElement, mediaSource, sourceBu ffer, test.step_func(function (event)
wolenetz 2016/04/28 18:48:29 nit ditto
servolk 2016/04/28 18:52:54 Done.
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
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/mediasource/MediaSource.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698