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

Side by Side Diff: chrome/renderer/audio_message_filter.cc

Issue 6703003: Move a bunch of html5 renderer code to content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 9 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
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/renderer/audio_message_filter.h"
6
7 #include "base/message_loop.h"
8 #include "base/time.h"
9 #include "chrome/common/render_messages.h"
10 #include "chrome/common/render_messages_params.h"
11 #include "ipc/ipc_logging.h"
12
13 AudioMessageFilter::AudioMessageFilter(int32 route_id)
14 : channel_(NULL),
15 route_id_(route_id),
16 message_loop_(NULL) {
17 }
18
19 AudioMessageFilter::~AudioMessageFilter() {
20 }
21
22 // Called on the IPC thread.
23 bool AudioMessageFilter::Send(IPC::Message* message) {
24 if (!channel_) {
25 delete message;
26 return false;
27 }
28
29 if (MessageLoop::current() != message_loop_) {
30 // Can only access the IPC::Channel on the IPC thread since it's not thread
31 // safe.
32 message_loop_->PostTask(
33 FROM_HERE, NewRunnableMethod(this, &AudioMessageFilter::Send, message));
34 return true;
35 }
36
37 message->set_routing_id(route_id_);
38 return channel_->Send(message);
39 }
40
41 bool AudioMessageFilter::OnMessageReceived(const IPC::Message& message) {
42 if (message.routing_id() != route_id_)
43 return false;
44
45 bool handled = true;
46 IPC_BEGIN_MESSAGE_MAP(AudioMessageFilter, message)
47 IPC_MESSAGE_HANDLER(ViewMsg_RequestAudioPacket, OnRequestPacket)
48 IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamCreated, OnStreamCreated)
49 IPC_MESSAGE_HANDLER(ViewMsg_NotifyLowLatencyAudioStreamCreated,
50 OnLowLatencyStreamCreated)
51 IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamStateChanged,
52 OnStreamStateChanged)
53 IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamVolume, OnStreamVolume)
54 IPC_MESSAGE_UNHANDLED(handled = false)
55 IPC_END_MESSAGE_MAP()
56 return handled;
57 }
58
59 void AudioMessageFilter::OnFilterAdded(IPC::Channel* channel) {
60 // Captures the message loop for IPC.
61 message_loop_ = MessageLoop::current();
62 channel_ = channel;
63 }
64
65 void AudioMessageFilter::OnFilterRemoved() {
66 channel_ = NULL;
67 }
68
69 void AudioMessageFilter::OnChannelClosing() {
70 channel_ = NULL;
71 }
72
73 void AudioMessageFilter::OnRequestPacket(const IPC::Message& msg,
74 int stream_id,
75 AudioBuffersState buffers_state) {
76 Delegate* delegate = delegates_.Lookup(stream_id);
77 if (!delegate) {
78 DLOG(WARNING) << "Got audio packet request for a non-existent or removed"
79 " audio renderer.";
80 return;
81 }
82
83 delegate->OnRequestPacket(buffers_state);
84 }
85
86 void AudioMessageFilter::OnStreamCreated(int stream_id,
87 base::SharedMemoryHandle handle,
88 uint32 length) {
89 Delegate* delegate = delegates_.Lookup(stream_id);
90 if (!delegate) {
91 DLOG(WARNING) << "Got audio stream event for a non-existent or removed"
92 " audio renderer.";
93 return;
94 }
95 delegate->OnCreated(handle, length);
96 }
97
98 void AudioMessageFilter::OnLowLatencyStreamCreated(
99 int stream_id,
100 base::SharedMemoryHandle handle,
101 #if defined(OS_WIN)
102 base::SyncSocket::Handle socket_handle,
103 #else
104 base::FileDescriptor socket_descriptor,
105 #endif
106 uint32 length) {
107 Delegate* delegate = delegates_.Lookup(stream_id);
108 if (!delegate) {
109 DLOG(WARNING) << "Got audio stream event for a non-existent or removed"
110 " audio renderer.";
111 return;
112 }
113 #if !defined(OS_WIN)
114 base::SyncSocket::Handle socket_handle = socket_descriptor.fd;
115 #endif
116 delegate->OnLowLatencyCreated(handle, socket_handle, length);
117 }
118
119 void AudioMessageFilter::OnStreamStateChanged(
120 int stream_id,
121 const ViewMsg_AudioStreamState_Params& state) {
122 Delegate* delegate = delegates_.Lookup(stream_id);
123 if (!delegate) {
124 DLOG(WARNING) << "Got audio stream event for a non-existent or removed"
125 " audio renderer.";
126 return;
127 }
128 delegate->OnStateChanged(state);
129 }
130
131 void AudioMessageFilter::OnStreamVolume(int stream_id, double volume) {
132 Delegate* delegate = delegates_.Lookup(stream_id);
133 if (!delegate) {
134 DLOG(WARNING) << "Got audio stream event for a non-existent or removed"
135 " audio renderer.";
136 return;
137 }
138 delegate->OnVolume(volume);
139 }
140
141 int32 AudioMessageFilter::AddDelegate(Delegate* delegate) {
142 return delegates_.Add(delegate);
143 }
144
145 void AudioMessageFilter::RemoveDelegate(int32 id) {
146 delegates_.Remove(id);
147 }
OLDNEW
« no previous file with comments | « chrome/renderer/audio_message_filter.h ('k') | chrome/renderer/audio_message_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698