OLD | NEW |
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 Loading... |
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 } |
OLD | NEW |