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..873b0af3aaf2aab316b41c27e058a5098e95b84f 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,10 @@ 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), |
+ source_set_(false), |
+ track_(track), |
+ state_(track->state()) { |
track->RegisterObserver(this); |
} |
@@ -156,11 +159,18 @@ void MediaStreamRemoteVideoSource::Observer::SetSource( |
const base::WeakPtr<MediaStreamRemoteVideoSource>& source) { |
DCHECK(main_thread_->BelongsToCurrentThread()); |
DCHECK(!source_); |
+ DLOG(ERROR) << "SetSource"; |
tommi (sloooow) - chröme
2014/11/03 13:49:56
remove? (and the rest of the debug logging)
perkj_chrome
2014/11/03 14:53:33
sorry....
|
source_ = source; |
+ // |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; |
} |
void MediaStreamRemoteVideoSource::Observer::OnChanged() { |
webrtc::MediaStreamTrackInterface::TrackState state = track_->state(); |
+ DLOG(ERROR) << ":Observer::OnChanged" << state; |
main_thread_->PostTask(FROM_HERE, |
base::Bind(&MediaStreamRemoteVideoSource::Observer::OnChangedImpl, |
this, state)); |
@@ -169,7 +179,7 @@ void MediaStreamRemoteVideoSource::Observer::OnChanged() { |
void MediaStreamRemoteVideoSource::Observer::OnChangedImpl( |
webrtc::MediaStreamTrackInterface::TrackState state) { |
DCHECK(main_thread_->BelongsToCurrentThread()); |
- DCHECK(source_) << "Dropping a state change event. " << state; |
+ DCHECK(source_ || !source_set_) << "Dropping a state change event. " << state; |
if (source_ && state != state_) |
source_->OnChanged(state); |
state_ = state; |
@@ -179,9 +189,11 @@ MediaStreamRemoteVideoSource::MediaStreamRemoteVideoSource( |
const scoped_refptr<MediaStreamRemoteVideoSource::Observer>& observer) |
: observer_(observer), weak_factory_(this) { |
observer->SetSource(weak_factory_.GetWeakPtr()); |
+ DLOG(ERROR) << "MediaStreamRemoteVideoSource"; |
} |
MediaStreamRemoteVideoSource::~MediaStreamRemoteVideoSource() { |
+ DLOG(ERROR) << "~MediaStreamRemoteVideoSource"; |
DCHECK(CalledOnValidThread()); |
} |
@@ -221,6 +233,7 @@ MediaStreamRemoteVideoSource::RenderInterfaceForTest() { |
void MediaStreamRemoteVideoSource::OnChanged( |
webrtc::MediaStreamTrackInterface::TrackState state) { |
DCHECK(CalledOnValidThread()); |
+ DLOG(ERROR) << "OnChanged" << state; |
switch (state) { |
case webrtc::MediaStreamTrackInterface::kInitializing: |
// Ignore the kInitializing state since there is no match in |