Chromium Code Reviews| Index: webrtc/api/rtpsenderreceiver_unittest.cc |
| diff --git a/webrtc/api/rtpsenderreceiver_unittest.cc b/webrtc/api/rtpsenderreceiver_unittest.cc |
| index f4f550e9068dd872f608a0e442df37584a5cd6aa..f3e86ae4a06bb570212b2fd66c79130537ad8667 100644 |
| --- a/webrtc/api/rtpsenderreceiver_unittest.cc |
| +++ b/webrtc/api/rtpsenderreceiver_unittest.cc |
| @@ -101,9 +101,11 @@ class RtpSenderReceiverTest : public testing::Test { |
| void TearDown() override { channel_manager_.Terminate(); } |
| - void AddVideoTrack() { |
| + void AddVideoTrack() { AddVideoTrack(false); } |
| + |
| + void AddVideoTrack(bool is_screencast) { |
| rtc::scoped_refptr<VideoTrackSourceInterface> source( |
| - FakeVideoTrackSource::Create()); |
| + FakeVideoTrackSource::Create(is_screencast)); |
| video_track_ = VideoTrack::Create(kVideoTrackId, source); |
| EXPECT_TRUE(stream_->AddTrack(video_track_)); |
| } |
| @@ -120,8 +122,10 @@ class RtpSenderReceiverTest : public testing::Test { |
| VerifyVoiceChannelInput(); |
| } |
| - void CreateVideoRtpSender() { |
| - AddVideoTrack(); |
| + void CreateVideoRtpSender() { CreateVideoRtpSender(false); } |
| + |
| + void CreateVideoRtpSender(bool is_screencast) { |
| + AddVideoTrack(is_screencast); |
| video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], |
| stream_->label(), video_channel_); |
| video_rtp_sender_->SetSsrc(kVideoSsrc); |
| @@ -621,4 +625,88 @@ TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) { |
| DestroyVideoRtpReceiver(); |
| } |
| +TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) { |
| + CreateVideoRtpSender(); |
| + |
| + video_track_->set_enabled(true); |
| + |
| + // |video_track_| is not screencast by default. |
| + EXPECT_EQ(rtc::Optional<bool>(false), |
| + video_media_channel_->options().is_screencast); |
| + // No content hint should be set by default. |
| + EXPECT_EQ(VideoTrackInterface::ContentHint::kNone, |
| + video_track_->content_hint()); |
| + // Setting detailed should turn a non-screencast source into screencast mode. |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed); |
| + EXPECT_EQ(rtc::Optional<bool>(true), |
| + video_media_channel_->options().is_screencast); |
| + // Removing the content hint should turn the track back into non-screencast |
| + // mode. |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone); |
| + EXPECT_EQ(rtc::Optional<bool>(false), |
| + video_media_channel_->options().is_screencast); |
| + // Setting fluid should remain in non-screencast mode (its default). |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid); |
| + EXPECT_EQ(rtc::Optional<bool>(false), |
| + video_media_channel_->options().is_screencast); |
| + |
| + DestroyVideoRtpSender(); |
| +} |
| + |
| +TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHintForScreencast) { |
|
Taylor Brandstetter
2016/12/16 23:06:38
nit: I'd prefer calling this test PropagatesVideoT
pbos-webrtc
2016/12/16 23:17:06
Done.
|
| + CreateVideoRtpSender(true); |
| + |
| + video_track_->set_enabled(true); |
| + |
| + // |video_track_| with a screencast source should be screencast by default. |
| + EXPECT_EQ(rtc::Optional<bool>(true), |
| + video_media_channel_->options().is_screencast); |
| + // No content hint should be set by default. |
| + EXPECT_EQ(VideoTrackInterface::ContentHint::kNone, |
| + video_track_->content_hint()); |
| + // Setting fluid should turn a screencast source into non-screencast mode. |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid); |
| + EXPECT_EQ(rtc::Optional<bool>(false), |
| + video_media_channel_->options().is_screencast); |
| + // Removing the content hint should turn the track back into screencast mode. |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone); |
| + EXPECT_EQ(rtc::Optional<bool>(true), |
| + video_media_channel_->options().is_screencast); |
| + // Setting detailed should still remain in screencast mode (its default). |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed); |
| + EXPECT_EQ(rtc::Optional<bool>(true), |
| + video_media_channel_->options().is_screencast); |
| + |
| + DestroyVideoRtpSender(); |
| +} |
| + |
| +TEST_F(RtpSenderReceiverTest, |
| + PropagatesVideoTrackContentHintSetBeforeEnabling) { |
| + AddVideoTrack(); |
| + // Setting detailed overrides the default non-screencast mode. This should be |
| + // applied even if the track is set on construction. |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed); |
| + video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], |
| + stream_->label(), video_channel_); |
| + video_track_->set_enabled(true); |
| + |
| + // Sender is not ready to send (no SSRC) so no option should have been set. |
| + EXPECT_EQ(rtc::Optional<bool>(), |
| + video_media_channel_->options().is_screencast); |
| + |
| + // Verify that the content hint is accounted for when video_rtp_sender_ does |
| + // get enabled. |
| + video_rtp_sender_->SetSsrc(kVideoSsrc); |
| + EXPECT_EQ(rtc::Optional<bool>(true), |
| + video_media_channel_->options().is_screencast); |
| + |
| + // And removing the hint should go back to false (to verify that false was |
| + // default correctly). |
| + video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone); |
| + EXPECT_EQ(rtc::Optional<bool>(false), |
| + video_media_channel_->options().is_screencast); |
| + |
| + DestroyVideoRtpSender(); |
| +} |
| + |
| } // namespace webrtc |