Chromium Code Reviews| 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 |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 291 State state() const { return state_; } | 291 State state() const { return state_; } |
| 292 | 292 |
| 293 protected: | 293 protected: |
| 294 ~WebRtcSessionCreateSDPObserverForTest() {} | 294 ~WebRtcSessionCreateSDPObserverForTest() {} |
| 295 | 295 |
| 296 private: | 296 private: |
| 297 rtc::scoped_ptr<SessionDescriptionInterface> description_; | 297 rtc::scoped_ptr<SessionDescriptionInterface> description_; |
| 298 State state_; | 298 State state_; |
| 299 }; | 299 }; |
| 300 | 300 |
| 301 class FakeAudioRenderer : public cricket::AudioRenderer { | 301 class FakeAudioSource : public cricket::AudioSource { |
| 302 public: | 302 public: |
| 303 FakeAudioRenderer() : sink_(NULL) {} | 303 FakeAudioSource() : sink_(NULL) {} |
| 304 virtual ~FakeAudioRenderer() { | 304 virtual ~FakeAudioSource() { |
| 305 if (sink_) | 305 if (sink_) |
| 306 sink_->OnClose(); | 306 sink_->OnClose(); |
| 307 } | 307 } |
| 308 | 308 |
| 309 void SetSink(Sink* sink) override { sink_ = sink; } | 309 void SetSink(Sink* sink) override { sink_ = sink; } |
| 310 | 310 |
| 311 cricket::AudioRenderer::Sink* sink() const { return sink_; } | 311 cricket::AudioSource::Sink* sink() const { return sink_; } |
|
the sun
2016/03/07 16:35:14
almost unrelated: is it possible to make the resul
| |
| 312 | |
| 312 private: | 313 private: |
| 313 cricket::AudioRenderer::Sink* sink_; | 314 cricket::AudioSource::Sink* sink_; |
| 314 }; | 315 }; |
| 315 | 316 |
| 316 class WebRtcSessionTest | 317 class WebRtcSessionTest |
| 317 : public testing::TestWithParam<RTCCertificateGenerationMethod>, | 318 : public testing::TestWithParam<RTCCertificateGenerationMethod>, |
| 318 public sigslot::has_slots<> { | 319 public sigslot::has_slots<> { |
| 319 protected: | 320 protected: |
| 320 // TODO Investigate why ChannelManager crashes, if it's created | 321 // TODO Investigate why ChannelManager crashes, if it's created |
| 321 // after stun_server. | 322 // after stun_server. |
| 322 WebRtcSessionTest() | 323 WebRtcSessionTest() |
| 323 : media_engine_(new cricket::FakeMediaEngine()), | 324 : media_engine_(new cricket::FakeMediaEngine()), |
| (...skipping 3015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3339 CreateAndSetRemoteOfferAndLocalAnswer(); | 3340 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3340 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); | 3341 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3341 ASSERT_TRUE(channel != NULL); | 3342 ASSERT_TRUE(channel != NULL); |
| 3342 ASSERT_EQ(1u, channel->send_streams().size()); | 3343 ASSERT_EQ(1u, channel->send_streams().size()); |
| 3343 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); | 3344 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3344 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); | 3345 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3345 | 3346 |
| 3346 cricket::AudioOptions options; | 3347 cricket::AudioOptions options; |
| 3347 options.echo_cancellation = rtc::Optional<bool>(true); | 3348 options.echo_cancellation = rtc::Optional<bool>(true); |
| 3348 | 3349 |
| 3349 rtc::scoped_ptr<FakeAudioRenderer> renderer(new FakeAudioRenderer()); | 3350 rtc::scoped_ptr<FakeAudioSource> source(new FakeAudioSource()); |
| 3350 session_->SetAudioSend(send_ssrc, false, options, renderer.get()); | 3351 session_->SetAudioSend(send_ssrc, false, options, source.get()); |
| 3351 EXPECT_TRUE(channel->IsStreamMuted(send_ssrc)); | 3352 EXPECT_TRUE(channel->IsStreamMuted(send_ssrc)); |
| 3352 EXPECT_EQ(rtc::Optional<bool>(), channel->options().echo_cancellation); | 3353 EXPECT_EQ(rtc::Optional<bool>(), channel->options().echo_cancellation); |
| 3353 EXPECT_TRUE(renderer->sink() != NULL); | 3354 EXPECT_TRUE(source->sink() != nullptr); |
| 3354 | 3355 |
| 3355 // This will trigger SetSink(NULL) to the |renderer|. | 3356 // This will trigger SetSink(nullptr) to the |source|. |
| 3356 session_->SetAudioSend(send_ssrc, true, options, NULL); | 3357 session_->SetAudioSend(send_ssrc, true, options, nullptr); |
| 3357 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); | 3358 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3358 EXPECT_EQ(rtc::Optional<bool>(true), channel->options().echo_cancellation); | 3359 EXPECT_EQ(rtc::Optional<bool>(true), channel->options().echo_cancellation); |
| 3359 EXPECT_TRUE(renderer->sink() == NULL); | 3360 EXPECT_TRUE(source->sink() == nullptr); |
| 3360 } | 3361 } |
| 3361 | 3362 |
| 3362 TEST_F(WebRtcSessionTest, AudioRendererForLocalStream) { | 3363 TEST_F(WebRtcSessionTest, AudioSourceForLocalStream) { |
| 3363 Init(); | 3364 Init(); |
| 3364 SendAudioVideoStream1(); | 3365 SendAudioVideoStream1(); |
| 3365 CreateAndSetRemoteOfferAndLocalAnswer(); | 3366 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3366 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); | 3367 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3367 ASSERT_TRUE(channel != NULL); | 3368 ASSERT_TRUE(channel != NULL); |
| 3368 ASSERT_EQ(1u, channel->send_streams().size()); | 3369 ASSERT_EQ(1u, channel->send_streams().size()); |
| 3369 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); | 3370 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3370 | 3371 |
| 3371 rtc::scoped_ptr<FakeAudioRenderer> renderer(new FakeAudioRenderer()); | 3372 rtc::scoped_ptr<FakeAudioSource> source(new FakeAudioSource()); |
| 3372 cricket::AudioOptions options; | 3373 cricket::AudioOptions options; |
| 3373 session_->SetAudioSend(send_ssrc, true, options, renderer.get()); | 3374 session_->SetAudioSend(send_ssrc, true, options, source.get()); |
| 3374 EXPECT_TRUE(renderer->sink() != NULL); | 3375 EXPECT_TRUE(source->sink() != nullptr); |
| 3375 | 3376 |
| 3376 // Delete the |renderer| and it will trigger OnClose() to the sink, and this | 3377 // Delete the |source| and it will trigger OnClose() to the sink, and this |
| 3377 // will invalidate the |renderer_| pointer in the sink and prevent getting a | 3378 // will invalidate the |source_| pointer in the sink and prevent getting a |
| 3378 // SetSink(NULL) callback afterwards. | 3379 // SetSink(nullptr) callback afterwards. |
| 3379 renderer.reset(); | 3380 source.reset(); |
| 3380 | 3381 |
| 3381 // This will trigger SetSink(NULL) if no OnClose() callback. | 3382 // This will trigger SetSink(nullptr) if no OnClose() callback. |
| 3382 session_->SetAudioSend(send_ssrc, true, options, NULL); | 3383 session_->SetAudioSend(send_ssrc, true, options, nullptr); |
| 3383 } | 3384 } |
| 3384 | 3385 |
| 3385 TEST_F(WebRtcSessionTest, SetVideoPlayout) { | 3386 TEST_F(WebRtcSessionTest, SetVideoPlayout) { |
| 3386 Init(); | 3387 Init(); |
| 3387 SendAudioVideoStream1(); | 3388 SendAudioVideoStream1(); |
| 3388 CreateAndSetRemoteOfferAndLocalAnswer(); | 3389 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3389 cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0); | 3390 cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0); |
| 3390 ASSERT_TRUE(channel != NULL); | 3391 ASSERT_TRUE(channel != NULL); |
| 3391 ASSERT_LT(0u, channel->sinks().size()); | 3392 ASSERT_LT(0u, channel->sinks().size()); |
| 3392 EXPECT_TRUE(channel->sinks().begin()->second == NULL); | 3393 EXPECT_TRUE(channel->sinks().begin()->second == NULL); |
| (...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4313 } | 4314 } |
| 4314 | 4315 |
| 4315 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test | 4316 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
| 4316 // currently fails because upon disconnection and reconnection OnIceComplete is | 4317 // currently fails because upon disconnection and reconnection OnIceComplete is |
| 4317 // called more than once without returning to IceGatheringGathering. | 4318 // called more than once without returning to IceGatheringGathering. |
| 4318 | 4319 |
| 4319 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, | 4320 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
| 4320 WebRtcSessionTest, | 4321 WebRtcSessionTest, |
| 4321 testing::Values(ALREADY_GENERATED, | 4322 testing::Values(ALREADY_GENERATED, |
| 4322 DTLS_IDENTITY_STORE)); | 4323 DTLS_IDENTITY_STORE)); |
| OLD | NEW |