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/browser/browser_main_loop.h" |
7 #include "content/common/media/media_stream_messages.h" | 8 #include "content/common/media/media_stream_messages.h" |
8 #include "content/common/media/media_stream_options.h" | 9 #include "content/common/media/media_stream_options.h" |
9 #include "googleurl/src/gurl.h" | 10 #include "googleurl/src/gurl.h" |
10 | 11 |
| 12 using content::BrowserMainLoop; |
11 using content::BrowserMessageFilter; | 13 using content::BrowserMessageFilter; |
12 using content::BrowserThread; | 14 using content::BrowserThread; |
13 | 15 |
14 namespace media_stream { | 16 namespace media_stream { |
15 | 17 |
16 struct MediaStreamDispatcherHost::StreamRequest { | 18 struct MediaStreamDispatcherHost::StreamRequest { |
17 StreamRequest() : render_view_id(0), page_request_id(0) {} | 19 StreamRequest() : render_view_id(0), page_request_id(0) {} |
18 StreamRequest(int render_view_id, int page_request_id) | 20 StreamRequest(int render_view_id, int page_request_id) |
19 : render_view_id(render_view_id), | 21 : render_view_id(render_view_id), |
20 page_request_id(page_request_id ) { | 22 page_request_id(page_request_id ) { |
21 } | 23 } |
22 int render_view_id; | 24 int render_view_id; |
23 // Id of the request generated by MediaStreamDispatcher. | 25 // Id of the request generated by MediaStreamDispatcher. |
24 int page_request_id; | 26 int page_request_id; |
25 }; | 27 }; |
26 | 28 |
27 MediaStreamDispatcherHost::MediaStreamDispatcherHost( | 29 MediaStreamDispatcherHost::MediaStreamDispatcherHost(int render_process_id) |
28 content::ResourceContext* resource_context, | 30 : render_process_id_(render_process_id) { |
29 int render_process_id, | |
30 media::AudioManager* audio_manager) | |
31 : resource_context_(resource_context), | |
32 render_process_id_(render_process_id), | |
33 audio_manager_(audio_manager) { | |
34 } | 31 } |
35 | 32 |
36 void MediaStreamDispatcherHost::StreamGenerated( | 33 void MediaStreamDispatcherHost::StreamGenerated( |
37 const std::string& label, | 34 const std::string& label, |
38 const StreamDeviceInfoArray& audio_devices, | 35 const StreamDeviceInfoArray& audio_devices, |
39 const StreamDeviceInfoArray& video_devices) { | 36 const StreamDeviceInfoArray& video_devices) { |
40 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 37 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
41 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" | 38 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" |
42 << ", {label = " << label << "})"; | 39 << ", {label = " << label << "})"; |
43 | 40 |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 IPC_END_MESSAGE_MAP_EX() | 168 IPC_END_MESSAGE_MAP_EX() |
172 return handled; | 169 return handled; |
173 } | 170 } |
174 | 171 |
175 void MediaStreamDispatcherHost::OnChannelClosing() { | 172 void MediaStreamDispatcherHost::OnChannelClosing() { |
176 BrowserMessageFilter::OnChannelClosing(); | 173 BrowserMessageFilter::OnChannelClosing(); |
177 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; | 174 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; |
178 | 175 |
179 // Since the IPC channel is gone, cancel pending requests and close all | 176 // Since the IPC channel is gone, cancel pending requests and close all |
180 // requested VideoCaptureDevices. | 177 // requested VideoCaptureDevices. |
181 manager()->CancelRequests(this); | 178 GetManager()->CancelRequests(this); |
182 for (StreamMap::iterator it = streams_.begin(); | 179 for (StreamMap::iterator it = streams_.begin(); |
183 it != streams_.end(); | 180 it != streams_.end(); |
184 it++) { | 181 it++) { |
185 std::string label = it->first; | 182 std::string label = it->first; |
186 manager()->StopGeneratedStream(label); | 183 GetManager()->StopGeneratedStream(label); |
187 } | 184 } |
188 } | 185 } |
189 | 186 |
190 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {} | 187 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {} |
191 | 188 |
192 void MediaStreamDispatcherHost::OnGenerateStream( | 189 void MediaStreamDispatcherHost::OnGenerateStream( |
193 int render_view_id, | 190 int render_view_id, |
194 int page_request_id, | 191 int page_request_id, |
195 const media_stream::StreamOptions& components, | 192 const media_stream::StreamOptions& components, |
196 const GURL& security_origin) { | 193 const GURL& security_origin) { |
197 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" | 194 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" |
198 << render_view_id << ", " | 195 << render_view_id << ", " |
199 << page_request_id << ", [ " | 196 << page_request_id << ", [ " |
200 << (components.audio ? "audio " : "") | 197 << (components.audio ? "audio " : "") |
201 << (components.video ? "video " : "") | 198 << (components.video ? "video " : "") |
202 << "], " | 199 << "], " |
203 << security_origin.spec() << ")"; | 200 << security_origin.spec() << ")"; |
204 | 201 |
205 std::string label; | 202 std::string label; |
206 manager()->GenerateStream(this, render_process_id_, render_view_id, | 203 GetManager()->GenerateStream(this, render_process_id_, render_view_id, |
207 components, security_origin, &label); | 204 components, security_origin, &label); |
208 DCHECK(!label.empty()); | 205 DCHECK(!label.empty()); |
209 streams_[label] = StreamRequest(render_view_id, page_request_id); | 206 streams_[label] = StreamRequest(render_view_id, page_request_id); |
210 } | 207 } |
211 | 208 |
212 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id, | 209 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id, |
213 int page_request_id) { | 210 int page_request_id) { |
214 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream(" | 211 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream(" |
215 << render_view_id << ", " | 212 << render_view_id << ", " |
216 << page_request_id << ")"; | 213 << page_request_id << ")"; |
217 | 214 |
218 for (StreamMap::iterator it = streams_.begin(); it != streams_.end(); ++it) { | 215 for (StreamMap::iterator it = streams_.begin(); it != streams_.end(); ++it) { |
219 if (it->second.render_view_id == render_view_id && | 216 if (it->second.render_view_id == render_view_id && |
220 it->second.page_request_id == page_request_id) { | 217 it->second.page_request_id == page_request_id) { |
221 manager()->CancelGenerateStream(it->first); | 218 GetManager()->CancelGenerateStream(it->first); |
222 } | 219 } |
223 } | 220 } |
224 } | 221 } |
225 | 222 |
226 void MediaStreamDispatcherHost::OnStopGeneratedStream( | 223 void MediaStreamDispatcherHost::OnStopGeneratedStream( |
227 int render_view_id, const std::string& label) { | 224 int render_view_id, const std::string& label) { |
228 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" | 225 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" |
229 << ", {label = " << label << "})"; | 226 << ", {label = " << label << "})"; |
230 | 227 |
231 StreamMap::iterator it = streams_.find(label); | 228 StreamMap::iterator it = streams_.find(label); |
232 DCHECK(it != streams_.end()); | 229 DCHECK(it != streams_.end()); |
233 manager()->StopGeneratedStream(label); | 230 GetManager()->StopGeneratedStream(label); |
234 streams_.erase(it); | 231 streams_.erase(it); |
235 } | 232 } |
236 | 233 |
237 void MediaStreamDispatcherHost::OnEnumerateDevices( | 234 void MediaStreamDispatcherHost::OnEnumerateDevices( |
238 int render_view_id, | 235 int render_view_id, |
239 int page_request_id, | 236 int page_request_id, |
240 media_stream::MediaStreamType type, | 237 media_stream::MediaStreamType type, |
241 const GURL& security_origin) { | 238 const GURL& security_origin) { |
242 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" | 239 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" |
243 << render_view_id << ", " | 240 << render_view_id << ", " |
244 << page_request_id << ", " | 241 << page_request_id << ", " |
245 << type << ", " | 242 << type << ", " |
246 << security_origin.spec() << ")"; | 243 << security_origin.spec() << ")"; |
247 | 244 |
248 std::string label; | 245 std::string label; |
249 manager()->EnumerateDevices(this, render_process_id_, render_view_id, | 246 GetManager()->EnumerateDevices(this, render_process_id_, render_view_id, |
250 type, security_origin, &label); | 247 type, security_origin, &label); |
251 DCHECK(!label.empty()); | 248 DCHECK(!label.empty()); |
252 streams_[label] = StreamRequest(render_view_id, page_request_id); | 249 streams_[label] = StreamRequest(render_view_id, page_request_id); |
253 } | 250 } |
254 | 251 |
255 void MediaStreamDispatcherHost::OnOpenDevice( | 252 void MediaStreamDispatcherHost::OnOpenDevice( |
256 int render_view_id, | 253 int render_view_id, |
257 int page_request_id, | 254 int page_request_id, |
258 const std::string& device_id, | 255 const std::string& device_id, |
259 media_stream::MediaStreamType type, | 256 media_stream::MediaStreamType type, |
260 const GURL& security_origin) { | 257 const GURL& security_origin) { |
261 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" | 258 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" |
262 << render_view_id << ", " | 259 << render_view_id << ", " |
263 << page_request_id << ", device_id: " | 260 << page_request_id << ", device_id: " |
264 << device_id.c_str() << ", type: " | 261 << device_id.c_str() << ", type: " |
265 << type << ", " | 262 << type << ", " |
266 << security_origin.spec() << ")"; | 263 << security_origin.spec() << ")"; |
267 | 264 |
268 std::string label; | 265 std::string label; |
269 manager()->OpenDevice(this, render_process_id_, render_view_id, | 266 GetManager()->OpenDevice(this, render_process_id_, render_view_id, |
270 device_id, type, security_origin, &label); | 267 device_id, type, security_origin, &label); |
271 DCHECK(!label.empty()); | 268 DCHECK(!label.empty()); |
272 streams_[label] = StreamRequest(render_view_id, page_request_id); | 269 streams_[label] = StreamRequest(render_view_id, page_request_id); |
273 } | 270 } |
274 | 271 |
275 MediaStreamManager* MediaStreamDispatcherHost::manager() { | 272 MediaStreamManager* MediaStreamDispatcherHost::GetManager() { |
276 return MediaStreamManager::GetForResourceContext( | 273 return BrowserMainLoop::GetMediaStreamManager(); |
277 resource_context_, audio_manager_); | |
278 } | 274 } |
279 | 275 |
280 } // namespace media_stream | 276 } // namespace media_stream |
OLD | NEW |