Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(585)

Side by Side Diff: content/renderer/media/audio_message_filter.cc

Issue 324143002: Decouple IPC::MessageFilter from IPC::Channel (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Landing Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/audio_message_filter.h" 5 #include "content/renderer/media/audio_message_filter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "content/common/media/audio_messages.h" 10 #include "content/common/media/audio_messages.h"
(...skipping 28 matching lines...) Expand all
39 const scoped_refptr<AudioMessageFilter> filter_; 39 const scoped_refptr<AudioMessageFilter> filter_;
40 const int render_view_id_; 40 const int render_view_id_;
41 const int render_frame_id_; 41 const int render_frame_id_;
42 int stream_id_; 42 int stream_id_;
43 }; 43 };
44 44
45 AudioMessageFilter* AudioMessageFilter::g_filter = NULL; 45 AudioMessageFilter* AudioMessageFilter::g_filter = NULL;
46 46
47 AudioMessageFilter::AudioMessageFilter( 47 AudioMessageFilter::AudioMessageFilter(
48 const scoped_refptr<base::MessageLoopProxy>& io_message_loop) 48 const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
49 : channel_(NULL), 49 : sender_(NULL),
50 audio_hardware_config_(NULL), 50 audio_hardware_config_(NULL),
51 io_message_loop_(io_message_loop) { 51 io_message_loop_(io_message_loop) {
52 DCHECK(!g_filter); 52 DCHECK(!g_filter);
53 g_filter = this; 53 g_filter = this;
54 } 54 }
55 55
56 AudioMessageFilter::~AudioMessageFilter() { 56 AudioMessageFilter::~AudioMessageFilter() {
57 DCHECK_EQ(g_filter, this); 57 DCHECK_EQ(g_filter, this);
58 g_filter = NULL; 58 g_filter = NULL;
59 } 59 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 stream_id_ = kStreamIDNotSet; 111 stream_id_ = kStreamIDNotSet;
112 } 112 }
113 113
114 void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) { 114 void AudioMessageFilter::AudioOutputIPCImpl::SetVolume(double volume) {
115 DCHECK_NE(stream_id_, kStreamIDNotSet); 115 DCHECK_NE(stream_id_, kStreamIDNotSet);
116 filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume)); 116 filter_->Send(new AudioHostMsg_SetVolume(stream_id_, volume));
117 } 117 }
118 118
119 void AudioMessageFilter::Send(IPC::Message* message) { 119 void AudioMessageFilter::Send(IPC::Message* message) {
120 DCHECK(io_message_loop_->BelongsToCurrentThread()); 120 DCHECK(io_message_loop_->BelongsToCurrentThread());
121 if (!channel_) { 121 if (!sender_) {
122 delete message; 122 delete message;
123 } else { 123 } else {
124 channel_->Send(message); 124 sender_->Send(message);
125 } 125 }
126 } 126 }
127 127
128 bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) { 128 bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) {
129 DCHECK(io_message_loop_->BelongsToCurrentThread()); 129 DCHECK(io_message_loop_->BelongsToCurrentThread());
130 bool handled = true; 130 bool handled = true;
131 IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message) 131 IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message)
132 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated) 132 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated, OnStreamCreated)
133 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged) 133 IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged, OnStreamStateChanged)
134 IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceChanged, OnOutputDeviceChanged) 134 IPC_MESSAGE_HANDLER(AudioMsg_NotifyDeviceChanged, OnOutputDeviceChanged)
135 IPC_MESSAGE_UNHANDLED(handled = false) 135 IPC_MESSAGE_UNHANDLED(handled = false)
136 IPC_END_MESSAGE_MAP() 136 IPC_END_MESSAGE_MAP()
137 return handled; 137 return handled;
138 } 138 }
139 139
140 void AudioMessageFilter::OnFilterAdded(IPC::Channel* channel) { 140 void AudioMessageFilter::OnFilterAdded(IPC::Sender* sender) {
141 DCHECK(io_message_loop_->BelongsToCurrentThread()); 141 DCHECK(io_message_loop_->BelongsToCurrentThread());
142 channel_ = channel; 142 sender_ = sender;
143 } 143 }
144 144
145 void AudioMessageFilter::OnFilterRemoved() { 145 void AudioMessageFilter::OnFilterRemoved() {
146 DCHECK(io_message_loop_->BelongsToCurrentThread()); 146 DCHECK(io_message_loop_->BelongsToCurrentThread());
147 147
148 // Once removed, a filter will not be used again. At this time all 148 // Once removed, a filter will not be used again. At this time all
149 // delegates must be notified so they release their reference. 149 // delegates must be notified so they release their reference.
150 OnChannelClosing(); 150 OnChannelClosing();
151 } 151 }
152 152
153 void AudioMessageFilter::OnChannelClosing() { 153 void AudioMessageFilter::OnChannelClosing() {
154 DCHECK(io_message_loop_->BelongsToCurrentThread()); 154 DCHECK(io_message_loop_->BelongsToCurrentThread());
155 channel_ = NULL; 155 sender_ = NULL;
156 156
157 DLOG_IF(WARNING, !delegates_.IsEmpty()) 157 DLOG_IF(WARNING, !delegates_.IsEmpty())
158 << "Not all audio devices have been closed."; 158 << "Not all audio devices have been closed.";
159 159
160 IDMap<media::AudioOutputIPCDelegate>::iterator it(&delegates_); 160 IDMap<media::AudioOutputIPCDelegate>::iterator it(&delegates_);
161 while (!it.IsAtEnd()) { 161 while (!it.IsAtEnd()) {
162 it.GetCurrentValue()->OnIPCClosed(); 162 it.GetCurrentValue()->OnIPCClosed();
163 delegates_.Remove(it.GetCurrentKey()); 163 delegates_.Remove(it.GetCurrentKey());
164 it.Advance(); 164 it.Advance();
165 } 165 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 audio_hardware_config_->UpdateOutputConfig(output_params); 242 audio_hardware_config_->UpdateOutputConfig(output_params);
243 } 243 }
244 244
245 void AudioMessageFilter::SetAudioHardwareConfig( 245 void AudioMessageFilter::SetAudioHardwareConfig(
246 media::AudioHardwareConfig* config) { 246 media::AudioHardwareConfig* config) {
247 base::AutoLock auto_lock(lock_); 247 base::AutoLock auto_lock(lock_);
248 audio_hardware_config_ = config; 248 audio_hardware_config_ = config;
249 } 249 }
250 250
251 } // namespace content 251 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/audio_message_filter.h ('k') | content/renderer/media/midi_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698