OLD | NEW |
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/browser/renderer_host/media/media_stream_dispatcher_host.h" | 5 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" |
6 | 6 |
7 #include "content/common/media/media_stream_messages.h" | 7 #include "content/common/media/media_stream_messages.h" |
8 #include "content/common/media/media_stream_options.h" | 8 #include "content/common/media/media_stream_options.h" |
9 | 9 |
10 using content::BrowserMessageFilter; | 10 using content::BrowserMessageFilter; |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 MediaStreamDispatcherHost::MediaStreamDispatcherHost( | 26 MediaStreamDispatcherHost::MediaStreamDispatcherHost( |
27 content::ResourceContext* resource_context, | 27 content::ResourceContext* resource_context, |
28 int render_process_id, | 28 int render_process_id, |
29 media::AudioManager* audio_manager) | 29 media::AudioManager* audio_manager) |
30 : resource_context_(resource_context), | 30 : resource_context_(resource_context), |
31 render_process_id_(render_process_id), | 31 render_process_id_(render_process_id), |
32 audio_manager_(audio_manager) { | 32 audio_manager_(audio_manager) { |
33 } | 33 } |
34 | 34 |
35 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() { | |
36 } | |
37 | |
38 MediaStreamManager* MediaStreamDispatcherHost::manager() { | |
39 return MediaStreamManager::GetForResourceContext( | |
40 resource_context_, audio_manager_); | |
41 } | |
42 | |
43 bool MediaStreamDispatcherHost::OnMessageReceived( | |
44 const IPC::Message& message, bool* message_was_ok) { | |
45 bool handled = true; | |
46 IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamDispatcherHost, message, *message_was_ok) | |
47 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) | |
48 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream, | |
49 OnStopGeneratedStream) | |
50 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateDevices, | |
51 OnEnumerateDevices) | |
52 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenDevice, | |
53 OnOpenDevice) | |
54 IPC_MESSAGE_UNHANDLED(handled = false) | |
55 IPC_END_MESSAGE_MAP_EX() | |
56 return handled; | |
57 } | |
58 | |
59 void MediaStreamDispatcherHost::OnChannelClosing() { | |
60 BrowserMessageFilter::OnChannelClosing(); | |
61 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; | |
62 | |
63 // Since the IPC channel is gone, cancel pending requests and close all | |
64 // requested VideCaptureDevices. | |
65 manager()->CancelRequests(this); | |
66 for (StreamMap::iterator it = streams_.begin(); | |
67 it != streams_.end(); | |
68 it++) { | |
69 std::string label = it->first; | |
70 manager()->StopGeneratedStream(label); | |
71 } | |
72 } | |
73 | |
74 void MediaStreamDispatcherHost::OnGenerateStream( | |
75 int render_view_id, | |
76 int page_request_id, | |
77 const media_stream::StreamOptions& components, | |
78 const std::string& security_origin) { | |
79 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" | |
80 << render_view_id << ", " | |
81 << page_request_id << ", [ " | |
82 << (components.audio ? "audio " : "") | |
83 << ((components.video_option & | |
84 StreamOptions::kFacingUser) ? | |
85 "video_facing_user " : "") | |
86 << ((components.video_option & | |
87 StreamOptions::kFacingEnvironment) ? | |
88 "video_facing_environment " : "") | |
89 << "], " | |
90 << security_origin << ")"; | |
91 | |
92 std::string label; | |
93 manager()->GenerateStream(this, render_process_id_, render_view_id, | |
94 components, security_origin, &label); | |
95 DCHECK(!label.empty()); | |
96 streams_[label] = StreamRequest(render_view_id, page_request_id); | |
97 } | |
98 | |
99 void MediaStreamDispatcherHost::OnStopGeneratedStream( | |
100 int render_view_id, const std::string& label) { | |
101 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" | |
102 << ", {label = " << label << "})"; | |
103 | |
104 StreamMap::iterator it = streams_.find(label); | |
105 DCHECK(it != streams_.end()); | |
106 manager()->StopGeneratedStream(label); | |
107 streams_.erase(it); | |
108 } | |
109 | |
110 void MediaStreamDispatcherHost::OnEnumerateDevices( | |
111 int render_view_id, | |
112 int page_request_id, | |
113 media_stream::MediaStreamType type, | |
114 const std::string& security_origin) { | |
115 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" | |
116 << render_view_id << ", " | |
117 << page_request_id << ", " | |
118 << type << ", " | |
119 << security_origin << ")"; | |
120 | |
121 std::string label; | |
122 manager()->EnumerateDevices(this, render_process_id_, render_view_id, | |
123 type, security_origin, &label); | |
124 DCHECK(!label.empty()); | |
125 streams_[label] = StreamRequest(render_view_id, page_request_id); | |
126 } | |
127 | |
128 void MediaStreamDispatcherHost::OnOpenDevice( | |
129 int render_view_id, | |
130 int page_request_id, | |
131 const std::string& device_id, | |
132 media_stream::MediaStreamType type, | |
133 const std::string& security_origin) { | |
134 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" | |
135 << render_view_id << ", " | |
136 << page_request_id << ", device_id: " | |
137 << device_id.c_str() << ", type: " | |
138 << type << ", " | |
139 << security_origin << ")"; | |
140 | |
141 std::string label; | |
142 manager()->OpenDevice(this, render_process_id_, render_view_id, | |
143 device_id, type, security_origin, &label); | |
144 DCHECK(!label.empty()); | |
145 streams_[label] = StreamRequest(render_view_id, page_request_id); | |
146 } | |
147 | |
148 void MediaStreamDispatcherHost::StreamGenerated( | 35 void MediaStreamDispatcherHost::StreamGenerated( |
149 const std::string& label, | 36 const std::string& label, |
150 const StreamDeviceInfoArray& audio_devices, | 37 const StreamDeviceInfoArray& audio_devices, |
151 const StreamDeviceInfoArray& video_devices) { | 38 const StreamDeviceInfoArray& video_devices) { |
152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 39 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
153 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" | 40 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" |
154 << ", {label = " << label << "})"; | 41 << ", {label = " << label << "})"; |
155 | 42 |
156 StreamMap::iterator it = streams_.find(label); | 43 StreamMap::iterator it = streams_.find(label); |
157 DCHECK(it != streams_.end()); | 44 DCHECK(it != streams_.end()); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 | 146 |
260 StreamMap::iterator it = streams_.find(label); | 147 StreamMap::iterator it = streams_.find(label); |
261 DCHECK(it != streams_.end()); | 148 DCHECK(it != streams_.end()); |
262 StreamRequest request = it->second; | 149 StreamRequest request = it->second; |
263 streams_.erase(it); | 150 streams_.erase(it); |
264 | 151 |
265 Send(new MediaStreamMsg_DeviceOpenFailed(request.render_view_id, | 152 Send(new MediaStreamMsg_DeviceOpenFailed(request.render_view_id, |
266 request.page_request_id)); | 153 request.page_request_id)); |
267 } | 154 } |
268 | 155 |
| 156 bool MediaStreamDispatcherHost::OnMessageReceived( |
| 157 const IPC::Message& message, bool* message_was_ok) { |
| 158 bool handled = true; |
| 159 IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamDispatcherHost, message, *message_was_ok) |
| 160 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) |
| 161 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream, |
| 162 OnStopGeneratedStream) |
| 163 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateDevices, |
| 164 OnEnumerateDevices) |
| 165 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenDevice, |
| 166 OnOpenDevice) |
| 167 IPC_MESSAGE_UNHANDLED(handled = false) |
| 168 IPC_END_MESSAGE_MAP_EX() |
| 169 return handled; |
| 170 } |
| 171 |
| 172 void MediaStreamDispatcherHost::OnChannelClosing() { |
| 173 BrowserMessageFilter::OnChannelClosing(); |
| 174 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; |
| 175 |
| 176 // Since the IPC channel is gone, cancel pending requests and close all |
| 177 // requested VideCaptureDevices. |
| 178 manager()->CancelRequests(this); |
| 179 for (StreamMap::iterator it = streams_.begin(); |
| 180 it != streams_.end(); |
| 181 it++) { |
| 182 std::string label = it->first; |
| 183 manager()->StopGeneratedStream(label); |
| 184 } |
| 185 } |
| 186 |
| 187 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {} |
| 188 |
| 189 void MediaStreamDispatcherHost::OnGenerateStream( |
| 190 int render_view_id, |
| 191 int page_request_id, |
| 192 const media_stream::StreamOptions& components, |
| 193 const std::string& security_origin) { |
| 194 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" |
| 195 << render_view_id << ", " |
| 196 << page_request_id << ", [ " |
| 197 << (components.audio ? "audio " : "") |
| 198 << ((components.video_option & |
| 199 StreamOptions::kFacingUser) ? |
| 200 "video_facing_user " : "") |
| 201 << ((components.video_option & |
| 202 StreamOptions::kFacingEnvironment) ? |
| 203 "video_facing_environment " : "") |
| 204 << "], " |
| 205 << security_origin << ")"; |
| 206 |
| 207 std::string label; |
| 208 manager()->GenerateStream(this, render_process_id_, render_view_id, |
| 209 components, security_origin, &label); |
| 210 DCHECK(!label.empty()); |
| 211 streams_[label] = StreamRequest(render_view_id, page_request_id); |
| 212 } |
| 213 |
| 214 void MediaStreamDispatcherHost::OnStopGeneratedStream( |
| 215 int render_view_id, const std::string& label) { |
| 216 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" |
| 217 << ", {label = " << label << "})"; |
| 218 |
| 219 StreamMap::iterator it = streams_.find(label); |
| 220 DCHECK(it != streams_.end()); |
| 221 manager()->StopGeneratedStream(label); |
| 222 streams_.erase(it); |
| 223 } |
| 224 |
| 225 void MediaStreamDispatcherHost::OnEnumerateDevices( |
| 226 int render_view_id, |
| 227 int page_request_id, |
| 228 media_stream::MediaStreamType type, |
| 229 const std::string& security_origin) { |
| 230 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" |
| 231 << render_view_id << ", " |
| 232 << page_request_id << ", " |
| 233 << type << ", " |
| 234 << security_origin << ")"; |
| 235 |
| 236 std::string label; |
| 237 manager()->EnumerateDevices(this, render_process_id_, render_view_id, |
| 238 type, security_origin, &label); |
| 239 DCHECK(!label.empty()); |
| 240 streams_[label] = StreamRequest(render_view_id, page_request_id); |
| 241 } |
| 242 |
| 243 void MediaStreamDispatcherHost::OnOpenDevice( |
| 244 int render_view_id, |
| 245 int page_request_id, |
| 246 const std::string& device_id, |
| 247 media_stream::MediaStreamType type, |
| 248 const std::string& security_origin) { |
| 249 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" |
| 250 << render_view_id << ", " |
| 251 << page_request_id << ", device_id: " |
| 252 << device_id.c_str() << ", type: " |
| 253 << type << ", " |
| 254 << security_origin << ")"; |
| 255 |
| 256 std::string label; |
| 257 manager()->OpenDevice(this, render_process_id_, render_view_id, |
| 258 device_id, type, security_origin, &label); |
| 259 DCHECK(!label.empty()); |
| 260 streams_[label] = StreamRequest(render_view_id, page_request_id); |
| 261 } |
| 262 |
| 263 MediaStreamManager* MediaStreamDispatcherHost::manager() { |
| 264 return MediaStreamManager::GetForResourceContext( |
| 265 resource_context_, audio_manager_); |
| 266 } |
| 267 |
269 } // namespace media_stream | 268 } // namespace media_stream |
OLD | NEW |