| 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(
|
| + &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.
|
| + 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_);
|
|
|