OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include <stdio.h> | 11 #include <stdio.h> |
12 | 12 |
13 #include <algorithm> | 13 #include <algorithm> |
14 #include <list> | 14 #include <list> |
15 #include <map> | 15 #include <map> |
| 16 #include <memory> |
16 #include <utility> | 17 #include <utility> |
17 #include <vector> | 18 #include <vector> |
18 | 19 |
19 #include "webrtc/api/dtmfsender.h" | 20 #include "webrtc/api/dtmfsender.h" |
20 #include "webrtc/api/fakemetricsobserver.h" | 21 #include "webrtc/api/fakemetricsobserver.h" |
21 #include "webrtc/api/localaudiosource.h" | 22 #include "webrtc/api/localaudiosource.h" |
22 #include "webrtc/api/mediastreaminterface.h" | 23 #include "webrtc/api/mediastreaminterface.h" |
23 #include "webrtc/api/peerconnection.h" | 24 #include "webrtc/api/peerconnection.h" |
24 #include "webrtc/api/peerconnectionfactory.h" | 25 #include "webrtc/api/peerconnectionfactory.h" |
25 #include "webrtc/api/peerconnectioninterface.h" | 26 #include "webrtc/api/peerconnectioninterface.h" |
26 #include "webrtc/api/test/fakeaudiocapturemodule.h" | 27 #include "webrtc/api/test/fakeaudiocapturemodule.h" |
27 #include "webrtc/api/test/fakeconstraints.h" | 28 #include "webrtc/api/test/fakeconstraints.h" |
28 #include "webrtc/api/test/fakedtlsidentitystore.h" | 29 #include "webrtc/api/test/fakedtlsidentitystore.h" |
29 #include "webrtc/api/test/fakeperiodicvideocapturer.h" | 30 #include "webrtc/api/test/fakeperiodicvideocapturer.h" |
30 #include "webrtc/api/test/fakevideotrackrenderer.h" | 31 #include "webrtc/api/test/fakevideotrackrenderer.h" |
31 #include "webrtc/api/test/mockpeerconnectionobservers.h" | 32 #include "webrtc/api/test/mockpeerconnectionobservers.h" |
32 #include "webrtc/base/gunit.h" | 33 #include "webrtc/base/gunit.h" |
33 #include "webrtc/base/physicalsocketserver.h" | 34 #include "webrtc/base/physicalsocketserver.h" |
34 #include "webrtc/base/scoped_ptr.h" | |
35 #include "webrtc/base/ssladapter.h" | 35 #include "webrtc/base/ssladapter.h" |
36 #include "webrtc/base/sslstreamadapter.h" | 36 #include "webrtc/base/sslstreamadapter.h" |
37 #include "webrtc/base/thread.h" | 37 #include "webrtc/base/thread.h" |
38 #include "webrtc/base/virtualsocketserver.h" | 38 #include "webrtc/base/virtualsocketserver.h" |
39 #include "webrtc/media/engine/fakewebrtcvideoengine.h" | 39 #include "webrtc/media/engine/fakewebrtcvideoengine.h" |
40 #include "webrtc/p2p/base/p2pconstants.h" | 40 #include "webrtc/p2p/base/p2pconstants.h" |
41 #include "webrtc/p2p/base/sessiondescription.h" | 41 #include "webrtc/p2p/base/sessiondescription.h" |
42 #include "webrtc/p2p/client/fakeportallocator.h" | 42 #include "webrtc/p2p/client/fakeportallocator.h" |
43 #include "webrtc/pc/mediasession.h" | 43 #include "webrtc/pc/mediasession.h" |
44 | 44 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 }; | 147 }; |
148 | 148 |
149 class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, | 149 class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
150 public SignalingMessageReceiver, | 150 public SignalingMessageReceiver, |
151 public ObserverInterface { | 151 public ObserverInterface { |
152 public: | 152 public: |
153 static PeerConnectionTestClient* CreateClientWithDtlsIdentityStore( | 153 static PeerConnectionTestClient* CreateClientWithDtlsIdentityStore( |
154 const std::string& id, | 154 const std::string& id, |
155 const MediaConstraintsInterface* constraints, | 155 const MediaConstraintsInterface* constraints, |
156 const PeerConnectionFactory::Options* options, | 156 const PeerConnectionFactory::Options* options, |
157 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, | 157 std::unique_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, |
158 bool prefer_constraint_apis, | 158 bool prefer_constraint_apis, |
159 rtc::Thread* worker_thread) { | 159 rtc::Thread* worker_thread) { |
160 PeerConnectionTestClient* client(new PeerConnectionTestClient(id)); | 160 PeerConnectionTestClient* client(new PeerConnectionTestClient(id)); |
161 if (!client->Init(constraints, options, std::move(dtls_identity_store), | 161 if (!client->Init(constraints, options, std::move(dtls_identity_store), |
162 prefer_constraint_apis, worker_thread)) { | 162 prefer_constraint_apis, worker_thread)) { |
163 delete client; | 163 delete client; |
164 return nullptr; | 164 return nullptr; |
165 } | 165 } |
166 return client; | 166 return client; |
167 } | 167 } |
168 | 168 |
169 static PeerConnectionTestClient* CreateClient( | 169 static PeerConnectionTestClient* CreateClient( |
170 const std::string& id, | 170 const std::string& id, |
171 const MediaConstraintsInterface* constraints, | 171 const MediaConstraintsInterface* constraints, |
172 const PeerConnectionFactory::Options* options, | 172 const PeerConnectionFactory::Options* options, |
173 rtc::Thread* worker_thread) { | 173 rtc::Thread* worker_thread) { |
174 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( | 174 std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
175 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() | 175 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() |
176 : nullptr); | 176 : nullptr); |
177 | 177 |
178 return CreateClientWithDtlsIdentityStore(id, constraints, options, | 178 return CreateClientWithDtlsIdentityStore(id, constraints, options, |
179 std::move(dtls_identity_store), | 179 std::move(dtls_identity_store), |
180 true, worker_thread); | 180 true, worker_thread); |
181 } | 181 } |
182 | 182 |
183 static PeerConnectionTestClient* CreateClientPreferNoConstraints( | 183 static PeerConnectionTestClient* CreateClientPreferNoConstraints( |
184 const std::string& id, | 184 const std::string& id, |
185 const PeerConnectionFactory::Options* options, | 185 const PeerConnectionFactory::Options* options, |
186 rtc::Thread* worker_thread) { | 186 rtc::Thread* worker_thread) { |
187 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( | 187 std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
188 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() | 188 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() |
189 : nullptr); | 189 : nullptr); |
190 | 190 |
191 return CreateClientWithDtlsIdentityStore(id, nullptr, options, | 191 return CreateClientWithDtlsIdentityStore(id, nullptr, options, |
192 std::move(dtls_identity_store), | 192 std::move(dtls_identity_store), |
193 false, worker_thread); | 193 false, worker_thread); |
194 } | 194 } |
195 | 195 |
196 ~PeerConnectionTestClient() { | 196 ~PeerConnectionTestClient() { |
197 } | 197 } |
198 | 198 |
199 void Negotiate() { Negotiate(true, true); } | 199 void Negotiate() { Negotiate(true, true); } |
200 | 200 |
201 void Negotiate(bool audio, bool video) { | 201 void Negotiate(bool audio, bool video) { |
202 rtc::scoped_ptr<SessionDescriptionInterface> offer; | 202 std::unique_ptr<SessionDescriptionInterface> offer; |
203 ASSERT_TRUE(DoCreateOffer(&offer)); | 203 ASSERT_TRUE(DoCreateOffer(&offer)); |
204 | 204 |
205 if (offer->description()->GetContentByName("audio")) { | 205 if (offer->description()->GetContentByName("audio")) { |
206 offer->description()->GetContentByName("audio")->rejected = !audio; | 206 offer->description()->GetContentByName("audio")->rejected = !audio; |
207 } | 207 } |
208 if (offer->description()->GetContentByName("video")) { | 208 if (offer->description()->GetContentByName("video")) { |
209 offer->description()->GetContentByName("video")->rejected = !video; | 209 offer->description()->GetContentByName("video")->rejected = !video; |
210 } | 210 } |
211 | 211 |
212 std::string sdp; | 212 std::string sdp; |
(...skipping 11 matching lines...) Expand all Loading... |
224 } else { | 224 } else { |
225 HandleIncomingAnswer(msg); | 225 HandleIncomingAnswer(msg); |
226 } | 226 } |
227 } | 227 } |
228 | 228 |
229 // SignalingMessageReceiver callback. | 229 // SignalingMessageReceiver callback. |
230 void ReceiveIceMessage(const std::string& sdp_mid, | 230 void ReceiveIceMessage(const std::string& sdp_mid, |
231 int sdp_mline_index, | 231 int sdp_mline_index, |
232 const std::string& msg) override { | 232 const std::string& msg) override { |
233 LOG(INFO) << id_ << "ReceiveIceMessage"; | 233 LOG(INFO) << id_ << "ReceiveIceMessage"; |
234 rtc::scoped_ptr<webrtc::IceCandidateInterface> candidate( | 234 std::unique_ptr<webrtc::IceCandidateInterface> candidate( |
235 webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, nullptr)); | 235 webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, nullptr)); |
236 EXPECT_TRUE(pc()->AddIceCandidate(candidate.get())); | 236 EXPECT_TRUE(pc()->AddIceCandidate(candidate.get())); |
237 } | 237 } |
238 | 238 |
239 // PeerConnectionObserver callbacks. | 239 // PeerConnectionObserver callbacks. |
240 void OnSignalingChange( | 240 void OnSignalingChange( |
241 webrtc::PeerConnectionInterface::SignalingState new_state) override { | 241 webrtc::PeerConnectionInterface::SignalingState new_state) override { |
242 EXPECT_EQ(pc()->signaling_state(), new_state); | 242 EXPECT_EQ(pc()->signaling_state(), new_state); |
243 } | 243 } |
244 void OnAddStream(MediaStreamInterface* media_stream) override { | 244 void OnAddStream(MediaStreamInterface* media_stream) override { |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 } | 542 } |
543 for (const auto& renderer : removed_fake_video_renderers_) { | 543 for (const auto& renderer : removed_fake_video_renderers_) { |
544 total += renderer->num_rendered_frames(); | 544 total += renderer->num_rendered_frames(); |
545 } | 545 } |
546 } | 546 } |
547 return total; | 547 return total; |
548 } | 548 } |
549 | 549 |
550 // Verify the CreateDtmfSender interface | 550 // Verify the CreateDtmfSender interface |
551 void VerifyDtmf() { | 551 void VerifyDtmf() { |
552 rtc::scoped_ptr<DummyDtmfObserver> observer(new DummyDtmfObserver()); | 552 std::unique_ptr<DummyDtmfObserver> observer(new DummyDtmfObserver()); |
553 rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender; | 553 rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender; |
554 | 554 |
555 // We can't create a DTMF sender with an invalid audio track or a non local | 555 // We can't create a DTMF sender with an invalid audio track or a non local |
556 // track. | 556 // track. |
557 EXPECT_TRUE(peer_connection_->CreateDtmfSender(nullptr) == nullptr); | 557 EXPECT_TRUE(peer_connection_->CreateDtmfSender(nullptr) == nullptr); |
558 rtc::scoped_refptr<webrtc::AudioTrackInterface> non_localtrack( | 558 rtc::scoped_refptr<webrtc::AudioTrackInterface> non_localtrack( |
559 peer_connection_factory_->CreateAudioTrack("dummy_track", nullptr)); | 559 peer_connection_factory_->CreateAudioTrack("dummy_track", nullptr)); |
560 EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == nullptr); | 560 EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == nullptr); |
561 | 561 |
562 // We should be able to create a DTMF sender from a local track. | 562 // We should be able to create a DTMF sender from a local track. |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
797 private: | 797 private: |
798 bool completed_; | 798 bool completed_; |
799 std::vector<std::string> tones_; | 799 std::vector<std::string> tones_; |
800 }; | 800 }; |
801 | 801 |
802 explicit PeerConnectionTestClient(const std::string& id) : id_(id) {} | 802 explicit PeerConnectionTestClient(const std::string& id) : id_(id) {} |
803 | 803 |
804 bool Init( | 804 bool Init( |
805 const MediaConstraintsInterface* constraints, | 805 const MediaConstraintsInterface* constraints, |
806 const PeerConnectionFactory::Options* options, | 806 const PeerConnectionFactory::Options* options, |
807 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, | 807 std::unique_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, |
808 bool prefer_constraint_apis, | 808 bool prefer_constraint_apis, |
809 rtc::Thread* worker_thread) { | 809 rtc::Thread* worker_thread) { |
810 EXPECT_TRUE(!peer_connection_); | 810 EXPECT_TRUE(!peer_connection_); |
811 EXPECT_TRUE(!peer_connection_factory_); | 811 EXPECT_TRUE(!peer_connection_factory_); |
812 if (!prefer_constraint_apis) { | 812 if (!prefer_constraint_apis) { |
813 EXPECT_TRUE(!constraints); | 813 EXPECT_TRUE(!constraints); |
814 } | 814 } |
815 prefer_constraint_apis_ = prefer_constraint_apis; | 815 prefer_constraint_apis_ = prefer_constraint_apis; |
816 | 816 |
817 rtc::scoped_ptr<cricket::PortAllocator> port_allocator( | 817 std::unique_ptr<cricket::PortAllocator> port_allocator( |
818 new cricket::FakePortAllocator(worker_thread, nullptr)); | 818 new cricket::FakePortAllocator(worker_thread, nullptr)); |
819 fake_audio_capture_module_ = FakeAudioCaptureModule::Create(); | 819 fake_audio_capture_module_ = FakeAudioCaptureModule::Create(); |
820 | 820 |
821 if (fake_audio_capture_module_ == nullptr) { | 821 if (fake_audio_capture_module_ == nullptr) { |
822 return false; | 822 return false; |
823 } | 823 } |
824 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory(); | 824 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory(); |
825 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory(); | 825 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory(); |
826 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( | 826 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( |
827 worker_thread, rtc::Thread::Current(), fake_audio_capture_module_, | 827 worker_thread, rtc::Thread::Current(), fake_audio_capture_module_, |
828 fake_video_encoder_factory_, fake_video_decoder_factory_); | 828 fake_video_encoder_factory_, fake_video_decoder_factory_); |
829 if (!peer_connection_factory_) { | 829 if (!peer_connection_factory_) { |
830 return false; | 830 return false; |
831 } | 831 } |
832 if (options) { | 832 if (options) { |
833 peer_connection_factory_->SetOptions(*options); | 833 peer_connection_factory_->SetOptions(*options); |
834 } | 834 } |
835 peer_connection_ = CreatePeerConnection( | 835 peer_connection_ = CreatePeerConnection( |
836 std::move(port_allocator), constraints, std::move(dtls_identity_store)); | 836 std::move(port_allocator), constraints, std::move(dtls_identity_store)); |
837 return peer_connection_.get() != nullptr; | 837 return peer_connection_.get() != nullptr; |
838 } | 838 } |
839 | 839 |
840 rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection( | 840 rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection( |
841 rtc::scoped_ptr<cricket::PortAllocator> port_allocator, | 841 std::unique_ptr<cricket::PortAllocator> port_allocator, |
842 const MediaConstraintsInterface* constraints, | 842 const MediaConstraintsInterface* constraints, |
843 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store) { | 843 std::unique_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store) { |
844 // CreatePeerConnection with RTCConfiguration. | 844 // CreatePeerConnection with RTCConfiguration. |
845 webrtc::PeerConnectionInterface::RTCConfiguration config; | 845 webrtc::PeerConnectionInterface::RTCConfiguration config; |
846 webrtc::PeerConnectionInterface::IceServer ice_server; | 846 webrtc::PeerConnectionInterface::IceServer ice_server; |
847 ice_server.uri = "stun:stun.l.google.com:19302"; | 847 ice_server.uri = "stun:stun.l.google.com:19302"; |
848 config.servers.push_back(ice_server); | 848 config.servers.push_back(ice_server); |
849 | 849 |
850 return peer_connection_factory_->CreatePeerConnection( | 850 return peer_connection_factory_->CreatePeerConnection( |
851 config, constraints, std::move(port_allocator), | 851 config, constraints, std::move(port_allocator), |
852 std::move(dtls_identity_store), this); | 852 std::move(dtls_identity_store), this); |
853 } | 853 } |
854 | 854 |
855 void HandleIncomingOffer(const std::string& msg) { | 855 void HandleIncomingOffer(const std::string& msg) { |
856 LOG(INFO) << id_ << "HandleIncomingOffer "; | 856 LOG(INFO) << id_ << "HandleIncomingOffer "; |
857 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) { | 857 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) { |
858 // If we are not sending any streams ourselves it is time to add some. | 858 // If we are not sending any streams ourselves it is time to add some. |
859 AddMediaStream(true, true); | 859 AddMediaStream(true, true); |
860 } | 860 } |
861 rtc::scoped_ptr<SessionDescriptionInterface> desc( | 861 std::unique_ptr<SessionDescriptionInterface> desc( |
862 webrtc::CreateSessionDescription("offer", msg, nullptr)); | 862 webrtc::CreateSessionDescription("offer", msg, nullptr)); |
863 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); | 863 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); |
864 rtc::scoped_ptr<SessionDescriptionInterface> answer; | 864 std::unique_ptr<SessionDescriptionInterface> answer; |
865 EXPECT_TRUE(DoCreateAnswer(&answer)); | 865 EXPECT_TRUE(DoCreateAnswer(&answer)); |
866 std::string sdp; | 866 std::string sdp; |
867 EXPECT_TRUE(answer->ToString(&sdp)); | 867 EXPECT_TRUE(answer->ToString(&sdp)); |
868 EXPECT_TRUE(DoSetLocalDescription(answer.release())); | 868 EXPECT_TRUE(DoSetLocalDescription(answer.release())); |
869 if (signaling_message_receiver_) { | 869 if (signaling_message_receiver_) { |
870 signaling_message_receiver_->ReceiveSdpMessage( | 870 signaling_message_receiver_->ReceiveSdpMessage( |
871 webrtc::SessionDescriptionInterface::kAnswer, sdp); | 871 webrtc::SessionDescriptionInterface::kAnswer, sdp); |
872 } | 872 } |
873 } | 873 } |
874 | 874 |
875 void HandleIncomingAnswer(const std::string& msg) { | 875 void HandleIncomingAnswer(const std::string& msg) { |
876 LOG(INFO) << id_ << "HandleIncomingAnswer"; | 876 LOG(INFO) << id_ << "HandleIncomingAnswer"; |
877 rtc::scoped_ptr<SessionDescriptionInterface> desc( | 877 std::unique_ptr<SessionDescriptionInterface> desc( |
878 webrtc::CreateSessionDescription("answer", msg, nullptr)); | 878 webrtc::CreateSessionDescription("answer", msg, nullptr)); |
879 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); | 879 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); |
880 } | 880 } |
881 | 881 |
882 bool DoCreateOfferAnswer(rtc::scoped_ptr<SessionDescriptionInterface>* desc, | 882 bool DoCreateOfferAnswer(std::unique_ptr<SessionDescriptionInterface>* desc, |
883 bool offer) { | 883 bool offer) { |
884 rtc::scoped_refptr<MockCreateSessionDescriptionObserver> | 884 rtc::scoped_refptr<MockCreateSessionDescriptionObserver> |
885 observer(new rtc::RefCountedObject< | 885 observer(new rtc::RefCountedObject< |
886 MockCreateSessionDescriptionObserver>()); | 886 MockCreateSessionDescriptionObserver>()); |
887 if (prefer_constraint_apis_) { | 887 if (prefer_constraint_apis_) { |
888 if (offer) { | 888 if (offer) { |
889 pc()->CreateOffer(observer, &offer_answer_constraints_); | 889 pc()->CreateOffer(observer, &offer_answer_constraints_); |
890 } else { | 890 } else { |
891 pc()->CreateAnswer(observer, &offer_answer_constraints_); | 891 pc()->CreateAnswer(observer, &offer_answer_constraints_); |
892 } | 892 } |
893 } else { | 893 } else { |
894 if (offer) { | 894 if (offer) { |
895 pc()->CreateOffer(observer, offer_answer_options_); | 895 pc()->CreateOffer(observer, offer_answer_options_); |
896 } else { | 896 } else { |
897 pc()->CreateAnswer(observer, offer_answer_options_); | 897 pc()->CreateAnswer(observer, offer_answer_options_); |
898 } | 898 } |
899 } | 899 } |
900 EXPECT_EQ_WAIT(true, observer->called(), kMaxWaitMs); | 900 EXPECT_EQ_WAIT(true, observer->called(), kMaxWaitMs); |
901 desc->reset(observer->release_desc()); | 901 desc->reset(observer->release_desc()); |
902 if (observer->result() && ExpectIceRestart()) { | 902 if (observer->result() && ExpectIceRestart()) { |
903 EXPECT_EQ(0u, (*desc)->candidates(0)->count()); | 903 EXPECT_EQ(0u, (*desc)->candidates(0)->count()); |
904 } | 904 } |
905 return observer->result(); | 905 return observer->result(); |
906 } | 906 } |
907 | 907 |
908 bool DoCreateOffer(rtc::scoped_ptr<SessionDescriptionInterface>* desc) { | 908 bool DoCreateOffer(std::unique_ptr<SessionDescriptionInterface>* desc) { |
909 return DoCreateOfferAnswer(desc, true); | 909 return DoCreateOfferAnswer(desc, true); |
910 } | 910 } |
911 | 911 |
912 bool DoCreateAnswer(rtc::scoped_ptr<SessionDescriptionInterface>* desc) { | 912 bool DoCreateAnswer(std::unique_ptr<SessionDescriptionInterface>* desc) { |
913 return DoCreateOfferAnswer(desc, false); | 913 return DoCreateOfferAnswer(desc, false); |
914 } | 914 } |
915 | 915 |
916 bool DoSetLocalDescription(SessionDescriptionInterface* desc) { | 916 bool DoSetLocalDescription(SessionDescriptionInterface* desc) { |
917 rtc::scoped_refptr<MockSetSessionDescriptionObserver> | 917 rtc::scoped_refptr<MockSetSessionDescriptionObserver> |
918 observer(new rtc::RefCountedObject< | 918 observer(new rtc::RefCountedObject< |
919 MockSetSessionDescriptionObserver>()); | 919 MockSetSessionDescriptionObserver>()); |
920 LOG(INFO) << id_ << "SetLocalDescription "; | 920 LOG(INFO) << id_ << "SetLocalDescription "; |
921 pc()->SetLocalDescription(observer, desc); | 921 pc()->SetLocalDescription(observer, desc); |
922 // Ignore the observer result. If we wait for the result with | 922 // Ignore the observer result. If we wait for the result with |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 bool prefer_constraint_apis_ = true; | 975 bool prefer_constraint_apis_ = true; |
976 bool auto_add_stream_ = true; | 976 bool auto_add_stream_ = true; |
977 | 977 |
978 typedef std::pair<std::string, std::string> IceUfragPwdPair; | 978 typedef std::pair<std::string, std::string> IceUfragPwdPair; |
979 std::map<int, IceUfragPwdPair> ice_ufrag_pwd_; | 979 std::map<int, IceUfragPwdPair> ice_ufrag_pwd_; |
980 bool expect_ice_restart_ = false; | 980 bool expect_ice_restart_ = false; |
981 | 981 |
982 // Needed to keep track of number of frames sent. | 982 // Needed to keep track of number of frames sent. |
983 rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_; | 983 rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_; |
984 // Needed to keep track of number of frames received. | 984 // Needed to keep track of number of frames received. |
985 std::map<std::string, rtc::scoped_ptr<webrtc::FakeVideoTrackRenderer>> | 985 std::map<std::string, std::unique_ptr<webrtc::FakeVideoTrackRenderer>> |
986 fake_video_renderers_; | 986 fake_video_renderers_; |
987 // Needed to ensure frames aren't received for removed tracks. | 987 // Needed to ensure frames aren't received for removed tracks. |
988 std::vector<rtc::scoped_ptr<webrtc::FakeVideoTrackRenderer>> | 988 std::vector<std::unique_ptr<webrtc::FakeVideoTrackRenderer>> |
989 removed_fake_video_renderers_; | 989 removed_fake_video_renderers_; |
990 // Needed to keep track of number of frames received when external decoder | 990 // Needed to keep track of number of frames received when external decoder |
991 // used. | 991 // used. |
992 FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_ = nullptr; | 992 FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_ = nullptr; |
993 FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_ = nullptr; | 993 FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_ = nullptr; |
994 bool video_decoder_factory_enabled_ = false; | 994 bool video_decoder_factory_enabled_ = false; |
995 webrtc::FakeConstraints video_constraints_; | 995 webrtc::FakeConstraints video_constraints_; |
996 | 996 |
997 // For remote peer communication. | 997 // For remote peer communication. |
998 SignalingMessageReceiver* signaling_message_receiver_ = nullptr; | 998 SignalingMessageReceiver* signaling_message_receiver_ = nullptr; |
999 | 999 |
1000 // Store references to the video capturers we've created, so that we can stop | 1000 // Store references to the video capturers we've created, so that we can stop |
1001 // them, if required. | 1001 // them, if required. |
1002 std::vector<cricket::FakeVideoCapturer*> video_capturers_; | 1002 std::vector<cricket::FakeVideoCapturer*> video_capturers_; |
1003 webrtc::VideoRotation capture_rotation_ = webrtc::kVideoRotation_0; | 1003 webrtc::VideoRotation capture_rotation_ = webrtc::kVideoRotation_0; |
1004 // |local_video_renderer_| attached to the first created local video track. | 1004 // |local_video_renderer_| attached to the first created local video track. |
1005 rtc::scoped_ptr<webrtc::FakeVideoTrackRenderer> local_video_renderer_; | 1005 std::unique_ptr<webrtc::FakeVideoTrackRenderer> local_video_renderer_; |
1006 | 1006 |
1007 webrtc::FakeConstraints offer_answer_constraints_; | 1007 webrtc::FakeConstraints offer_answer_constraints_; |
1008 PeerConnectionInterface::RTCOfferAnswerOptions offer_answer_options_; | 1008 PeerConnectionInterface::RTCOfferAnswerOptions offer_answer_options_; |
1009 bool remove_msid_ = false; // True if MSID should be removed in received SDP. | 1009 bool remove_msid_ = false; // True if MSID should be removed in received SDP. |
1010 bool remove_bundle_ = | 1010 bool remove_bundle_ = |
1011 false; // True if bundle should be removed in received SDP. | 1011 false; // True if bundle should be removed in received SDP. |
1012 bool remove_sdes_ = | 1012 bool remove_sdes_ = |
1013 false; // True if a=crypto should be removed in received SDP. | 1013 false; // True if a=crypto should be removed in received SDP. |
1014 // |remove_cvo_| is true if extension urn:3gpp:video-orientation should be | 1014 // |remove_cvo_| is true if extension urn:3gpp:video-orientation should be |
1015 // removed in the received SDP. | 1015 // removed in the received SDP. |
1016 bool remove_cvo_ = false; | 1016 bool remove_cvo_ = false; |
1017 | 1017 |
1018 rtc::scoped_refptr<DataChannelInterface> data_channel_; | 1018 rtc::scoped_refptr<DataChannelInterface> data_channel_; |
1019 rtc::scoped_ptr<MockDataChannelObserver> data_observer_; | 1019 std::unique_ptr<MockDataChannelObserver> data_observer_; |
1020 }; | 1020 }; |
1021 | 1021 |
1022 class P2PTestConductor : public testing::Test { | 1022 class P2PTestConductor : public testing::Test { |
1023 public: | 1023 public: |
1024 P2PTestConductor() | 1024 P2PTestConductor() |
1025 : pss_(new rtc::PhysicalSocketServer), | 1025 : pss_(new rtc::PhysicalSocketServer), |
1026 ss_(new rtc::VirtualSocketServer(pss_.get())), | 1026 ss_(new rtc::VirtualSocketServer(pss_.get())), |
1027 ss_scope_(ss_.get()) { | 1027 ss_scope_(ss_.get()) { |
1028 RTC_CHECK(worker_thread_.Start()); | 1028 RTC_CHECK(worker_thread_.Start()); |
1029 } | 1029 } |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); | 1246 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); |
1247 LocalP2PTest(); | 1247 LocalP2PTest(); |
1248 VerifyRenderedSize(640, 480); | 1248 VerifyRenderedSize(640, 480); |
1249 } | 1249 } |
1250 | 1250 |
1251 PeerConnectionTestClient* CreateDtlsClientWithAlternateKey() { | 1251 PeerConnectionTestClient* CreateDtlsClientWithAlternateKey() { |
1252 FakeConstraints setup_constraints; | 1252 FakeConstraints setup_constraints; |
1253 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, | 1253 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, |
1254 true); | 1254 true); |
1255 | 1255 |
1256 rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( | 1256 std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
1257 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() | 1257 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() |
1258 : nullptr); | 1258 : nullptr); |
1259 dtls_identity_store->use_alternate_key(); | 1259 dtls_identity_store->use_alternate_key(); |
1260 | 1260 |
1261 // Make sure the new client is using a different certificate. | 1261 // Make sure the new client is using a different certificate. |
1262 return PeerConnectionTestClient::CreateClientWithDtlsIdentityStore( | 1262 return PeerConnectionTestClient::CreateClientWithDtlsIdentityStore( |
1263 "New Peer: ", &setup_constraints, nullptr, | 1263 "New Peer: ", &setup_constraints, nullptr, |
1264 std::move(dtls_identity_store), prefer_constraint_apis_, | 1264 std::move(dtls_identity_store), prefer_constraint_apis_, |
1265 &worker_thread_); | 1265 &worker_thread_); |
1266 } | 1266 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1298 PeerConnectionTestClient* client) { | 1298 PeerConnectionTestClient* client) { |
1299 PeerConnectionTestClient* old = receiving_client_.release(); | 1299 PeerConnectionTestClient* old = receiving_client_.release(); |
1300 receiving_client_.reset(client); | 1300 receiving_client_.reset(client); |
1301 return old; | 1301 return old; |
1302 } | 1302 } |
1303 | 1303 |
1304 private: | 1304 private: |
1305 // |worker_thread_| is used by both |initiating_client_| and | 1305 // |worker_thread_| is used by both |initiating_client_| and |
1306 // |receiving_client_|. Must be destroyed last. | 1306 // |receiving_client_|. Must be destroyed last. |
1307 rtc::Thread worker_thread_; | 1307 rtc::Thread worker_thread_; |
1308 rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; | 1308 std::unique_ptr<rtc::PhysicalSocketServer> pss_; |
1309 rtc::scoped_ptr<rtc::VirtualSocketServer> ss_; | 1309 std::unique_ptr<rtc::VirtualSocketServer> ss_; |
1310 rtc::SocketServerScope ss_scope_; | 1310 rtc::SocketServerScope ss_scope_; |
1311 rtc::scoped_ptr<PeerConnectionTestClient> initiating_client_; | 1311 std::unique_ptr<PeerConnectionTestClient> initiating_client_; |
1312 rtc::scoped_ptr<PeerConnectionTestClient> receiving_client_; | 1312 std::unique_ptr<PeerConnectionTestClient> receiving_client_; |
1313 bool prefer_constraint_apis_ = true; | 1313 bool prefer_constraint_apis_ = true; |
1314 }; | 1314 }; |
1315 | 1315 |
1316 // Disable for TSan v2, see | 1316 // Disable for TSan v2, see |
1317 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. | 1317 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. |
1318 #if !defined(THREAD_SANITIZER) | 1318 #if !defined(THREAD_SANITIZER) |
1319 | 1319 |
1320 // This test sets up a Jsep call between two parties and test Dtmf. | 1320 // This test sets up a Jsep call between two parties and test Dtmf. |
1321 // TODO(holmer): Disabled due to sometimes crashing on buildbots. | 1321 // TODO(holmer): Disabled due to sometimes crashing on buildbots. |
1322 // See issue webrtc/2378. | 1322 // See issue webrtc/2378. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1398 } | 1398 } |
1399 | 1399 |
1400 // This test sets up a call transfer to a new caller with a different DTLS | 1400 // This test sets up a call transfer to a new caller with a different DTLS |
1401 // fingerprint. | 1401 // fingerprint. |
1402 TEST_F(P2PTestConductor, LocalP2PTestDtlsTransferCallee) { | 1402 TEST_F(P2PTestConductor, LocalP2PTestDtlsTransferCallee) { |
1403 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); | 1403 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
1404 SetupAndVerifyDtlsCall(); | 1404 SetupAndVerifyDtlsCall(); |
1405 | 1405 |
1406 // Keeping the original peer around which will still send packets to the | 1406 // Keeping the original peer around which will still send packets to the |
1407 // receiving client. These SRTP packets will be dropped. | 1407 // receiving client. These SRTP packets will be dropped. |
1408 rtc::scoped_ptr<PeerConnectionTestClient> original_peer( | 1408 std::unique_ptr<PeerConnectionTestClient> original_peer( |
1409 set_initializing_client(CreateDtlsClientWithAlternateKey())); | 1409 set_initializing_client(CreateDtlsClientWithAlternateKey())); |
1410 original_peer->pc()->Close(); | 1410 original_peer->pc()->Close(); |
1411 | 1411 |
1412 SetSignalingReceivers(); | 1412 SetSignalingReceivers(); |
1413 receiving_client()->SetExpectIceRestart(true); | 1413 receiving_client()->SetExpectIceRestart(true); |
1414 LocalP2PTest(); | 1414 LocalP2PTest(); |
1415 VerifyRenderedSize(640, 480); | 1415 VerifyRenderedSize(640, 480); |
1416 } | 1416 } |
1417 | 1417 |
1418 // This test sets up a non-bundle call and apply bundle during ICE restart. When | 1418 // This test sets up a non-bundle call and apply bundle during ICE restart. When |
(...skipping 17 matching lines...) Expand all Loading... |
1436 } | 1436 } |
1437 | 1437 |
1438 // This test sets up a call transfer to a new callee with a different DTLS | 1438 // This test sets up a call transfer to a new callee with a different DTLS |
1439 // fingerprint. | 1439 // fingerprint. |
1440 TEST_F(P2PTestConductor, LocalP2PTestDtlsTransferCaller) { | 1440 TEST_F(P2PTestConductor, LocalP2PTestDtlsTransferCaller) { |
1441 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); | 1441 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
1442 SetupAndVerifyDtlsCall(); | 1442 SetupAndVerifyDtlsCall(); |
1443 | 1443 |
1444 // Keeping the original peer around which will still send packets to the | 1444 // Keeping the original peer around which will still send packets to the |
1445 // receiving client. These SRTP packets will be dropped. | 1445 // receiving client. These SRTP packets will be dropped. |
1446 rtc::scoped_ptr<PeerConnectionTestClient> original_peer( | 1446 std::unique_ptr<PeerConnectionTestClient> original_peer( |
1447 set_receiving_client(CreateDtlsClientWithAlternateKey())); | 1447 set_receiving_client(CreateDtlsClientWithAlternateKey())); |
1448 original_peer->pc()->Close(); | 1448 original_peer->pc()->Close(); |
1449 | 1449 |
1450 SetSignalingReceivers(); | 1450 SetSignalingReceivers(); |
1451 initializing_client()->IceRestart(); | 1451 initializing_client()->IceRestart(); |
1452 LocalP2PTest(); | 1452 LocalP2PTest(); |
1453 VerifyRenderedSize(640, 480); | 1453 VerifyRenderedSize(640, 480); |
1454 } | 1454 } |
1455 | 1455 |
1456 TEST_F(P2PTestConductor, LocalP2PTestCVO) { | 1456 TEST_F(P2PTestConductor, LocalP2PTestCVO) { |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2199 server.urls.push_back("turn:hostname2"); | 2199 server.urls.push_back("turn:hostname2"); |
2200 servers.push_back(server); | 2200 servers.push_back(server); |
2201 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); | 2201 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); |
2202 EXPECT_EQ(2U, turn_servers_.size()); | 2202 EXPECT_EQ(2U, turn_servers_.size()); |
2203 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); | 2203 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); |
2204 } | 2204 } |
2205 | 2205 |
2206 #endif // if !defined(THREAD_SANITIZER) | 2206 #endif // if !defined(THREAD_SANITIZER) |
2207 | 2207 |
2208 } // namespace | 2208 } // namespace |
OLD | NEW |