| 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 |