Chromium Code Reviews| Index: content/renderer/media/webrtc/media_stream_remote_audio_track.cc |
| diff --git a/content/renderer/media/webrtc/media_stream_remote_audio_track.cc b/content/renderer/media/webrtc/media_stream_remote_audio_track.cc |
| index 17df845f81c491b3c9a0631d3a20835f1b05aa1a..84b89fe2dedda731f2dd7f6804e15908904a1517 100644 |
| --- a/content/renderer/media/webrtc/media_stream_remote_audio_track.cc |
| +++ b/content/renderer/media/webrtc/media_stream_remote_audio_track.cc |
| @@ -8,6 +8,8 @@ |
| #include <list> |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| #include "base/logging.h" |
| #include "content/public/renderer/media_stream_audio_sink.h" |
| #include "third_party/webrtc/api/mediastreaminterface.h" |
| @@ -115,12 +117,24 @@ class MediaStreamRemoteAudioSource::AudioSink |
| MediaStreamRemoteAudioTrack::MediaStreamRemoteAudioTrack( |
| const blink::WebMediaStreamSource& source, bool enabled) |
| : MediaStreamAudioTrack(false), source_(source), enabled_(enabled) { |
| - DCHECK(source.extraData()); // Make sure the source has a native source. |
| + DCHECK(source.extraData()); |
| + |
| + // Stop means that a track should be stopped permanently. But |
| + // since there is no proper way of doing that on a remote track, we can |
| + // at least disable the track. Blink will not call down to the content layer |
| + // after a track has been stopped. |
| + MediaStreamAudioTrack::AddStopObserver(base::Bind( |
|
o1ka
2016/02/29 14:28:04
See comments for WebRtcLocalAudioTrack
miu
2016/03/01 09:43:54
Done.
|
| + &MediaStreamRemoteAudioTrack::SetEnabled, base::Unretained(this), false)); |
| } |
| MediaStreamRemoteAudioTrack::~MediaStreamRemoteAudioTrack() { |
| DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| source()->RemoveAll(this); |
| + |
| + // Even though the base class calls Stop(), do it here because the stop |
| + // callback added in this class's constructor needs to be run before the data |
| + // members of this class are destroyed. |
|
o1ka
2016/02/29 14:28:04
See comments for WebRtcLocalAudioTrack
miu
2016/03/01 09:43:54
Done.
|
| + Stop(); |
| } |
| void MediaStreamRemoteAudioTrack::SetEnabled(bool enabled) { |
| @@ -139,15 +153,6 @@ void MediaStreamRemoteAudioTrack::SetEnabled(bool enabled) { |
| source()->SetSinksEnabled(this, enabled); |
| } |
| -void MediaStreamRemoteAudioTrack::Stop() { |
| - DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| - // Stop means that a track should be stopped permanently. But |
| - // since there is no proper way of doing that on a remote track, we can |
| - // at least disable the track. Blink will not call down to the content layer |
| - // after a track has been stopped. |
| - SetEnabled(false); |
| -} |
| - |
| void MediaStreamRemoteAudioTrack::AddSink(MediaStreamAudioSink* sink) { |
| DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| return source()->AddSink(sink, this, enabled_); |