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

Side by Side Diff: third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-getSenders.html

Issue 2951713002: RTCPeerConnection.addTrack and removeTrack added (behind flag) (Closed)
Patch Set: Addressed guidou's comments Created 3 years, 5 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
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <title>RTCPeerConnection.getSenders</title> 4 <title>RTCPeerConnection.getSenders</title>
5 <script src="../../resources/testharness.js"></script> 5 <script src="../../resources/testharness.js"></script>
6 <script src="../../resources/testharnessreport.js"></script> 6 <script src="../../resources/testharnessreport.js"></script>
7 </head> 7 </head>
8 <body> 8 <body>
9 <script> 9 <script>
10 promise_test(function() { 10 promise_test(function() {
11 let pc = new RTCPeerConnection(); 11 let pc = new RTCPeerConnection();
12 return createStreams({audio:true}, 1) 12 return createStreams({audio:true}, 1)
13 .then(function(streams) { 13 .then(function(streams) {
14 for (let i = 0; i < streams.length; ++i) { 14 for (let i = 0; i < streams.length; ++i) {
15 pc.addStream(streams[i]); 15 pc.addStream(streams[i]);
16 } 16 }
17 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, false); 17 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, false);
18 verifyLocalTracksHaveSenders(pc); 18 verifyLocalStreamTracksHaveSenders(pc);
19 // Make sure object identities are preserved between calls. 19 // Make sure object identities are preserved between calls.
20 assert_array_equals(pc.getSenders(), pc.getSenders()); 20 assert_array_equals(pc.getSenders(), pc.getSenders());
21 }); 21 });
22 }, 'getSenders() for a single audio track.'); 22 }, 'getSenders() for a stream with a single audio track.');
23 23
24 promise_test(function() { 24 promise_test(function() {
25 let pc = new RTCPeerConnection(); 25 let pc = new RTCPeerConnection();
26 return createStreams({video:true}, 1) 26 return createStreams({video:true}, 1)
27 .then(function(streams) { 27 .then(function(streams) {
28 for (let i = 0; i < streams.length; ++i) { 28 for (let i = 0; i < streams.length; ++i) {
29 pc.addStream(streams[i]); 29 pc.addStream(streams[i]);
30 } 30 }
31 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, false, true); 31 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, false, true);
32 verifyLocalTracksHaveSenders(pc); 32 verifyLocalStreamTracksHaveSenders(pc);
33 // Make sure object identities are preserved between calls. 33 // Make sure object identities are preserved between calls.
34 assert_array_equals(pc.getSenders(), pc.getSenders()); 34 assert_array_equals(pc.getSenders(), pc.getSenders());
35 }); 35 });
36 }, 'getSenders() for a single video track.'); 36 }, 'getSenders() for a stream with a single video track.');
37 37
38 promise_test(function() { 38 promise_test(function() {
39 let pc = new RTCPeerConnection(); 39 let pc = new RTCPeerConnection();
40 return createStreams({audio:true, video:true}, 1) 40 return createStreams({audio:true, video:true}, 1)
41 .then(function(streams) { 41 .then(function(streams) {
42 for (let i = 0; i < streams.length; ++i) { 42 for (let i = 0; i < streams.length; ++i) {
43 pc.addStream(streams[i]); 43 pc.addStream(streams[i]);
44 } 44 }
45 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, true); 45 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, true);
46 verifyLocalTracksHaveSenders(pc); 46 verifyLocalStreamTracksHaveSenders(pc);
47 // Make sure object identities are preserved between calls. 47 // Make sure object identities are preserved between calls.
48 assert_array_equals(pc.getSenders(), pc.getSenders()); 48 assert_array_equals(pc.getSenders(), pc.getSenders());
49 }); 49 });
50 }, 'getSenders() for a single stream with an audio and video track.'); 50 }, 'getSenders() for a stream with an audio and video track.');
51 51
52 promise_test(function() { 52 promise_test(function() {
53 let pc = new RTCPeerConnection(); 53 let pc = new RTCPeerConnection();
54 return createStreams({audio:true, video:true}, 2) 54 return createStreams({audio:true, video:true}, 2)
55 .then(function(streams) { 55 .then(function(streams) {
56 for (let i = 0; i < streams.length; ++i) { 56 for (let i = 0; i < streams.length; ++i) {
57 pc.addStream(streams[i]); 57 pc.addStream(streams[i]);
58 } 58 }
59 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true); 59 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true);
60 verifyLocalTracksHaveSenders(pc); 60 verifyLocalStreamTracksHaveSenders(pc);
61 // Make sure object identities are preserved between calls. 61 // Make sure object identities are preserved between calls.
62 assert_array_equals(pc.getSenders(), pc.getSenders()); 62 assert_array_equals(pc.getSenders(), pc.getSenders());
63 }); 63 });
64 }, 'getSenders() for a multiple audio-video streams.'); 64 }, 'getSenders() for a multiple audio-video streams.');
65 65
66 promise_test(function() { 66 promise_test(function() {
67 let pc = new RTCPeerConnection(); 67 let pc = new RTCPeerConnection();
68 let senders = new Set(); 68 let senders = new Set();
69 return createStreams({audio:true, video:true}, 2) 69 return createStreams({audio:true, video:true}, 2)
70 .then(function(streams) { 70 .then(function(streams) {
71 for (let i = 0; i < streams.length; ++i) { 71 for (let i = 0; i < streams.length; ++i) {
72 pc.addStream(streams[i]); 72 pc.addStream(streams[i]);
73 } 73 }
74 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true); 74 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true);
75 verifyLocalTracksHaveSenders(pc); 75 verifyLocalStreamTracksHaveSenders(pc);
76 // Make sure object identities are preserved between calls. 76 // Make sure object identities are preserved between calls.
77 assert_array_equals(pc.getSenders(), pc.getSenders()); 77 assert_array_equals(pc.getSenders(), pc.getSenders());
78 78
79 for (let i = 0; i < pc.getSenders().length; ++i) 79 for (let i = 0; i < pc.getSenders().length; ++i)
80 senders.add(pc.getSenders()[i]); 80 senders.add(pc.getSenders()[i]);
81 // 2 senders per stream, one for audio and one for video 81 // 2 senders per stream, one for audio and one for video
82 assert_equals(senders.size, 4); 82 assert_equals(senders.size, 4);
83 83
84 pc.removeStream(pc.getLocalStreams()[0]); 84 pc.removeStream(pc.getLocalStreams()[0]);
85 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, true); 85 verifyStreamAndTrackCounts(pc.getLocalStreams(), 1, true, true);
86 verifyLocalTracksHaveSenders(pc); 86 verifyLocalStreamTracksHaveSenders(pc);
87 // Make sure object identities are preserved between calls. 87 // Make sure object identities are preserved between calls.
88 assert_array_equals(pc.getSenders(), pc.getSenders()); 88 assert_array_equals(pc.getSenders(), pc.getSenders());
89 89
90 for (let i = 0; i < pc.getSenders().length; ++i) 90 for (let i = 0; i < pc.getSenders().length; ++i)
91 assert_true(senders.has(pc.getSenders()[i])); 91 assert_true(senders.has(pc.getSenders()[i]));
92 92
93 return createStreams({audio:true, video:true}, 1); 93 return createStreams({audio:true, video:true}, 1);
94 }) 94 })
95 .then(function(streams) { 95 .then(function(streams) {
96 for (let i = 0; i < streams.length; ++i) { 96 for (let i = 0; i < streams.length; ++i) {
97 pc.addStream(streams[i]); 97 pc.addStream(streams[i]);
98 } 98 }
99 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true); 99 verifyStreamAndTrackCounts(pc.getLocalStreams(), 2, true, true);
100 verifyLocalTracksHaveSenders(pc); 100 verifyLocalStreamTracksHaveSenders(pc);
101 // Make sure object identities are preserved between calls. 101 // Make sure object identities are preserved between calls.
102 assert_array_equals(pc.getSenders(), pc.getSenders()); 102 assert_array_equals(pc.getSenders(), pc.getSenders());
103 103
104 // |senders| contains all senders so far (4), including the ones for 104 // |senders| contains all senders so far (4), including the ones for
105 // the removed streams. The set does not contain duplicates, so adding all 105 // the removed streams. The set does not contain duplicates, so adding all
106 // senders here should only increase the size for the new stream (2 new 106 // senders here should only increase the size for the new stream (2 new
107 // senders). 107 // senders).
108 for (let i = 0; i < pc.getSenders().length; ++i) 108 for (let i = 0; i < pc.getSenders().length; ++i)
109 senders.add(pc.getSenders()[i]); 109 senders.add(pc.getSenders()[i]);
110 assert_equals(senders.size, 6); 110 assert_equals(senders.size, 6);
111 111
112 while (pc.getLocalStreams().length > 0) { 112 while (pc.getLocalStreams().length > 0) {
113 pc.removeStream(pc.getLocalStreams()[0]); 113 pc.removeStream(pc.getLocalStreams()[0]);
114 } 114 }
115 assert_equals(pc.getLocalStreams().length, 0); 115 assert_equals(pc.getLocalStreams().length, 0);
116 assert_equals(pc.getSenders().length, 0); 116 assert_equals(pc.getSenders().length, 0);
117 }); 117 });
118 }, 'getSenders() for streams being added and removed.'); 118 }, 'getSenders() for streams being added and removed.');
119 119
120 promise_test(function() {
121 let pc = new RTCPeerConnection();
122 return createStreams({audio:true, video:false}, 1)
123 .then(function(streams) {
124 let track = streams[0].getAudioTracks()[0];
125 let sender = pc.addTrack(track);
126 verifyTracksHaveSenders(pc, new Set([ track ]));
127 assert_equals(pc.getSenders()[0], sender);
128 pc.removeTrack(sender);
129 assert_equals(pc.getSenders().length, 0);
130 });
131 }, 'getSenders() for addTrack() and removeTrack().');
132
120 /** 133 /**
121 * Helper functions to tests. 134 * Helper functions to tests.
122 */ 135 */
123 136
124 function createStreams(constraints, numStreams, streamsSoFar = []) { 137 function createStreams(constraints, numStreams, streamsSoFar = []) {
125 if (numStreams == 0) { 138 if (numStreams == 0) {
126 return Promise.resolve(streamsSoFar);; 139 return Promise.resolve(streamsSoFar);;
127 } 140 }
128 return navigator.mediaDevices.getUserMedia(constraints) 141 return navigator.mediaDevices.getUserMedia(constraints)
129 .then(function(stream) { 142 .then(function(stream) {
130 return createStreams(constraints, 143 return createStreams(constraints,
131 numStreams - 1, 144 numStreams - 1,
132 streamsSoFar.concat([stream])); 145 streamsSoFar.concat([stream]));
133 }); 146 });
134 } 147 }
135 148
136 function verifyStreamAndTrackCounts(streams, streamCount, audio, video) { 149 function verifyStreamAndTrackCounts(streams, streamCount, audio, video) {
137 assert_equals(streams.length, streamCount); 150 assert_equals(streams.length, streamCount);
138 for (let i = 0; i < streams.length; ++i) { 151 for (let i = 0; i < streams.length; ++i) {
139 assert_equals(streams[i].getAudioTracks().length, audio ? 1 : 0); 152 assert_equals(streams[i].getAudioTracks().length, audio ? 1 : 0);
140 assert_equals(streams[i].getVideoTracks().length, video ? 1 : 0); 153 assert_equals(streams[i].getVideoTracks().length, video ? 1 : 0);
141 } 154 }
142 } 155 }
143 156
144 function verifyLocalTracksHaveSenders(pc) { 157 function verifyLocalStreamTracksHaveSenders(pc) {
145 let localTracks = new Set(); 158 let localTracks = new Set();
146 let localStreams = pc.getLocalStreams(); 159 let localStreams = pc.getLocalStreams();
147 for (let i = 0; i < localStreams.length; ++i) { 160 for (let i = 0; i < localStreams.length; ++i) {
148 let localStreamTracks = localStreams[i].getTracks(); 161 let localStreamTracks = localStreams[i].getTracks();
149 for (let j = 0; j < localStreamTracks.length; ++j) { 162 for (let j = 0; j < localStreamTracks.length; ++j) {
150 localTracks.add(localStreamTracks[j]); 163 localTracks.add(localStreamTracks[j]);
151 } 164 }
152 } 165 }
166 return verifyTracksHaveSenders(pc, localTracks);
167 }
153 168
169 function verifyTracksHaveSenders(pc, tracks) {
154 let senderTracks = new Set(); 170 let senderTracks = new Set();
155 let senders = pc.getSenders(); 171 let senders = pc.getSenders();
156 for (let i = 0; i < senders.length; ++i) { 172 for (let i = 0; i < senders.length; ++i) {
157 assert_true(senders[i] != null); 173 assert_true(senders[i] != null);
158 assert_true(senders[i].track != null); 174 assert_true(senders[i].track != null);
159 assert_true(localTracks.has(senders[i].track)); 175 assert_true(tracks.has(senders[i].track));
160 assert_false(senderTracks.has(senders[i].track)); 176 assert_false(senderTracks.has(senders[i].track));
161 senderTracks.add(senders[i].track); 177 senderTracks.add(senders[i].track);
162 } 178 }
163 assert_equals(senderTracks.size, localTracks.size); 179 assert_equals(senderTracks.size, tracks.size);
164 } 180 }
165 </script> 181 </script>
166 </body> 182 </body>
167 </html> 183 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698