Index: content/renderer/media/media_stream_impl.cc |
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc |
index 648fe2a5a55accf56157f4e014c10277029387d3..5b89bc9f0318e88f0e368097577e849f43b2440f 100644 |
--- a/content/renderer/media/media_stream_impl.cc |
+++ b/content/renderer/media/media_stream_impl.cc |
@@ -88,12 +88,8 @@ void MediaStreamImpl::requestUserMedia( |
// webGetUserMedia. |
UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA); |
DCHECK(CalledOnValidThread()); |
- int request_id = g_next_request_id++; |
bool audio = false; |
bool video = false; |
- WebKit::WebFrame* frame = NULL; |
- GURL security_origin; |
- |
// |user_media_request| can't be mocked. So in order to test at all we check |
// if it isNull. |
if (user_media_request.isNull()) { |
@@ -103,6 +99,38 @@ void MediaStreamImpl::requestUserMedia( |
} else { |
audio = user_media_request.audio(); |
video = user_media_request.video(); |
+ } |
+ |
+ content::MediaStreamDeviceType audio_type = |
+ audio ? content::MEDIA_DEVICE_AUDIO_CAPTURE : content::MEDIA_NO_SERVICE; |
+ content::MediaStreamDeviceType video_type = |
+ video ? content::MEDIA_DEVICE_VIDEO_CAPTURE : content::MEDIA_NO_SERVICE; |
+ GenerateStreamForMedia(user_media_request, audio_type, video_type, NULL); |
+} |
+ |
+void MediaStreamImpl::requestDeviceMedia( |
+ const WebKit::WebDeviceMediaRequest& media_request) { |
+ const std::string& device_id = UTF16ToUTF8(media_request.deviceId()); |
+ |
+ content::MediaStreamDeviceType audio_type = media_request.audio() ? |
+ content::MEDIA_TAB_AUDIO_CAPTURE : content::MEDIA_NO_SERVICE; |
+ content::MediaStreamDeviceType video_type = media_request.video() ? |
+ content::MEDIA_TAB_VIDEO_CAPTURE : content::MEDIA_NO_SERVICE; |
+ |
+ GenerateStreamForMedia(media_request, audio_type, video_type, &device_id); |
+} |
+ |
+void MediaStreamImpl::GenerateStreamForMedia( |
+ const WebKit::WebUserMediaRequest& user_media_request, |
+ const content::MediaStreamDeviceType audio, |
+ const content::MediaStreamDeviceType video, |
+ const std::string* device_id) { |
+ DCHECK(CalledOnValidThread()); |
+ int request_id = g_next_request_id++; |
+ WebKit::WebFrame* frame = NULL; |
+ GURL security_origin; |
+ |
+ if (!user_media_request.isNull()) { |
security_origin = GURL(user_media_request.securityOrigin().toString()); |
// Get the WebFrame that requested a MediaStream. |
// The frame is needed to tell the MediaStreamDispatcher when a stream goes |
@@ -119,11 +147,23 @@ void MediaStreamImpl::requestUserMedia( |
user_media_requests_[request_id] = |
UserMediaRequestInfo(frame, user_media_request); |
- media_stream_dispatcher_->GenerateStream( |
- request_id, |
- AsWeakPtr(), |
- media_stream::StreamOptions(audio, video), |
- security_origin); |
+ if (device_id == NULL) { |
+ // WebUserMediaRequest. |
+ media_stream_dispatcher_->GenerateStream( |
+ request_id, |
+ AsWeakPtr(), |
+ media_stream::StreamOptions(audio, video), |
+ security_origin); |
+ } else { |
+ // WebDeviceMediaRequest. |
+ media_stream_dispatcher_->GenerateStreamForDevice( |
+ request_id, |
+ AsWeakPtr(), |
+ media_stream::StreamOptions(audio, video), |
+ *device_id, |
+ security_origin); |
+ |
+ } |
} |
void MediaStreamImpl::cancelUserMediaRequest( |