Index: content/renderer/media/audio_input_message_filter.cc |
diff --git a/content/renderer/media/audio_input_message_filter.cc b/content/renderer/media/audio_input_message_filter.cc |
index 850cd1a0fa57c49bf06deb2a41c32a654df4f773..d3a313b205913253cf07a98f6f3bf681f12a506a 100644 |
--- a/content/renderer/media/audio_input_message_filter.cc |
+++ b/content/renderer/media/audio_input_message_filter.cc |
@@ -11,13 +11,9 @@ |
#include "content/common/media/audio_messages.h" |
#include "ipc/ipc_logging.h" |
-AudioInputMessageFilter* AudioInputMessageFilter::filter_ = NULL; |
- |
AudioInputMessageFilter::AudioInputMessageFilter() |
: channel_(NULL) { |
DVLOG(1) << "AudioInputMessageFilter()"; |
- DCHECK(!filter_); |
- filter_ = this; |
} |
AudioInputMessageFilter::~AudioInputMessageFilter() { |
@@ -26,14 +22,6 @@ AudioInputMessageFilter::~AudioInputMessageFilter() { |
// Just in case the message filter is deleted before the channel |
// is closed and there are still living audio devices. |
OnChannelClosing(); |
- |
- DCHECK_EQ(filter_, this); |
- filter_ = NULL; |
-} |
- |
-// static. |
-AudioInputMessageFilter* AudioInputMessageFilter::Get() { |
- return filter_; |
} |
bool AudioInputMessageFilter::Send(IPC::Message* message) { |
@@ -148,35 +136,51 @@ void AudioInputMessageFilter::OnDeviceStarted(int stream_id, |
delegate->OnDeviceReady(device_id); |
} |
-int AudioInputMessageFilter::AddDelegate( |
- media::AudioInputIPCDelegate* delegate) { |
- return delegates_.Add(delegate); |
-} |
+class AudioInputMessageFilter::AudioInputIPCImpl |
+ : public NON_EXPORTED_BASE(media::AudioInputIPC) { |
+ public: |
+ AudioInputIPCImpl(int render_view_id, AudioInputMessageFilter* filter) |
+ : render_view_id_(render_view_id), filter_(filter) {} |
+ virtual ~AudioInputIPCImpl() {} |
-void AudioInputMessageFilter::RemoveDelegate(int id) { |
- DVLOG(1) << "AudioInputMessageFilter::RemoveDelegate(id=" << id << ")"; |
- delegates_.Remove(id); |
-} |
- |
-void AudioInputMessageFilter::CreateStream(int stream_id, |
- const media::AudioParameters& params, const std::string& device_id, |
- bool automatic_gain_control) { |
- Send(new AudioInputHostMsg_CreateStream( |
- stream_id, params, device_id, automatic_gain_control)); |
-} |
+ // media::AudioInputIPC implementation |
+ virtual int AddDelegate(media::AudioInputIPCDelegate* 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, |
+ const std::string& device_id, |
+ bool automatic_gain_control) OVERRIDE { |
+ filter_->Send(new AudioInputHostMsg_CreateStream( |
+ render_view_id_, stream_id, params, device_id, |
+ automatic_gain_control)); |
+ } |
+ virtual void StartDevice(int stream_id, int session_id) OVERRIDE { |
+ filter_->Send(new AudioInputHostMsg_StartDevice(stream_id, session_id)); |
+ } |
+ virtual void RecordStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioInputHostMsg_RecordStream(stream_id)); |
+ } |
+ virtual void CloseStream(int stream_id) OVERRIDE { |
+ filter_->Send(new AudioInputHostMsg_CloseStream(stream_id)); |
+ } |
+ virtual void SetVolume(int stream_id, double volume) OVERRIDE { |
+ filter_->Send(new AudioInputHostMsg_SetVolume(stream_id, volume)); |
+ } |
-void AudioInputMessageFilter::StartDevice(int stream_id, int session_id) { |
- Send(new AudioInputHostMsg_StartDevice(stream_id, session_id)); |
-} |
+ private: |
+ const int render_view_id_; |
-void AudioInputMessageFilter::RecordStream(int stream_id) { |
- Send(new AudioInputHostMsg_RecordStream(stream_id)); |
-} |
+ // Holds a reference to the audio input message filter (lives on the main |
+ // render thread) for the lifetime of this instance. |
+ scoped_refptr<AudioInputMessageFilter> filter_; |
-void AudioInputMessageFilter::CloseStream(int stream_id) { |
- Send(new AudioInputHostMsg_CloseStream(stream_id)); |
-} |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(AudioInputIPCImpl); |
+}; |
-void AudioInputMessageFilter::SetVolume(int stream_id, double volume) { |
- Send(new AudioInputHostMsg_SetVolume(stream_id, volume)); |
+media::AudioInputIPC* AudioInputMessageFilter::CreateAudioInputIPC( |
+ int render_view_id) { |
+ return new AudioInputIPCImpl(render_view_id, this); |
} |