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

Side by Side Diff: content/renderer/media/audio_input_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_input_message_filter.h" 5 #include "content/renderer/media/audio_input_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"
11 #include "content/renderer/media/webrtc_logging.h" 11 #include "content/renderer/media/webrtc_logging.h"
12 #include "ipc/ipc_channel.h"
13 #include "ipc/ipc_logging.h" 12 #include "ipc/ipc_logging.h"
13 #include "ipc/ipc_sender.h"
14 14
15 namespace content { 15 namespace content {
16 16
17 namespace { 17 namespace {
18 const int kStreamIDNotSet = -1; 18 const int kStreamIDNotSet = -1;
19 } 19 }
20 20
21 class AudioInputMessageFilter::AudioInputIPCImpl 21 class AudioInputMessageFilter::AudioInputIPCImpl
22 : public NON_EXPORTED_BASE(media::AudioInputIPC) { 22 : public NON_EXPORTED_BASE(media::AudioInputIPC) {
23 public: 23 public:
(...skipping 14 matching lines...) Expand all
38 private: 38 private:
39 const scoped_refptr<AudioInputMessageFilter> filter_; 39 const scoped_refptr<AudioInputMessageFilter> filter_;
40 const int render_view_id_; 40 const int render_view_id_;
41 int stream_id_; 41 int stream_id_;
42 }; 42 };
43 43
44 AudioInputMessageFilter* AudioInputMessageFilter::g_filter = NULL; 44 AudioInputMessageFilter* AudioInputMessageFilter::g_filter = NULL;
45 45
46 AudioInputMessageFilter::AudioInputMessageFilter( 46 AudioInputMessageFilter::AudioInputMessageFilter(
47 const scoped_refptr<base::MessageLoopProxy>& io_message_loop) 47 const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
48 : channel_(NULL), 48 : sender_(NULL),
49 io_message_loop_(io_message_loop) { 49 io_message_loop_(io_message_loop) {
50 DCHECK(!g_filter); 50 DCHECK(!g_filter);
51 g_filter = this; 51 g_filter = this;
52 } 52 }
53 53
54 AudioInputMessageFilter::~AudioInputMessageFilter() { 54 AudioInputMessageFilter::~AudioInputMessageFilter() {
55 DCHECK_EQ(g_filter, this); 55 DCHECK_EQ(g_filter, this);
56 g_filter = NULL; 56 g_filter = NULL;
57 } 57 }
58 58
59 // static 59 // static
60 AudioInputMessageFilter* AudioInputMessageFilter::Get() { 60 AudioInputMessageFilter* AudioInputMessageFilter::Get() {
61 return g_filter; 61 return g_filter;
62 } 62 }
63 63
64 void AudioInputMessageFilter::Send(IPC::Message* message) { 64 void AudioInputMessageFilter::Send(IPC::Message* message) {
65 DCHECK(io_message_loop_->BelongsToCurrentThread()); 65 DCHECK(io_message_loop_->BelongsToCurrentThread());
66 if (!channel_) { 66 if (!sender_) {
67 delete message; 67 delete message;
68 } else { 68 } else {
69 channel_->Send(message); 69 sender_->Send(message);
70 } 70 }
71 } 71 }
72 72
73 bool AudioInputMessageFilter::OnMessageReceived(const IPC::Message& message) { 73 bool AudioInputMessageFilter::OnMessageReceived(const IPC::Message& message) {
74 DCHECK(io_message_loop_->BelongsToCurrentThread()); 74 DCHECK(io_message_loop_->BelongsToCurrentThread());
75 bool handled = true; 75 bool handled = true;
76 IPC_BEGIN_MESSAGE_MAP(AudioInputMessageFilter, message) 76 IPC_BEGIN_MESSAGE_MAP(AudioInputMessageFilter, message)
77 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamCreated, 77 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamCreated,
78 OnStreamCreated) 78 OnStreamCreated)
79 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamVolume, OnStreamVolume) 79 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamVolume, OnStreamVolume)
80 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamStateChanged, 80 IPC_MESSAGE_HANDLER(AudioInputMsg_NotifyStreamStateChanged,
81 OnStreamStateChanged) 81 OnStreamStateChanged)
82 IPC_MESSAGE_UNHANDLED(handled = false) 82 IPC_MESSAGE_UNHANDLED(handled = false)
83 IPC_END_MESSAGE_MAP() 83 IPC_END_MESSAGE_MAP()
84 return handled; 84 return handled;
85 } 85 }
86 86
87 void AudioInputMessageFilter::OnFilterAdded(IPC::Channel* channel) { 87 void AudioInputMessageFilter::OnFilterAdded(IPC::Sender* sender) {
88 DCHECK(io_message_loop_->BelongsToCurrentThread()); 88 DCHECK(io_message_loop_->BelongsToCurrentThread());
89 89
90 // Captures the channel for IPC. 90 // Captures the sender for IPC.
91 channel_ = channel; 91 sender_ = sender;
92 } 92 }
93 93
94 void AudioInputMessageFilter::OnFilterRemoved() { 94 void AudioInputMessageFilter::OnFilterRemoved() {
95 DCHECK(io_message_loop_->BelongsToCurrentThread()); 95 DCHECK(io_message_loop_->BelongsToCurrentThread());
96 96
97 // Once removed, a filter will not be used again. At this time all 97 // Once removed, a filter will not be used again. At this time all
98 // delegates must be notified so they release their reference. 98 // delegates must be notified so they release their reference.
99 OnChannelClosing(); 99 OnChannelClosing();
100 } 100 }
101 101
102 void AudioInputMessageFilter::OnChannelClosing() { 102 void AudioInputMessageFilter::OnChannelClosing() {
103 DCHECK(io_message_loop_->BelongsToCurrentThread()); 103 DCHECK(io_message_loop_->BelongsToCurrentThread());
104 channel_ = NULL; 104 sender_ = NULL;
105 105
106 DLOG_IF(WARNING, !delegates_.IsEmpty()) 106 DLOG_IF(WARNING, !delegates_.IsEmpty())
107 << "Not all audio devices have been closed."; 107 << "Not all audio devices have been closed.";
108 108
109 IDMap<media::AudioInputIPCDelegate>::iterator it(&delegates_); 109 IDMap<media::AudioInputIPCDelegate>::iterator it(&delegates_);
110 while (!it.IsAtEnd()) { 110 while (!it.IsAtEnd()) {
111 it.GetCurrentValue()->OnIPCClosed(); 111 it.GetCurrentValue()->OnIPCClosed();
112 delegates_.Remove(it.GetCurrentKey()); 112 delegates_.Remove(it.GetCurrentKey());
113 it.Advance(); 113 it.Advance();
114 } 114 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 214
215 void AudioInputMessageFilter::AudioInputIPCImpl::CloseStream() { 215 void AudioInputMessageFilter::AudioInputIPCImpl::CloseStream() {
216 DCHECK(filter_->io_message_loop_->BelongsToCurrentThread()); 216 DCHECK(filter_->io_message_loop_->BelongsToCurrentThread());
217 DCHECK_NE(stream_id_, kStreamIDNotSet); 217 DCHECK_NE(stream_id_, kStreamIDNotSet);
218 filter_->Send(new AudioInputHostMsg_CloseStream(stream_id_)); 218 filter_->Send(new AudioInputHostMsg_CloseStream(stream_id_));
219 filter_->delegates_.Remove(stream_id_); 219 filter_->delegates_.Remove(stream_id_);
220 stream_id_ = kStreamIDNotSet; 220 stream_id_ = kStreamIDNotSet;
221 } 221 }
222 222
223 } // namespace content 223 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/audio_input_message_filter.h ('k') | content/renderer/media/audio_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698