Index: content/renderer/media/audio_message_filter.cc |
diff --git a/content/renderer/media/audio_message_filter.cc b/content/renderer/media/audio_message_filter.cc |
index 9f72324c48e810a56d681e812c7e225c9bde13b3..c685dcf0e8c4240e3805bf5f0d691a64212cba54 100644 |
--- a/content/renderer/media/audio_message_filter.cc |
+++ b/content/renderer/media/audio_message_filter.cc |
@@ -12,52 +12,61 @@ |
#include "content/renderer/render_thread_impl.h" |
#include "ipc/ipc_logging.h" |
-AudioMessageFilter* AudioMessageFilter::filter_ = NULL; |
- |
-// static |
-AudioMessageFilter* AudioMessageFilter::Get() { |
- return filter_; |
-} |
- |
AudioMessageFilter::AudioMessageFilter() |
: channel_(NULL) { |
DVLOG(1) << "AudioMessageFilter::AudioMessageFilter()"; |
- DCHECK(!filter_); |
- filter_ = this; |
} |
-int AudioMessageFilter::AddDelegate(media::AudioOutputIPCDelegate* delegate) { |
- return delegates_.Add(delegate); |
-} |
- |
-void AudioMessageFilter::RemoveDelegate(int id) { |
- delegates_.Remove(id); |
-} |
+class AudioMessageFilter::AudioOutputIPCImpl |
+ : public NON_EXPORTED_BASE(media::AudioOutputIPC) { |
+ public: |
+ AudioOutputIPCImpl(int render_view_id, AudioMessageFilter* filter) |
+ : render_view_id_(render_view_id), filter_(filter) {} |
+ virtual ~AudioOutputIPCImpl() {} |
-void AudioMessageFilter::CreateStream(int stream_id, |
- const media::AudioParameters& params, |
- int input_channels) { |
- Send(new AudioHostMsg_CreateStream(stream_id, params, input_channels)); |
-} |
- |
-void AudioMessageFilter::PlayStream(int stream_id) { |
- Send(new AudioHostMsg_PlayStream(stream_id)); |
-} |
+ // media::AudioOutputIPC implementation. |
+ virtual int AddDelegate(media::AudioOutputIPCDelegate* delegate) OVERRIDE { |
+ return filter_->delegates_.Add(delegate); |
+ } |
+ virtual void RemoveDelegate(int id) OVERRIDE { |
+ filter_->delegates_.Remove(id); |
+ } |
+ virtual void CreateStream(int stream_id, |
+ const media::AudioParameters& params, |
+ int input_channels) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_CreateStream( |
+ render_view_id_, stream_id, params, input_channels)); |
+ } |
+ virtual void PlayStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_PlayStream(stream_id)); |
+ } |
+ virtual void PauseStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_PauseStream(stream_id)); |
+ } |
+ virtual void FlushStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_FlushStream(stream_id)); |
+ } |
+ virtual void CloseStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_CloseStream(stream_id)); |
+ } |
+ virtual void SetVolume(int stream_id, double volume) OVERRIDE { |
+ filter_->Send(new AudioHostMsg_SetVolume(stream_id, volume)); |
+ } |
-void AudioMessageFilter::PauseStream(int stream_id) { |
- Send(new AudioHostMsg_PauseStream(stream_id)); |
-} |
+ private: |
+ const int render_view_id_; |
-void AudioMessageFilter::FlushStream(int stream_id) { |
- Send(new AudioHostMsg_FlushStream(stream_id)); |
-} |
+ // Holds a reference to the audio message filter (lives on the main render |
+ // thread) for the lifetime of this instance. |
+ scoped_refptr<AudioMessageFilter> filter_; |
-void AudioMessageFilter::CloseStream(int stream_id) { |
- Send(new AudioHostMsg_CloseStream(stream_id)); |
-} |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(AudioOutputIPCImpl); |
+}; |
-void AudioMessageFilter::SetVolume(int stream_id, double volume) { |
- Send(new AudioHostMsg_SetVolume(stream_id, volume)); |
+scoped_ptr<media::AudioOutputIPC> AudioMessageFilter::CreateAudioOutputIPC( |
+ int render_view_id) { |
+ return scoped_ptr<media::AudioOutputIPC>( |
+ new AudioOutputIPCImpl(render_view_id, this)); |
} |
bool AudioMessageFilter::Send(IPC::Message* message) { |
@@ -117,9 +126,6 @@ AudioMessageFilter::~AudioMessageFilter() { |
// Just in case the message filter is deleted before the channel |
// is closed and there are still living audio devices. |
OnChannelClosing(); |
- |
- DCHECK(filter_); |
- filter_ = NULL; |
} |
void AudioMessageFilter::OnStreamCreated( |