Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1535)

Unified Diff: content/renderer/media/rtc_peer_connection_handler_unittest.cc

Issue 2924033002: TrackObserver DCHECK not on main thread, tests updated. (Closed)
Patch Set: MediaStreamRemoteVideoSourceTest using the signaling thread Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/rtc_peer_connection_handler_unittest.cc
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index 30f7db73453b8e590e85952748e0374a9a20bb07..ecc194664cbb08f4177b372fcbcf6be8c2e7f6c2 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -348,10 +348,12 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
rtc::scoped_refptr<webrtc::MediaStreamInterface> stream(
mock_dependency_factory_->CreateLocalMediaStream(stream_label).get());
if (!video_track_label.empty()) {
- stream->AddTrack(MockWebRtcVideoTrack::Create(video_track_label).get());
+ InvokeAddTrack(stream,
+ MockWebRtcVideoTrack::Create(video_track_label).get());
}
if (!audio_track_label.empty()) {
- stream->AddTrack(MockWebRtcAudioTrack::Create(audio_track_label).get());
+ InvokeAddTrack(stream,
+ MockWebRtcAudioTrack::Create(audio_track_label).get());
}
mock_peer_connection_->AddRemoteStream(stream);
return stream;
@@ -373,6 +375,49 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
MediaStreamRequestResult result,
const blink::WebString& result_name) {}
+ void InvokeOnAddStream(
+ const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream) {
+ InvokeOnSignalingThread(
+ base::Bind(&webrtc::PeerConnectionObserver::OnAddStream,
+ base::Unretained(pc_handler_->observer()), remote_stream));
+ }
+
+ void InvokeOnRemoveStream(
+ const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream) {
+ InvokeOnSignalingThread(
+ base::Bind(&webrtc::PeerConnectionObserver::OnRemoveStream,
+ base::Unretained(pc_handler_->observer()), remote_stream));
+ }
+
+ template <typename T>
+ void InvokeAddTrack(
+ const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream,
+ T* webrtc_track) {
+ InvokeOnSignalingThread(base::Bind(
+ [](webrtc::MediaStreamInterface* remote_stream, T* webrtc_track) {
+ EXPECT_TRUE(remote_stream->AddTrack(webrtc_track));
+ },
+ base::Unretained(remote_stream.get()), base::Unretained(webrtc_track)));
+ }
+
+ template <typename T>
+ void InvokeRemoveTrack(
+ const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream,
+ T* webrtc_track) {
+ InvokeOnSignalingThread(base::Bind(
+ [](webrtc::MediaStreamInterface* remote_stream, T* webrtc_track) {
+ EXPECT_TRUE(remote_stream->RemoveTrack(webrtc_track));
+ },
+ base::Unretained(remote_stream.get()), base::Unretained(webrtc_track)));
+ }
+
+ template <typename T>
+ void InvokeOnSignalingThread(T callback) {
+ mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask(FROM_HERE,
+ callback);
+ RunMessageLoopsUntilIdle();
+ }
+
// Wait for all current posts to the webrtc signaling thread to run and then
// run the message loop until idle on the main thread.
void RunMessageLoopsUntilIdle() {
@@ -380,9 +425,8 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask(
- FROM_HERE,
- base::Bind(&RTCPeerConnectionHandlerTest::SignalWaitableEvent,
- base::Unretained(this), &waitable_event));
+ FROM_HERE, base::Bind(&base::WaitableEvent::Signal,
+ base::Unretained(&waitable_event)));
waitable_event.Wait();
base::RunLoop().RunUntilIdle();
}
@@ -438,10 +482,10 @@ TEST_F(RTCPeerConnectionHandlerTest, NoCallbacksToClientAfterStop) {
std::string remote_stream_label("remote_stream");
rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
- pc_handler_->observer()->OnAddStream(remote_stream);
+ InvokeOnAddStream(remote_stream);
EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteStream(_)).Times(0);
- pc_handler_->observer()->OnRemoveStream(remote_stream);
+ InvokeOnRemoveStream(remote_stream);
EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0);
webrtc::DataChannelInit config;
@@ -735,8 +779,7 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) {
TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) {
rtc::scoped_refptr<webrtc::MediaStreamInterface> stream(
AddRemoteMockMediaStream("remote_stream", "video", "audio"));
- pc_handler_->observer()->OnAddStream(stream);
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(stream);
const blink::WebMediaStream& remote_stream = mock_client_->remote_stream();
blink::WebVector<blink::WebMediaStreamTrack> tracks;
@@ -897,17 +940,11 @@ TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) {
TEST_F(RTCPeerConnectionHandlerTest, GetReceivers) {
std::vector<blink::WebMediaStream> remote_streams;
- pc_handler_->observer()->OnAddStream(
- AddRemoteMockMediaStream("stream0", "video0", "audio0"));
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(AddRemoteMockMediaStream("stream0", "video0", "audio0"));
remote_streams.push_back(mock_client_->remote_stream());
- pc_handler_->observer()->OnAddStream(
- AddRemoteMockMediaStream("stream1", "video1", "audio1"));
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(AddRemoteMockMediaStream("stream1", "video1", "audio1"));
remote_streams.push_back(mock_client_->remote_stream());
- pc_handler_->observer()->OnAddStream(
- AddRemoteMockMediaStream("stream2", "video2", "audio2"));
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(AddRemoteMockMediaStream("stream2", "video2", "audio2"));
remote_streams.push_back(mock_client_->remote_stream());
std::set<std::string> expected_remote_track_ids;
@@ -1169,10 +1206,8 @@ TEST_F(RTCPeerConnectionHandlerTest, OnAddAndOnRemoveStream) {
&blink::WebMediaStream::Id,
blink::WebString::FromASCII(remote_stream_label))));
- pc_handler_->observer()->OnAddStream(remote_stream);
- RunMessageLoopsUntilIdle();
- pc_handler_->observer()->OnRemoveStream(remote_stream);
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(remote_stream);
+ InvokeOnRemoveStream(remote_stream);
}
// This test that WebKit is notified about remote track state changes.
@@ -1186,8 +1221,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) {
DidAddRemoteStream(testing::Property(
&blink::WebMediaStream::Id,
blink::WebString::FromASCII(remote_stream_label))));
- pc_handler_->observer()->OnAddStream(remote_stream);
- RunMessageLoopsUntilIdle();
+ InvokeOnAddStream(remote_stream);
const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream();
blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
@@ -1200,15 +1234,17 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) {
EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive,
video_tracks[0].Source().GetReadyState());
- static_cast<MockWebRtcAudioTrack*>(remote_stream->GetAudioTracks()[0].get())
- ->SetEnded();
- RunMessageLoopsUntilIdle();
+ InvokeOnSignalingThread(
+ base::Bind(&MockWebRtcAudioTrack::SetEnded,
+ base::Unretained(static_cast<MockWebRtcAudioTrack*>(
+ remote_stream->GetAudioTracks()[0].get()))));
EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded,
audio_tracks[0].Source().GetReadyState());
- static_cast<MockWebRtcVideoTrack*>(remote_stream->GetVideoTracks()[0].get())
- ->SetEnded();
- RunMessageLoopsUntilIdle();
+ InvokeOnSignalingThread(
+ base::Bind(&MockWebRtcVideoTrack::SetEnded,
+ base::Unretained(static_cast<MockWebRtcVideoTrack*>(
+ remote_stream->GetVideoTracks()[0].get()))));
EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded,
video_tracks[0].Source().GetReadyState());
}
@@ -1228,7 +1264,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
- pc_handler_->observer()->OnAddStream(remote_stream);
+ InvokeOnAddStream(remote_stream);
run_loop.Run();
{
@@ -1242,8 +1278,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
// Remove the Webrtc audio track from the Webrtc MediaStream.
scoped_refptr<webrtc::AudioTrackInterface> webrtc_track =
remote_stream->GetAudioTracks()[0].get();
- remote_stream->RemoveTrack(webrtc_track.get());
- RunMessageLoopsUntilIdle();
+ InvokeRemoveTrack(remote_stream, webrtc_track.get());
{
blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1;
@@ -1254,8 +1289,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
blink::WebHeap::CollectGarbageForTesting();
// Add the WebRtc audio track again.
- remote_stream->AddTrack(webrtc_track.get());
- RunMessageLoopsUntilIdle();
+ InvokeAddTrack(remote_stream, webrtc_track.get());
blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2;
webkit_stream.AudioTracks(modified_audio_tracks2);
EXPECT_EQ(1u, modified_audio_tracks2.size());
@@ -1276,7 +1310,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
- pc_handler_->observer()->OnAddStream(remote_stream);
+ InvokeOnAddStream(remote_stream);
run_loop.Run();
{
@@ -1290,7 +1324,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
// Remove the Webrtc video track from the Webrtc MediaStream.
scoped_refptr<webrtc::VideoTrackInterface> webrtc_track =
remote_stream->GetVideoTracks()[0].get();
- remote_stream->RemoveTrack(webrtc_track.get());
+ InvokeRemoveTrack(remote_stream, webrtc_track.get());
RunMessageLoopsUntilIdle();
{
blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1;
@@ -1301,7 +1335,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
blink::WebHeap::CollectGarbageForTesting();
// Add the WebRtc video track again.
- remote_stream->AddTrack(webrtc_track.get());
+ InvokeAddTrack(remote_stream, webrtc_track.get());
RunMessageLoopsUntilIdle();
blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2;
webkit_stream.VideoTracks(modified_video_tracks2);
@@ -1323,7 +1357,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) {
rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
- pc_handler_->observer()->OnAddStream(remote_stream);
+ InvokeOnAddStream(remote_stream);
run_loop.Run();
{
@@ -1339,9 +1373,9 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) {
// Remove the Webrtc tracks from the MediaStream.
auto audio_track = remote_stream->GetAudioTracks()[0];
- EXPECT_TRUE(remote_stream->RemoveTrack(audio_track.get()));
+ InvokeRemoveTrack(remote_stream, audio_track.get());
auto video_track = remote_stream->GetVideoTracks()[0];
- EXPECT_TRUE(remote_stream->RemoveTrack(video_track.get()));
+ InvokeRemoveTrack(remote_stream, video_track.get());
RunMessageLoopsUntilIdle();
{
@@ -1356,10 +1390,8 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) {
blink::WebHeap::CollectGarbageForTesting();
// Add the tracks again.
- remote_stream->AddTrack(audio_track.get());
- RunMessageLoopsUntilIdle();
- remote_stream->AddTrack(video_track.get());
- RunMessageLoopsUntilIdle();
+ InvokeAddTrack(remote_stream, audio_track.get());
+ InvokeAddTrack(remote_stream, video_track.get());
blink::WebHeap::CollectGarbageForTesting();
« no previous file with comments | « no previous file | content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698