Index: content/renderer/media/webrtc/media_stream_remote_video_source.cc |
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.cc b/content/renderer/media/webrtc/media_stream_remote_video_source.cc |
index c9cb883af843142e012053f3fe11d1b5d2112eac..c74fb52a32eb94bc86d511c4b0bc70e332202bb9 100644 |
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.cc |
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.cc |
@@ -131,7 +131,12 @@ RemoteVideoSourceDelegate::DoRenderFrameOnIOThread( |
MediaStreamRemoteVideoSource::Observer::Observer( |
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, |
webrtc::VideoTrackInterface* track) |
- : main_thread_(main_thread), track_(track), state_(track->state()) { |
+ : main_thread_(main_thread), |
+#if DCHECK_IS_ON |
+ source_set_(false), |
+#endif |
+ track_(track), |
+ state_(track->state()) { |
track->RegisterObserver(this); |
} |
@@ -157,6 +162,13 @@ void MediaStreamRemoteVideoSource::Observer::SetSource( |
DCHECK(main_thread_->BelongsToCurrentThread()); |
DCHECK(!source_); |
source_ = source; |
+#if DCHECK_IS_ON |
+ // |source_set_| means that there is a MediaStreamRemoteVideoSource that |
+ // should handle all state changes. Since an Observer is always created when |
+ // a remote MediaStream changes in RemoteMediaStreamImpl::Observer::OnChanged, |
+ // it can happen that an Observer is created but SetSource is never called. |
+ source_set_ = true; |
+#endif |
} |
void MediaStreamRemoteVideoSource::Observer::OnChanged() { |
@@ -169,7 +181,9 @@ void MediaStreamRemoteVideoSource::Observer::OnChanged() { |
void MediaStreamRemoteVideoSource::Observer::OnChangedImpl( |
webrtc::MediaStreamTrackInterface::TrackState state) { |
DCHECK(main_thread_->BelongsToCurrentThread()); |
- DCHECK(source_) << "Dropping a state change event. " << state; |
+#if DCHECK_IS_ON |
+ DCHECK(source_ || !source_set_) << "Dropping a state change event. " << state; |
+#endif |
if (source_ && state != state_) |
source_->OnChanged(state); |
state_ = state; |