OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 static const char kTurnIceServerUri[] = "turn:user@turn.example.org"; | 64 static const char kTurnIceServerUri[] = "turn:user@turn.example.org"; |
65 static const char kTurnUsername[] = "user"; | 65 static const char kTurnUsername[] = "user"; |
66 static const char kTurnPassword[] = "password"; | 66 static const char kTurnPassword[] = "password"; |
67 static const char kTurnHostname[] = "turn.example.org"; | 67 static const char kTurnHostname[] = "turn.example.org"; |
68 static const uint32_t kTimeout = 10000U; | 68 static const uint32_t kTimeout = 10000U; |
69 | 69 |
70 static const char kStreams[][8] = {"stream1", "stream2"}; | 70 static const char kStreams[][8] = {"stream1", "stream2"}; |
71 static const char kAudioTracks[][32] = {"audiotrack0", "audiotrack1"}; | 71 static const char kAudioTracks[][32] = {"audiotrack0", "audiotrack1"}; |
72 static const char kVideoTracks[][32] = {"videotrack0", "videotrack1"}; | 72 static const char kVideoTracks[][32] = {"videotrack0", "videotrack1"}; |
73 | 73 |
| 74 static const char kRecvonly[] = "recvonly"; |
| 75 static const char kSendrecv[] = "sendrecv"; |
| 76 |
74 // Reference SDP with a MediaStream with label "stream1" and audio track with | 77 // Reference SDP with a MediaStream with label "stream1" and audio track with |
75 // id "audio_1" and a video track with id "video_1; | 78 // id "audio_1" and a video track with id "video_1; |
76 static const char kSdpStringWithStream1[] = | 79 static const char kSdpStringWithStream1[] = |
77 "v=0\r\n" | 80 "v=0\r\n" |
78 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 81 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
79 "s=-\r\n" | 82 "s=-\r\n" |
80 "t=0 0\r\n" | 83 "t=0 0\r\n" |
81 "a=ice-ufrag:e5785931\r\n" | 84 "a=ice-ufrag:e5785931\r\n" |
82 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 85 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
83 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 86 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
84 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 87 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
85 "m=audio 1 RTP/AVPF 103\r\n" | 88 "m=audio 1 RTP/AVPF 103\r\n" |
86 "a=mid:audio\r\n" | 89 "a=mid:audio\r\n" |
| 90 "a=sendrecv\r\n" |
87 "a=rtpmap:103 ISAC/16000\r\n" | 91 "a=rtpmap:103 ISAC/16000\r\n" |
88 "a=ssrc:1 cname:stream1\r\n" | 92 "a=ssrc:1 cname:stream1\r\n" |
89 "a=ssrc:1 mslabel:stream1\r\n" | 93 "a=ssrc:1 mslabel:stream1\r\n" |
90 "a=ssrc:1 label:audiotrack0\r\n" | 94 "a=ssrc:1 label:audiotrack0\r\n" |
91 "m=video 1 RTP/AVPF 120\r\n" | 95 "m=video 1 RTP/AVPF 120\r\n" |
92 "a=mid:video\r\n" | 96 "a=mid:video\r\n" |
| 97 "a=sendrecv\r\n" |
93 "a=rtpmap:120 VP8/90000\r\n" | 98 "a=rtpmap:120 VP8/90000\r\n" |
94 "a=ssrc:2 cname:stream1\r\n" | 99 "a=ssrc:2 cname:stream1\r\n" |
95 "a=ssrc:2 mslabel:stream1\r\n" | 100 "a=ssrc:2 mslabel:stream1\r\n" |
96 "a=ssrc:2 label:videotrack0\r\n"; | 101 "a=ssrc:2 label:videotrack0\r\n"; |
97 | 102 |
98 // Reference SDP with two MediaStreams with label "stream1" and "stream2. Each | 103 // Reference SDP with two MediaStreams with label "stream1" and "stream2. Each |
99 // MediaStreams have one audio track and one video track. | 104 // MediaStreams have one audio track and one video track. |
100 // This uses MSID. | 105 // This uses MSID. |
101 static const char kSdpStringWithStream1And2[] = | 106 static const char kSdpStringWithStream1And2[] = |
102 "v=0\r\n" | 107 "v=0\r\n" |
103 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 108 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
104 "s=-\r\n" | 109 "s=-\r\n" |
105 "t=0 0\r\n" | 110 "t=0 0\r\n" |
106 "a=ice-ufrag:e5785931\r\n" | 111 "a=ice-ufrag:e5785931\r\n" |
107 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 112 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
108 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 113 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
109 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 114 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
110 "a=msid-semantic: WMS stream1 stream2\r\n" | 115 "a=msid-semantic: WMS stream1 stream2\r\n" |
111 "m=audio 1 RTP/AVPF 103\r\n" | 116 "m=audio 1 RTP/AVPF 103\r\n" |
112 "a=mid:audio\r\n" | 117 "a=mid:audio\r\n" |
| 118 "a=sendrecv\r\n" |
113 "a=rtpmap:103 ISAC/16000\r\n" | 119 "a=rtpmap:103 ISAC/16000\r\n" |
114 "a=ssrc:1 cname:stream1\r\n" | 120 "a=ssrc:1 cname:stream1\r\n" |
115 "a=ssrc:1 msid:stream1 audiotrack0\r\n" | 121 "a=ssrc:1 msid:stream1 audiotrack0\r\n" |
116 "a=ssrc:3 cname:stream2\r\n" | 122 "a=ssrc:3 cname:stream2\r\n" |
117 "a=ssrc:3 msid:stream2 audiotrack1\r\n" | 123 "a=ssrc:3 msid:stream2 audiotrack1\r\n" |
118 "m=video 1 RTP/AVPF 120\r\n" | 124 "m=video 1 RTP/AVPF 120\r\n" |
119 "a=mid:video\r\n" | 125 "a=mid:video\r\n" |
| 126 "a=sendrecv\r\n" |
120 "a=rtpmap:120 VP8/0\r\n" | 127 "a=rtpmap:120 VP8/0\r\n" |
121 "a=ssrc:2 cname:stream1\r\n" | 128 "a=ssrc:2 cname:stream1\r\n" |
122 "a=ssrc:2 msid:stream1 videotrack0\r\n" | 129 "a=ssrc:2 msid:stream1 videotrack0\r\n" |
123 "a=ssrc:4 cname:stream2\r\n" | 130 "a=ssrc:4 cname:stream2\r\n" |
124 "a=ssrc:4 msid:stream2 videotrack1\r\n"; | 131 "a=ssrc:4 msid:stream2 videotrack1\r\n"; |
125 | 132 |
126 // Reference SDP without MediaStreams. Msid is not supported. | 133 // Reference SDP without MediaStreams. Msid is not supported. |
127 static const char kSdpStringWithoutStreams[] = | 134 static const char kSdpStringWithoutStreams[] = |
128 "v=0\r\n" | 135 "v=0\r\n" |
129 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 136 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
130 "s=-\r\n" | 137 "s=-\r\n" |
131 "t=0 0\r\n" | 138 "t=0 0\r\n" |
132 "a=ice-ufrag:e5785931\r\n" | 139 "a=ice-ufrag:e5785931\r\n" |
133 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 140 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
134 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 141 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
135 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 142 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
136 "m=audio 1 RTP/AVPF 103\r\n" | 143 "m=audio 1 RTP/AVPF 103\r\n" |
137 "a=mid:audio\r\n" | 144 "a=mid:audio\r\n" |
| 145 "a=sendrecv\r\n" |
138 "a=rtpmap:103 ISAC/16000\r\n" | 146 "a=rtpmap:103 ISAC/16000\r\n" |
139 "m=video 1 RTP/AVPF 120\r\n" | 147 "m=video 1 RTP/AVPF 120\r\n" |
140 "a=mid:video\r\n" | 148 "a=mid:video\r\n" |
| 149 "a=sendrecv\r\n" |
141 "a=rtpmap:120 VP8/90000\r\n"; | 150 "a=rtpmap:120 VP8/90000\r\n"; |
142 | 151 |
143 // Reference SDP without MediaStreams. Msid is supported. | 152 // Reference SDP without MediaStreams. Msid is supported. |
144 static const char kSdpStringWithMsidWithoutStreams[] = | 153 static const char kSdpStringWithMsidWithoutStreams[] = |
145 "v=0\r\n" | 154 "v=0\r\n" |
146 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 155 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
147 "s=-\r\n" | 156 "s=-\r\n" |
148 "t=0 0\r\n" | 157 "t=0 0\r\n" |
149 "a=ice-ufrag:e5785931\r\n" | 158 "a=ice-ufrag:e5785931\r\n" |
150 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 159 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
151 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 160 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
152 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 161 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
153 "a=msid-semantic: WMS\r\n" | 162 "a=msid-semantic: WMS\r\n" |
154 "m=audio 1 RTP/AVPF 103\r\n" | 163 "m=audio 1 RTP/AVPF 103\r\n" |
155 "a=mid:audio\r\n" | 164 "a=mid:audio\r\n" |
| 165 "a=sendrecv\r\n" |
156 "a=rtpmap:103 ISAC/16000\r\n" | 166 "a=rtpmap:103 ISAC/16000\r\n" |
157 "m=video 1 RTP/AVPF 120\r\n" | 167 "m=video 1 RTP/AVPF 120\r\n" |
158 "a=mid:video\r\n" | 168 "a=mid:video\r\n" |
| 169 "a=sendrecv\r\n" |
159 "a=rtpmap:120 VP8/90000\r\n"; | 170 "a=rtpmap:120 VP8/90000\r\n"; |
160 | 171 |
161 // Reference SDP without MediaStreams and audio only. | 172 // Reference SDP without MediaStreams and audio only. |
162 static const char kSdpStringWithoutStreamsAudioOnly[] = | 173 static const char kSdpStringWithoutStreamsAudioOnly[] = |
163 "v=0\r\n" | 174 "v=0\r\n" |
164 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 175 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
165 "s=-\r\n" | 176 "s=-\r\n" |
166 "t=0 0\r\n" | 177 "t=0 0\r\n" |
167 "a=ice-ufrag:e5785931\r\n" | 178 "a=ice-ufrag:e5785931\r\n" |
168 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 179 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
169 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 180 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
170 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 181 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
171 "m=audio 1 RTP/AVPF 103\r\n" | 182 "m=audio 1 RTP/AVPF 103\r\n" |
172 "a=mid:audio\r\n" | 183 "a=mid:audio\r\n" |
| 184 "a=sendrecv\r\n" |
173 "a=rtpmap:103 ISAC/16000\r\n"; | 185 "a=rtpmap:103 ISAC/16000\r\n"; |
174 | 186 |
175 // Reference SENDONLY SDP without MediaStreams. Msid is not supported. | 187 // Reference SENDONLY SDP without MediaStreams. Msid is not supported. |
176 static const char kSdpStringSendOnlyWithoutStreams[] = | 188 static const char kSdpStringSendOnlyWithoutStreams[] = |
177 "v=0\r\n" | 189 "v=0\r\n" |
178 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 190 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
179 "s=-\r\n" | 191 "s=-\r\n" |
180 "t=0 0\r\n" | 192 "t=0 0\r\n" |
181 "a=ice-ufrag:e5785931\r\n" | 193 "a=ice-ufrag:e5785931\r\n" |
182 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 194 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
183 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 195 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
184 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 196 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
185 "m=audio 1 RTP/AVPF 103\r\n" | 197 "m=audio 1 RTP/AVPF 103\r\n" |
186 "a=mid:audio\r\n" | 198 "a=mid:audio\r\n" |
| 199 "a=sendrecv\r\n" |
187 "a=sendonly\r\n" | 200 "a=sendonly\r\n" |
188 "a=rtpmap:103 ISAC/16000\r\n" | 201 "a=rtpmap:103 ISAC/16000\r\n" |
189 "m=video 1 RTP/AVPF 120\r\n" | 202 "m=video 1 RTP/AVPF 120\r\n" |
190 "a=mid:video\r\n" | 203 "a=mid:video\r\n" |
| 204 "a=sendrecv\r\n" |
191 "a=sendonly\r\n" | 205 "a=sendonly\r\n" |
192 "a=rtpmap:120 VP8/90000\r\n"; | 206 "a=rtpmap:120 VP8/90000\r\n"; |
193 | 207 |
194 static const char kSdpStringInit[] = | 208 static const char kSdpStringInit[] = |
195 "v=0\r\n" | 209 "v=0\r\n" |
196 "o=- 0 0 IN IP4 127.0.0.1\r\n" | 210 "o=- 0 0 IN IP4 127.0.0.1\r\n" |
197 "s=-\r\n" | 211 "s=-\r\n" |
198 "t=0 0\r\n" | 212 "t=0 0\r\n" |
199 "a=ice-ufrag:e5785931\r\n" | 213 "a=ice-ufrag:e5785931\r\n" |
200 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" | 214 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" |
201 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" | 215 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" |
202 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" | 216 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" |
203 "a=msid-semantic: WMS\r\n"; | 217 "a=msid-semantic: WMS\r\n"; |
204 | 218 |
205 static const char kSdpStringAudio[] = | 219 static const char kSdpStringAudio[] = |
206 "m=audio 1 RTP/AVPF 103\r\n" | 220 "m=audio 1 RTP/AVPF 103\r\n" |
207 "a=mid:audio\r\n" | 221 "a=mid:audio\r\n" |
| 222 "a=sendrecv\r\n" |
208 "a=rtpmap:103 ISAC/16000\r\n"; | 223 "a=rtpmap:103 ISAC/16000\r\n"; |
209 | 224 |
210 static const char kSdpStringVideo[] = | 225 static const char kSdpStringVideo[] = |
211 "m=video 1 RTP/AVPF 120\r\n" | 226 "m=video 1 RTP/AVPF 120\r\n" |
212 "a=mid:video\r\n" | 227 "a=mid:video\r\n" |
| 228 "a=sendrecv\r\n" |
213 "a=rtpmap:120 VP8/90000\r\n"; | 229 "a=rtpmap:120 VP8/90000\r\n"; |
214 | 230 |
215 static const char kSdpStringMs1Audio0[] = | 231 static const char kSdpStringMs1Audio0[] = |
216 "a=ssrc:1 cname:stream1\r\n" | 232 "a=ssrc:1 cname:stream1\r\n" |
217 "a=ssrc:1 msid:stream1 audiotrack0\r\n"; | 233 "a=ssrc:1 msid:stream1 audiotrack0\r\n"; |
218 | 234 |
219 static const char kSdpStringMs1Video0[] = | 235 static const char kSdpStringMs1Video0[] = |
220 "a=ssrc:2 cname:stream1\r\n" | 236 "a=ssrc:2 cname:stream1\r\n" |
221 "a=ssrc:2 msid:stream1 videotrack0\r\n"; | 237 "a=ssrc:2 msid:stream1 videotrack0\r\n"; |
222 | 238 |
(...skipping 1553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1776 local_answer->description()->GetContentByName("video"); | 1792 local_answer->description()->GetContentByName("video"); |
1777 video_info->rejected = true; | 1793 video_info->rejected = true; |
1778 cricket::ContentInfo* audio_info = | 1794 cricket::ContentInfo* audio_info = |
1779 local_answer->description()->GetContentByName("audio"); | 1795 local_answer->description()->GetContentByName("audio"); |
1780 audio_info->rejected = true; | 1796 audio_info->rejected = true; |
1781 EXPECT_TRUE(DoSetLocalDescription(local_answer.release())); | 1797 EXPECT_TRUE(DoSetLocalDescription(local_answer.release())); |
1782 | 1798 |
1783 // No crash is a pass. | 1799 // No crash is a pass. |
1784 } | 1800 } |
1785 | 1801 |
| 1802 // This tests that if a recvonly remote description is set, no remote streams |
| 1803 // will be created, even if the description contains SSRCs/MSIDs. |
| 1804 // See: https://code.google.com/p/webrtc/issues/detail?id=5054 |
| 1805 TEST_F(PeerConnectionInterfaceTest, RecvonlyDescriptionDoesntCreateStream) { |
| 1806 FakeConstraints constraints; |
| 1807 constraints.AddMandatory(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, |
| 1808 true); |
| 1809 CreatePeerConnection(&constraints); |
| 1810 |
| 1811 std::string recvonly_offer = kSdpStringWithStream1; |
| 1812 rtc::replace_substrs(kSendrecv, strlen(kSendrecv), kRecvonly, |
| 1813 strlen(kRecvonly), &recvonly_offer); |
| 1814 CreateAndSetRemoteOffer(recvonly_offer); |
| 1815 |
| 1816 EXPECT_EQ(0u, observer_.remote_streams()->count()); |
| 1817 } |
| 1818 |
1786 // This tests that a default MediaStream is created if a remote session | 1819 // This tests that a default MediaStream is created if a remote session |
1787 // description doesn't contain any streams and no MSID support. | 1820 // description doesn't contain any streams and no MSID support. |
1788 // It also tests that the default stream is updated if a video m-line is added | 1821 // It also tests that the default stream is updated if a video m-line is added |
1789 // in a subsequent session description. | 1822 // in a subsequent session description. |
1790 TEST_F(PeerConnectionInterfaceTest, SdpWithoutMsidCreatesDefaultStream) { | 1823 TEST_F(PeerConnectionInterfaceTest, SdpWithoutMsidCreatesDefaultStream) { |
1791 FakeConstraints constraints; | 1824 FakeConstraints constraints; |
1792 constraints.AddMandatory(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, | 1825 constraints.AddMandatory(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, |
1793 true); | 1826 true); |
1794 CreatePeerConnection(&constraints); | 1827 CreatePeerConnection(&constraints); |
1795 CreateAndSetRemoteOffer(kSdpStringWithoutStreamsAudioOnly); | 1828 CreateAndSetRemoteOffer(kSdpStringWithoutStreamsAudioOnly); |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2209 EXPECT_TRUE(updated_answer_options.has_video()); | 2242 EXPECT_TRUE(updated_answer_options.has_video()); |
2210 | 2243 |
2211 RTCOfferAnswerOptions default_rtc_options; | 2244 RTCOfferAnswerOptions default_rtc_options; |
2212 EXPECT_TRUE( | 2245 EXPECT_TRUE( |
2213 ConvertRtcOptionsForOffer(default_rtc_options, &updated_offer_options)); | 2246 ConvertRtcOptionsForOffer(default_rtc_options, &updated_offer_options)); |
2214 // By default, |has_audio| or |has_video| are false if there is no media | 2247 // By default, |has_audio| or |has_video| are false if there is no media |
2215 // track. | 2248 // track. |
2216 EXPECT_FALSE(updated_offer_options.has_audio()); | 2249 EXPECT_FALSE(updated_offer_options.has_audio()); |
2217 EXPECT_FALSE(updated_offer_options.has_video()); | 2250 EXPECT_FALSE(updated_offer_options.has_video()); |
2218 } | 2251 } |
OLD | NEW |