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

Side by Side Diff: chrome/browser/media/webrtc/webrtc_rtp_browsertest.cc

Issue 2951713002: RTCPeerConnection.addTrack and removeTrack added (behind flag) (Closed)
Patch Set: Addressed deadbeef'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 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string>
6 #include <vector>
7
5 #include "base/command_line.h" 8 #include "base/command_line.h"
6 #include "chrome/browser/media/webrtc/webrtc_browsertest_base.h" 9 #include "chrome/browser/media/webrtc/webrtc_browsertest_base.h"
7 #include "content/public/common/content_switches.h" 10 #include "content/public/common/content_switches.h"
8 #include "media/base/media_switches.h" 11 #include "media/base/media_switches.h"
9 12
10 static const char kMainWebrtcTestHtmlPage[] = "/webrtc/webrtc_jsep01_test.html"; 13 static const char kMainWebrtcTestHtmlPage[] = "/webrtc/webrtc_jsep01_test.html";
11 14
12 class WebRtcRtpBrowserTest : public WebRtcTestBase { 15 class WebRtcRtpBrowserTest : public WebRtcTestBase {
13 public: 16 public:
14 WebRtcRtpBrowserTest() : left_tab_(nullptr), right_tab_(nullptr) {} 17 WebRtcRtpBrowserTest() : left_tab_(nullptr), right_tab_(nullptr) {}
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 CreateAndAddStreams(left_tab_, 3); 59 CreateAndAddStreams(left_tab_, 3);
57 60
58 SetupPeerconnectionWithoutLocalStream(right_tab_); 61 SetupPeerconnectionWithoutLocalStream(right_tab_);
59 CreateAndAddStreams(right_tab_, 1); 62 CreateAndAddStreams(right_tab_, 1);
60 63
61 NegotiateCall(left_tab_, right_tab_); 64 NegotiateCall(left_tab_, right_tab_);
62 65
63 VerifyRtpReceivers(left_tab_, 2); 66 VerifyRtpReceivers(left_tab_, 2);
64 VerifyRtpReceivers(right_tab_, 6); 67 VerifyRtpReceivers(right_tab_, 6);
65 } 68 }
69
70 IN_PROC_BROWSER_TEST_F(WebRtcRtpBrowserTest, AddAndRemoveTracksWithoutStream) {
71 StartServerAndOpenTabs();
72
73 SetupPeerconnectionWithoutLocalStream(left_tab_);
74 SetupPeerconnectionWithoutLocalStream(right_tab_);
75
76 // TODO(hbos): Here and in other "AddAndRemoveTracks" tests: when ontrack and
77 // ended events are supported, verify that these are fired on the remote side
78 // when tracks are added and removed. https://crbug.com/webrtc/7933
79
80 // Add two tracks.
81 EXPECT_EQ(0u, GetNegotiationNeededCount(left_tab_));
82 std::vector<std::string> ids =
83 CreateAndAddAudioAndVideoTrack(left_tab_, StreamArgumentType::NO_STREAM);
84 // TODO(hbos): Should only fire once (if the "negotiationneeded" bit changes
85 // from false to true), not once per track added. https://crbug.com/740501
86 EXPECT_EQ(2u, GetNegotiationNeededCount(left_tab_));
87 std::string audio_stream_id = ids[0];
88 std::string audio_track_id = ids[1];
89 std::string video_stream_id = ids[2];
90 std::string video_track_id = ids[3];
91 EXPECT_EQ("null", audio_stream_id);
92 EXPECT_NE("null", audio_track_id);
93 EXPECT_EQ("null", video_stream_id);
94 EXPECT_NE("null", video_track_id);
95 EXPECT_FALSE(
96 HasLocalStreamWithTrack(left_tab_, audio_stream_id, audio_track_id));
97 EXPECT_FALSE(
98 HasLocalStreamWithTrack(left_tab_, video_stream_id, video_track_id));
99 EXPECT_TRUE(HasSenderWithTrack(left_tab_, audio_track_id));
100 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
101 VerifyRtpSenders(left_tab_, 2);
102 // Negotiate call, sets remote description.
103 NegotiateCall(left_tab_, right_tab_);
104 // TODO(hbos): When |addTrack| without streams results in SDP that does not
105 // signal a remote stream to be added this should be EXPECT_FALSE.
106 // https://crbug.com/webrtc/7933
107 EXPECT_TRUE(HasRemoteStreamWithTrack(right_tab_, kUndefined, audio_track_id));
108 EXPECT_TRUE(HasRemoteStreamWithTrack(right_tab_, kUndefined, video_track_id));
109 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, audio_track_id));
110 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
111 VerifyRtpReceivers(right_tab_, 2);
112
113 // Remove first track.
114 RemoveTrack(left_tab_, audio_track_id);
115 EXPECT_EQ(3u, GetNegotiationNeededCount(left_tab_));
116 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
117 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
118 VerifyRtpSenders(left_tab_, 1);
119 // Re-negotiate call, sets remote description again.
120 NegotiateCall(left_tab_, right_tab_);
121 EXPECT_FALSE(
122 HasRemoteStreamWithTrack(right_tab_, kUndefined, audio_track_id));
123 EXPECT_TRUE(HasRemoteStreamWithTrack(right_tab_, kUndefined, video_track_id));
124 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
125 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
126 VerifyRtpReceivers(right_tab_, 1);
127
128 // Remove second track.
129 RemoveTrack(left_tab_, video_track_id);
130 EXPECT_EQ(4u, GetNegotiationNeededCount(left_tab_));
131 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
132 EXPECT_FALSE(HasSenderWithTrack(left_tab_, video_track_id));
133 VerifyRtpSenders(left_tab_, 0);
134 // Re-negotiate call, sets remote description again.
135 NegotiateCall(left_tab_, right_tab_);
136 EXPECT_FALSE(
137 HasRemoteStreamWithTrack(right_tab_, kUndefined, audio_track_id));
138 EXPECT_FALSE(
139 HasRemoteStreamWithTrack(right_tab_, kUndefined, video_track_id));
140 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
141 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, video_track_id));
142 VerifyRtpReceivers(right_tab_, 0);
143 }
144
145 IN_PROC_BROWSER_TEST_F(WebRtcRtpBrowserTest,
146 AddAndRemoveTracksWithSharedStream) {
147 StartServerAndOpenTabs();
148
149 SetupPeerconnectionWithoutLocalStream(left_tab_);
150 SetupPeerconnectionWithoutLocalStream(right_tab_);
151
152 // Add two tracks.
153 EXPECT_EQ(0u, GetNegotiationNeededCount(left_tab_));
154 std::vector<std::string> ids = CreateAndAddAudioAndVideoTrack(
155 left_tab_, StreamArgumentType::SHARED_STREAM);
156 // TODO(hbos): Should only fire once (if the "negotiationneeded" bit changes
157 // from false to true), not once per track added. https://crbug.com/740501
158 EXPECT_EQ(2u, GetNegotiationNeededCount(left_tab_));
159 std::string audio_stream_id = ids[0];
160 std::string audio_track_id = ids[1];
161 std::string video_stream_id = ids[2];
162 std::string video_track_id = ids[3];
163 EXPECT_NE("null", audio_stream_id);
164 EXPECT_NE("null", audio_track_id);
165 EXPECT_NE("null", video_stream_id);
166 EXPECT_NE("null", video_track_id);
167 EXPECT_EQ(audio_stream_id, video_stream_id);
168 // TODO(hbos): When |getLocalStreams| is updated to return the streams of all
169 // senders, not just |addStream|-streams, then this will be EXPECT_TRUE.
170 // https://crbug.com/738918
171 EXPECT_FALSE(
172 HasLocalStreamWithTrack(left_tab_, audio_stream_id, audio_track_id));
173 EXPECT_FALSE(
174 HasLocalStreamWithTrack(left_tab_, video_stream_id, video_track_id));
175 EXPECT_TRUE(HasSenderWithTrack(left_tab_, audio_track_id));
176 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
177 VerifyRtpSenders(left_tab_, 2);
178 // Negotiate call, sets remote description.
179 NegotiateCall(left_tab_, right_tab_);
180 EXPECT_TRUE(
181 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
182 EXPECT_TRUE(
183 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
184 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, audio_track_id));
185 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
186 VerifyRtpReceivers(right_tab_, 2);
187
188 // Remove first track.
189 RemoveTrack(left_tab_, audio_track_id);
190 EXPECT_EQ(3u, GetNegotiationNeededCount(left_tab_));
191 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
192 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
193 VerifyRtpSenders(left_tab_, 1);
194 // Re-negotiate call, sets remote description again.
195 NegotiateCall(left_tab_, right_tab_);
196 EXPECT_FALSE(
197 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
198 EXPECT_TRUE(
199 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
200 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
201 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
202 VerifyRtpReceivers(right_tab_, 1);
203
204 // Remove second track.
205 RemoveTrack(left_tab_, video_track_id);
206 EXPECT_EQ(4u, GetNegotiationNeededCount(left_tab_));
207 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
208 EXPECT_FALSE(HasSenderWithTrack(left_tab_, video_track_id));
209 VerifyRtpSenders(left_tab_, 0);
210 // Re-negotiate call, sets remote description again.
211 NegotiateCall(left_tab_, right_tab_);
212 EXPECT_FALSE(
213 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
214 EXPECT_FALSE(
215 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
216 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
217 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, video_track_id));
218 VerifyRtpReceivers(right_tab_, 0);
219 }
220
221 IN_PROC_BROWSER_TEST_F(WebRtcRtpBrowserTest,
222 AddAndRemoveTracksWithIndividualStreams) {
223 StartServerAndOpenTabs();
224
225 SetupPeerconnectionWithoutLocalStream(left_tab_);
226 SetupPeerconnectionWithoutLocalStream(right_tab_);
227
228 // Add two tracks.
229 EXPECT_EQ(0u, GetNegotiationNeededCount(left_tab_));
230 std::vector<std::string> ids = CreateAndAddAudioAndVideoTrack(
231 left_tab_, StreamArgumentType::INDIVIDUAL_STREAMS);
232 // TODO(hbos): Should only fire once (if the "negotiationneeded" bit changes
233 // from false to true), not once per track added. https://crbug.com/740501
234 EXPECT_EQ(2u, GetNegotiationNeededCount(left_tab_));
235 std::string audio_stream_id = ids[0];
236 std::string audio_track_id = ids[1];
237 std::string video_stream_id = ids[2];
238 std::string video_track_id = ids[3];
239 EXPECT_NE("null", audio_stream_id);
240 EXPECT_NE("null", audio_track_id);
241 EXPECT_NE("null", video_stream_id);
242 EXPECT_NE("null", video_track_id);
243 EXPECT_NE(audio_stream_id, video_stream_id);
244 // TODO(hbos): When |getLocalStreams| is updated to return the streams of all
245 // senders, not just |addStream|-streams, then this will be EXPECT_TRUE.
246 // https://crbug.com/738918
247 EXPECT_FALSE(
248 HasLocalStreamWithTrack(left_tab_, audio_stream_id, audio_track_id));
249 EXPECT_FALSE(
250 HasLocalStreamWithTrack(left_tab_, video_stream_id, video_track_id));
251 EXPECT_TRUE(HasSenderWithTrack(left_tab_, audio_track_id));
252 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
253 VerifyRtpSenders(left_tab_, 2);
254 // Negotiate call, sets remote description.
255 NegotiateCall(left_tab_, right_tab_);
256 EXPECT_TRUE(
257 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
258 EXPECT_TRUE(
259 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
260 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, audio_track_id));
261 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
262 VerifyRtpReceivers(right_tab_, 2);
263
264 // Remove first track.
265 RemoveTrack(left_tab_, audio_track_id);
266 EXPECT_EQ(3u, GetNegotiationNeededCount(left_tab_));
267 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
268 EXPECT_TRUE(HasSenderWithTrack(left_tab_, video_track_id));
269 VerifyRtpSenders(left_tab_, 1);
270 // Re-negotiate call, sets remote description again.
271 NegotiateCall(left_tab_, right_tab_);
272 EXPECT_FALSE(
273 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
274 EXPECT_TRUE(
275 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
276 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
277 EXPECT_TRUE(HasReceiverWithTrack(right_tab_, video_track_id));
278 VerifyRtpReceivers(right_tab_, 1);
279
280 // Remove second track.
281 RemoveTrack(left_tab_, video_track_id);
282 EXPECT_EQ(4u, GetNegotiationNeededCount(left_tab_));
283 EXPECT_FALSE(HasSenderWithTrack(left_tab_, audio_track_id));
284 EXPECT_FALSE(HasSenderWithTrack(left_tab_, video_track_id));
285 VerifyRtpSenders(left_tab_, 0);
286 // Re-negotiate call, sets remote description again.
287 NegotiateCall(left_tab_, right_tab_);
288 EXPECT_FALSE(
289 HasRemoteStreamWithTrack(right_tab_, audio_stream_id, audio_track_id));
290 EXPECT_FALSE(
291 HasRemoteStreamWithTrack(right_tab_, video_stream_id, video_track_id));
292 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, audio_track_id));
293 EXPECT_FALSE(HasReceiverWithTrack(right_tab_, video_track_id));
294 VerifyRtpReceivers(right_tab_, 0);
295 }
OLDNEW
« no previous file with comments | « chrome/browser/media/webrtc/webrtc_browsertest_base.cc ('k') | chrome/test/data/webrtc/munge_sdp.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698