| 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 |