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 "modules/peerconnection/RTCPeerConnection.h" | 5 #include "modules/peerconnection/RTCPeerConnection.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "bindings/core/v8/Dictionary.h" | 9 #include "bindings/core/v8/Dictionary.h" |
10 #include "bindings/core/v8/V8BindingForTesting.h" | 10 #include "bindings/core/v8/V8BindingForTesting.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 EXPECT_EQ("", GetExceptionMessage(scope)); | 63 EXPECT_EQ("", GetExceptionMessage(scope)); |
64 } | 64 } |
65 | 65 |
66 void RemoveStream(V8TestingScope& scope, | 66 void RemoveStream(V8TestingScope& scope, |
67 RTCPeerConnection* pc, | 67 RTCPeerConnection* pc, |
68 MediaStream* stream) { | 68 MediaStream* stream) { |
69 pc->removeStream(stream, scope.GetExceptionState()); | 69 pc->removeStream(stream, scope.GetExceptionState()); |
70 EXPECT_EQ("", GetExceptionMessage(scope)); | 70 EXPECT_EQ("", GetExceptionMessage(scope)); |
71 } | 71 } |
72 | 72 |
73 MediaStreamTrack* GetTrack(RTCPeerConnection* pc, | |
74 MediaStreamComponent* component) { | |
75 return pc->GetTrack(component); | |
76 } | |
77 | |
78 private: | 73 private: |
79 ScopedTestingPlatformSupport<TestingPlatformSupportWithWebRTC> platform; | 74 ScopedTestingPlatformSupport<TestingPlatformSupportWithWebRTC> platform; |
80 }; | 75 }; |
81 | 76 |
82 TEST_F(RTCPeerConnectionTest, GetAudioTrack) { | 77 TEST_F(RTCPeerConnectionTest, GetAudioTrack) { |
83 V8TestingScope scope; | 78 V8TestingScope scope; |
84 RTCPeerConnection* pc = CreatePC(scope); | 79 RTCPeerConnection* pc = CreatePC(scope); |
85 EXPECT_EQ("", GetExceptionMessage(scope)); | 80 EXPECT_EQ("", GetExceptionMessage(scope)); |
86 ASSERT_TRUE(pc); | 81 ASSERT_TRUE(pc); |
87 | 82 |
88 MediaStreamTrack* track = | 83 MediaStreamTrack* track = |
89 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); | 84 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); |
90 HeapVector<Member<MediaStreamTrack>> tracks; | 85 HeapVector<Member<MediaStreamTrack>> tracks; |
91 tracks.push_back(track); | 86 tracks.push_back(track); |
92 MediaStream* stream = | 87 MediaStream* stream = |
93 MediaStream::Create(scope.GetExecutionContext(), tracks); | 88 MediaStream::Create(scope.GetExecutionContext(), tracks); |
94 ASSERT_TRUE(stream); | 89 ASSERT_TRUE(stream); |
95 | 90 |
96 EXPECT_FALSE(GetTrack(pc, track->Component())); | 91 EXPECT_FALSE(pc->GetTrack(track->Component())); |
97 AddStream(scope, pc, stream); | 92 AddStream(scope, pc, stream); |
98 EXPECT_TRUE(GetTrack(pc, track->Component())); | 93 EXPECT_TRUE(pc->GetTrack(track->Component())); |
99 } | 94 } |
100 | 95 |
101 TEST_F(RTCPeerConnectionTest, GetVideoTrack) { | 96 TEST_F(RTCPeerConnectionTest, GetVideoTrack) { |
102 V8TestingScope scope; | 97 V8TestingScope scope; |
103 RTCPeerConnection* pc = CreatePC(scope); | 98 RTCPeerConnection* pc = CreatePC(scope); |
104 EXPECT_EQ("", GetExceptionMessage(scope)); | 99 EXPECT_EQ("", GetExceptionMessage(scope)); |
105 ASSERT_TRUE(pc); | 100 ASSERT_TRUE(pc); |
106 | 101 |
107 MediaStreamTrack* track = | 102 MediaStreamTrack* track = |
108 CreateTrack(scope, MediaStreamSource::kTypeVideo, "videoTrack"); | 103 CreateTrack(scope, MediaStreamSource::kTypeVideo, "videoTrack"); |
109 HeapVector<Member<MediaStreamTrack>> tracks; | 104 HeapVector<Member<MediaStreamTrack>> tracks; |
110 tracks.push_back(track); | 105 tracks.push_back(track); |
111 MediaStream* stream = | 106 MediaStream* stream = |
112 MediaStream::Create(scope.GetExecutionContext(), tracks); | 107 MediaStream::Create(scope.GetExecutionContext(), tracks); |
113 ASSERT_TRUE(stream); | 108 ASSERT_TRUE(stream); |
114 | 109 |
115 EXPECT_FALSE(GetTrack(pc, track->Component())); | 110 EXPECT_FALSE(pc->GetTrack(track->Component())); |
116 AddStream(scope, pc, stream); | 111 AddStream(scope, pc, stream); |
117 EXPECT_TRUE(GetTrack(pc, track->Component())); | 112 EXPECT_TRUE(pc->GetTrack(track->Component())); |
118 } | 113 } |
119 | 114 |
120 TEST_F(RTCPeerConnectionTest, GetAudioAndVideoTrack) { | 115 TEST_F(RTCPeerConnectionTest, GetAudioAndVideoTrack) { |
121 V8TestingScope scope; | 116 V8TestingScope scope; |
122 RTCPeerConnection* pc = CreatePC(scope); | 117 RTCPeerConnection* pc = CreatePC(scope); |
123 EXPECT_EQ("", GetExceptionMessage(scope)); | 118 EXPECT_EQ("", GetExceptionMessage(scope)); |
124 ASSERT_TRUE(pc); | 119 ASSERT_TRUE(pc); |
125 | 120 |
126 HeapVector<Member<MediaStreamTrack>> tracks; | 121 HeapVector<Member<MediaStreamTrack>> tracks; |
127 MediaStreamTrack* audio_track = | 122 MediaStreamTrack* audio_track = |
128 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); | 123 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); |
129 tracks.push_back(audio_track); | 124 tracks.push_back(audio_track); |
130 MediaStreamTrack* video_track = | 125 MediaStreamTrack* video_track = |
131 CreateTrack(scope, MediaStreamSource::kTypeVideo, "videoTrack"); | 126 CreateTrack(scope, MediaStreamSource::kTypeVideo, "videoTrack"); |
132 tracks.push_back(video_track); | 127 tracks.push_back(video_track); |
133 | 128 |
134 MediaStream* stream = | 129 MediaStream* stream = |
135 MediaStream::Create(scope.GetExecutionContext(), tracks); | 130 MediaStream::Create(scope.GetExecutionContext(), tracks); |
136 ASSERT_TRUE(stream); | 131 ASSERT_TRUE(stream); |
137 | 132 |
138 EXPECT_FALSE(GetTrack(pc, audio_track->Component())); | 133 EXPECT_FALSE(pc->GetTrack(audio_track->Component())); |
139 EXPECT_FALSE(GetTrack(pc, video_track->Component())); | 134 EXPECT_FALSE(pc->GetTrack(video_track->Component())); |
140 AddStream(scope, pc, stream); | 135 AddStream(scope, pc, stream); |
141 EXPECT_TRUE(GetTrack(pc, audio_track->Component())); | 136 EXPECT_TRUE(pc->GetTrack(audio_track->Component())); |
142 EXPECT_TRUE(GetTrack(pc, video_track->Component())); | 137 EXPECT_TRUE(pc->GetTrack(video_track->Component())); |
143 } | 138 } |
144 | 139 |
145 TEST_F(RTCPeerConnectionTest, GetTrackRemoveStreamAndGCAll) { | 140 TEST_F(RTCPeerConnectionTest, GetTrackRemoveStreamAndGCAll) { |
146 V8TestingScope scope; | 141 V8TestingScope scope; |
147 Persistent<RTCPeerConnection> pc = CreatePC(scope); | 142 Persistent<RTCPeerConnection> pc = CreatePC(scope); |
148 EXPECT_EQ("", GetExceptionMessage(scope)); | 143 EXPECT_EQ("", GetExceptionMessage(scope)); |
149 ASSERT_TRUE(pc); | 144 ASSERT_TRUE(pc); |
150 | 145 |
151 MediaStreamTrack* track = | 146 MediaStreamTrack* track = |
152 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); | 147 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); |
153 HeapVector<Member<MediaStreamTrack>> tracks; | 148 HeapVector<Member<MediaStreamTrack>> tracks; |
154 tracks.push_back(track); | 149 tracks.push_back(track); |
155 MediaStream* stream = | 150 MediaStream* stream = |
156 MediaStream::Create(scope.GetExecutionContext(), tracks); | 151 MediaStream::Create(scope.GetExecutionContext(), tracks); |
157 ASSERT_TRUE(stream); | 152 ASSERT_TRUE(stream); |
158 | 153 |
159 MediaStreamComponent* track_component = track->Component(); | 154 MediaStreamComponent* track_component = track->Component(); |
160 | 155 |
161 EXPECT_FALSE(GetTrack(pc, track_component)); | 156 EXPECT_FALSE(pc->GetTrack(track_component)); |
162 AddStream(scope, pc, stream); | 157 AddStream(scope, pc, stream); |
163 EXPECT_TRUE(GetTrack(pc, track_component)); | 158 EXPECT_TRUE(pc->GetTrack(track_component)); |
164 | 159 |
165 RemoveStream(scope, pc, stream); | 160 RemoveStream(scope, pc, stream); |
166 // This will destroy |MediaStream|, |MediaStreamTrack| and its | 161 // This will destroy |MediaStream|, |MediaStreamTrack| and its |
167 // |MediaStreamComponent|, which will remove its mapping from the peer | 162 // |MediaStreamComponent|, which will remove its mapping from the peer |
168 // connection. | 163 // connection. |
169 WebHeap::CollectAllGarbageForTesting(); | 164 WebHeap::CollectAllGarbageForTesting(); |
170 EXPECT_FALSE(GetTrack(pc, track_component)); | 165 EXPECT_FALSE(pc->GetTrack(track_component)); |
171 } | 166 } |
172 | 167 |
173 TEST_F(RTCPeerConnectionTest, | 168 TEST_F(RTCPeerConnectionTest, |
174 GetTrackRemoveStreamAndGCWithPersistentComponent) { | 169 GetTrackRemoveStreamAndGCWithPersistentComponent) { |
175 V8TestingScope scope; | 170 V8TestingScope scope; |
176 Persistent<RTCPeerConnection> pc = CreatePC(scope); | 171 Persistent<RTCPeerConnection> pc = CreatePC(scope); |
177 EXPECT_EQ("", GetExceptionMessage(scope)); | 172 EXPECT_EQ("", GetExceptionMessage(scope)); |
178 ASSERT_TRUE(pc); | 173 ASSERT_TRUE(pc); |
179 | 174 |
180 MediaStreamTrack* track = | 175 MediaStreamTrack* track = |
181 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); | 176 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); |
182 HeapVector<Member<MediaStreamTrack>> tracks; | 177 HeapVector<Member<MediaStreamTrack>> tracks; |
183 tracks.push_back(track); | 178 tracks.push_back(track); |
184 MediaStream* stream = | 179 MediaStream* stream = |
185 MediaStream::Create(scope.GetExecutionContext(), tracks); | 180 MediaStream::Create(scope.GetExecutionContext(), tracks); |
186 ASSERT_TRUE(stream); | 181 ASSERT_TRUE(stream); |
187 | 182 |
188 Persistent<MediaStreamComponent> track_component = track->Component(); | 183 Persistent<MediaStreamComponent> track_component = track->Component(); |
189 | 184 |
190 EXPECT_FALSE(GetTrack(pc, track_component)); | 185 EXPECT_FALSE(pc->GetTrack(track_component.Get())); |
191 AddStream(scope, pc, stream); | 186 AddStream(scope, pc, stream); |
192 EXPECT_TRUE(GetTrack(pc, track_component)); | 187 EXPECT_TRUE(pc->GetTrack(track_component.Get())); |
193 | 188 |
194 RemoveStream(scope, pc, stream); | 189 RemoveStream(scope, pc, stream); |
195 // This will destroy |MediaStream| and |MediaStreamTrack| (but not | 190 // This will destroy |MediaStream| and |MediaStreamTrack| (but not |
196 // |MediaStreamComponent|), which will remove its mapping from the peer | 191 // |MediaStreamComponent|), which will remove its mapping from the peer |
197 // connection. | 192 // connection. |
198 WebHeap::CollectAllGarbageForTesting(); | 193 WebHeap::CollectAllGarbageForTesting(); |
199 EXPECT_FALSE(GetTrack(pc, track_component)); | 194 EXPECT_FALSE(pc->GetTrack(track_component.Get())); |
200 } | 195 } |
201 | 196 |
202 TEST_F(RTCPeerConnectionTest, GetTrackRemoveStreamAndGCWithPersistentStream) { | 197 TEST_F(RTCPeerConnectionTest, GetTrackRemoveStreamAndGCWithPersistentStream) { |
203 V8TestingScope scope; | 198 V8TestingScope scope; |
204 Persistent<RTCPeerConnection> pc = CreatePC(scope); | 199 Persistent<RTCPeerConnection> pc = CreatePC(scope); |
205 EXPECT_EQ("", GetExceptionMessage(scope)); | 200 EXPECT_EQ("", GetExceptionMessage(scope)); |
206 ASSERT_TRUE(pc); | 201 ASSERT_TRUE(pc); |
207 | 202 |
208 MediaStreamTrack* track = | 203 MediaStreamTrack* track = |
209 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); | 204 CreateTrack(scope, MediaStreamSource::kTypeAudio, "audioTrack"); |
210 HeapVector<Member<MediaStreamTrack>> tracks; | 205 HeapVector<Member<MediaStreamTrack>> tracks; |
211 tracks.push_back(track); | 206 tracks.push_back(track); |
212 Persistent<MediaStream> stream = | 207 Persistent<MediaStream> stream = |
213 MediaStream::Create(scope.GetExecutionContext(), tracks); | 208 MediaStream::Create(scope.GetExecutionContext(), tracks); |
214 ASSERT_TRUE(stream); | 209 ASSERT_TRUE(stream); |
215 | 210 |
216 MediaStreamComponent* track_component = track->Component(); | 211 MediaStreamComponent* track_component = track->Component(); |
217 | 212 |
218 EXPECT_FALSE(GetTrack(pc, track_component)); | 213 EXPECT_FALSE(pc->GetTrack(track_component)); |
219 AddStream(scope, pc, stream); | 214 AddStream(scope, pc, stream); |
220 EXPECT_TRUE(GetTrack(pc, track_component)); | 215 EXPECT_TRUE(pc->GetTrack(track_component)); |
221 | 216 |
222 RemoveStream(scope, pc, stream); | 217 RemoveStream(scope, pc, stream); |
223 // With a persistent |MediaStream|, the |MediaStreamTrack| and | 218 // With a persistent |MediaStream|, the |MediaStreamTrack| and |
224 // |MediaStreamComponent| will not be destroyed and continue to be mapped by | 219 // |MediaStreamComponent| will not be destroyed and continue to be mapped by |
225 // peer connection. | 220 // peer connection. |
226 WebHeap::CollectAllGarbageForTesting(); | 221 WebHeap::CollectAllGarbageForTesting(); |
227 EXPECT_TRUE(GetTrack(pc, track_component)); | 222 EXPECT_TRUE(pc->GetTrack(track_component)); |
228 | 223 |
229 stream = nullptr; | 224 stream = nullptr; |
230 // Now |MediaStream|, |MediaStreamTrack| and |MediaStreamComponent| will be | 225 // Now |MediaStream|, |MediaStreamTrack| and |MediaStreamComponent| will be |
231 // destroyed and the mapping removed from the peer connection. | 226 // destroyed and the mapping removed from the peer connection. |
232 WebHeap::CollectAllGarbageForTesting(); | 227 WebHeap::CollectAllGarbageForTesting(); |
233 EXPECT_FALSE(GetTrack(pc, track_component)); | 228 EXPECT_FALSE(pc->GetTrack(track_component)); |
234 } | 229 } |
235 | 230 |
236 } // namespace blink | 231 } // namespace blink |
OLD | NEW |