Index: webrtc/pc/peerconnectioninterface_unittest.cc |
diff --git a/webrtc/pc/peerconnectioninterface_unittest.cc b/webrtc/pc/peerconnectioninterface_unittest.cc |
index 1a26a4352277fa5aa616f80d5725f82707bcce1b..ad1f95b4c1b9194355d518cef66fbce2ea4e2e17 100644 |
--- a/webrtc/pc/peerconnectioninterface_unittest.cc |
+++ b/webrtc/pc/peerconnectioninterface_unittest.cc |
@@ -606,6 +606,15 @@ class MockPeerConnectionObserver : public PeerConnectionObserver { |
last_added_track_label_ = receiver->id(); |
} |
+ void OnRemoveTrack( |
+ rtc::scoped_refptr<RtpReceiverInterface> receiver, |
+ const std::vector<rtc::scoped_refptr<MediaStreamInterface>> & |
+ streams) override { |
+ EXPECT_TRUE(receiver != nullptr); |
+ num_removed_tracks_++; |
+ last_removed_track_label_ = receiver->id(); |
+ } |
+ |
// Returns the label of the last added stream. |
// Empty string if no stream have been added. |
std::string GetLastAddedStreamLabel() { |
@@ -629,6 +638,8 @@ class MockPeerConnectionObserver : public PeerConnectionObserver { |
bool callback_triggered_ = false; |
int num_added_tracks_ = 0; |
std::string last_added_track_label_; |
+ int num_removed_tracks_ = 0; |
+ std::string last_removed_track_label_; |
private: |
rtc::scoped_refptr<MediaStreamInterface> last_added_stream_; |
@@ -864,9 +875,10 @@ class PeerConnectionInterfaceTest : public testing::Test { |
observer_.renegotiation_needed_ = false; |
} |
- void AddAudioVideoStream(const std::string& stream_label, |
- const std::string& audio_track_label, |
- const std::string& video_track_label) { |
+ rtc::scoped_refptr<MediaStreamInterface> AddAudioVideoStream( |
+ const std::string& stream_label, |
+ const std::string& audio_track_label, |
+ const std::string& video_track_label) { |
// Create a local stream. |
rtc::scoped_refptr<MediaStreamInterface> stream( |
pc_factory_->CreateLocalMediaStream(stream_label)); |
@@ -883,6 +895,7 @@ class PeerConnectionInterfaceTest : public testing::Test { |
EXPECT_TRUE(pc_->AddStream(stream)); |
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout); |
observer_.renegotiation_needed_ = false; |
+ return stream; |
} |
bool DoCreateOfferAnswer(std::unique_ptr<SessionDescriptionInterface>* desc, |
@@ -3770,3 +3783,21 @@ TEST_F(PeerConnectionInterfaceTest, MediaStreamAddTrackRemoveTrackRenegotiate) { |
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout); |
observer_.renegotiation_needed_ = false; |
} |
+ |
+// This tests that PeerConnectionObserver::OnRemoveTrack is correctly called. |
+TEST_F(PeerConnectionInterfaceTest, OnRemoveTrackCallback) { |
+ CreatePeerConnectionWithoutDtls(); |
+ auto stream = AddAudioVideoStream( |
+ kStreamLabel1, "audio_label", "video_label"); |
+ CreateOfferReceiveAnswer(); |
+ |
+ auto audio_track = stream->GetAudioTracks()[0]; |
+ EXPECT_TRUE(stream->RemoveTrack(audio_track)); |
+ EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout); |
+ observer_.renegotiation_needed_ = false; |
+ |
+ CreateOfferReceiveAnswer(); |
+ |
+ EXPECT_EQ(observer_.num_removed_tracks_, 1u); |
+ EXPECT_EQ(observer_.last_removed_track_label_, audio_track->id()); |
+} |