Make negotiationneeded processing in PeerConnection spec compliant.

This CL fixes the problem of misfired negotiationneeded notifications due
to the lack of a NegotiationNeeded slot and the proper procedure to
update it.


Change-Id: Ie273c691f11316c9846606446f6cf838226b5d5c
Bug: chromium:740501
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131283
Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27594}
This commit is contained in:
Guido Urdaneta
2019-04-11 14:37:27 +02:00
committed by Commit Bot
parent 16cb8f5d74
commit 1fa06041bc
7 changed files with 289 additions and 26 deletions

View File

@ -814,8 +814,6 @@ class PeerConnectionInterfaceBaseTest : public ::testing::Test {
auto sender_or_error =
pc_->AddTrack(CreateVideoTrack(track_label), stream_ids);
ASSERT_EQ(RTCErrorType::NONE, sender_or_error.error().type());
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
}
void AddVideoStream(const std::string& label) {
@ -823,8 +821,6 @@ class PeerConnectionInterfaceBaseTest : public ::testing::Test {
pc_factory_->CreateLocalMediaStream(label));
stream->AddTrack(CreateVideoTrack(label + "v0"));
ASSERT_TRUE(pc_->AddStream(stream));
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
}
rtc::scoped_refptr<AudioTrackInterface> CreateAudioTrack(
@ -837,8 +833,6 @@ class PeerConnectionInterfaceBaseTest : public ::testing::Test {
auto sender_or_error =
pc_->AddTrack(CreateAudioTrack(track_label), stream_ids);
ASSERT_EQ(RTCErrorType::NONE, sender_or_error.error().type());
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
}
void AddAudioStream(const std::string& label) {
@ -846,8 +840,6 @@ class PeerConnectionInterfaceBaseTest : public ::testing::Test {
pc_factory_->CreateLocalMediaStream(label));
stream->AddTrack(CreateAudioTrack(label + "a0"));
ASSERT_TRUE(pc_->AddStream(stream));
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
}
void AddAudioVideoStream(const std::string& stream_id,
@ -859,8 +851,6 @@ class PeerConnectionInterfaceBaseTest : public ::testing::Test {
stream->AddTrack(CreateAudioTrack(audio_track_label));
stream->AddTrack(CreateVideoTrack(video_track_label));
ASSERT_TRUE(pc_->AddStream(stream));
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
}
rtc::scoped_refptr<RtpReceiverInterface> GetFirstReceiverOfType(
@ -2204,9 +2194,12 @@ TEST_P(PeerConnectionInterfaceTest, RenegotiationNeededForNewRtpDataChannel) {
EXPECT_TRUE(observer_.renegotiation_needed_);
observer_.renegotiation_needed_ = false;
CreateOfferReceiveAnswer();
rtc::scoped_refptr<DataChannelInterface> dc2 =
pc_->CreateDataChannel("test2", NULL);
EXPECT_TRUE(observer_.renegotiation_needed_);
EXPECT_EQ(observer_.renegotiation_needed_,
GetParam() == SdpSemantics::kPlanB);
}
// This test that a data channel closes when a PeerConnection is deleted/closed.
@ -3894,14 +3887,17 @@ TEST_F(PeerConnectionInterfaceTestPlanB,
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
CreateOfferReceiveAnswer();
stream->AddTrack(video_track);
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
CreateOfferReceiveAnswer();
stream->RemoveTrack(audio_track);
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;
CreateOfferReceiveAnswer();
stream->RemoveTrack(video_track);
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
observer_.renegotiation_needed_ = false;