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

Unified Diff: content/browser/renderer_host/media/media_stream_dispatcher_host.cc

Issue 8480028: support video device enumeration from renderer process. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: code review Created 8 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/media_stream_dispatcher_host.cc
===================================================================
--- content/browser/renderer_host/media/media_stream_dispatcher_host.cc (revision 118766)
+++ content/browser/renderer_host/media/media_stream_dispatcher_host.cc (working copy)
@@ -44,6 +44,10 @@
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream)
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream,
OnStopGeneratedStream)
+ IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateDevices,
+ OnEnumerateDevices)
+ IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenDevice,
+ OnOpenDevice)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
@@ -102,6 +106,44 @@
streams_.erase(it);
}
+void MediaStreamDispatcherHost::OnEnumerateDevices(
+ int render_view_id,
+ int page_request_id,
+ media_stream::MediaStreamType type,
+ const std::string& security_origin) {
+ DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices("
+ << render_view_id << ", "
+ << page_request_id << ", "
+ << type << ", "
+ << security_origin << ")";
+
+ std::string label;
+ manager()->EnumerateDevices(this, render_process_id_, render_view_id,
+ type, security_origin, &label);
+ DCHECK(!label.empty());
+ streams_[label] = StreamRequest(render_view_id, page_request_id);
+}
+
+void MediaStreamDispatcherHost::OnOpenDevice(
+ int render_view_id,
+ int page_request_id,
+ const std::string& device_id,
+ media_stream::MediaStreamType type,
+ const std::string& security_origin) {
+ DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice("
+ << render_view_id << ", "
+ << page_request_id << ", device_id: "
+ << device_id.c_str() << ", type: "
+ << type << ", "
+ << security_origin << ")";
+
+ std::string label;
+ manager()->OpenDevice(this, render_process_id_, render_view_id,
+ device_id, type, security_origin, &label);
+ DCHECK(!label.empty());
+ streams_[label] = StreamRequest(render_view_id, page_request_id);
+}
+
void MediaStreamDispatcherHost::StreamGenerated(
const std::string& label,
const StreamDeviceInfoArray& audio_devices,
@@ -162,4 +204,65 @@
index));
}
+void MediaStreamDispatcherHost::DevicesEnumerated(
+ const std::string& label,
+ const StreamDeviceInfoArray& devices) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::DevicesEnumerated("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_DevicesEnumerated(
+ request.render_view_id, request.page_request_id, devices));
+}
+
+void MediaStreamDispatcherHost::DevicesEnumerationFailed(
+ const std::string& label) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::DevicesEnumerationFailed("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_DevicesEnumerationFailed(
+ request.render_view_id, request.page_request_id));
+}
+
+void MediaStreamDispatcherHost::DeviceOpened(
+ const std::string& label,
+ const StreamDeviceInfo& video_device) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::DeviceOpened("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+
+ Send(new MediaStreamMsg_DeviceOpened(
+ request.render_view_id, request.page_request_id, label, video_device));
+}
+
+void MediaStreamDispatcherHost::DeviceOpenFailed(
+ const std::string& label) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::DeviceOpenFailed("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_DeviceOpenFailed(request.render_view_id,
+ request.page_request_id));
+}
+
} // namespace media_stream

Powered by Google App Engine
This is Rietveld 408576698