| Index: content/renderer/media/user_media_client_impl.cc
|
| diff --git a/content/renderer/media/user_media_client_impl.cc b/content/renderer/media/user_media_client_impl.cc
|
| index 494b81716137b7ebe059c48aab8b1abb2eb32853..1c1e4dbd54b0e25af3ecdf01a96e74d9945ce887 100644
|
| --- a/content/renderer/media/user_media_client_impl.cc
|
| +++ b/content/renderer/media/user_media_client_impl.cc
|
| @@ -26,6 +26,7 @@
|
| #include "content/renderer/media/local_media_stream_audio_source.h"
|
| #include "content/renderer/media/media_stream.h"
|
| #include "content/renderer/media/media_stream_constraints_util.h"
|
| +#include "content/renderer/media/media_stream_constraints_util_video_content.h"
|
| #include "content/renderer/media/media_stream_constraints_util_video_device.h"
|
| #include "content/renderer/media/media_stream_dispatcher.h"
|
| #include "content/renderer/media/media_stream_video_capturer_source.h"
|
| @@ -129,6 +130,8 @@ bool IsDeviceSource(const std::string& source) {
|
| return source.empty();
|
| }
|
|
|
| +// TODO(guidou): Remove once audio constraints are processed with spec-compliant
|
| +// algorithm. See http://crbug.com/657733.
|
| void CopyConstraintsToTrackControls(
|
| const blink::WebMediaConstraints& constraints,
|
| TrackControls* track_controls,
|
| @@ -153,6 +156,14 @@ void CopyConstraintsToTrackControls(
|
| }
|
| }
|
|
|
| +void InitializeTrackControls(const blink::WebMediaConstraints& constraints,
|
| + TrackControls* track_controls) {
|
| + DCHECK(!constraints.isNull());
|
| + track_controls->requested = true;
|
| + CopyFirstString(constraints.basic().mediaStreamSource,
|
| + &track_controls->stream_source);
|
| +}
|
| +
|
| void CopyHotwordAndLocalEchoToStreamControls(
|
| const blink::WebMediaConstraints& audio_constraints,
|
| StreamControls* controls) {
|
| @@ -338,21 +349,29 @@ void UserMediaClientImpl::SetupVideoInput(
|
| const blink::WebUserMediaRequest& user_media_request,
|
| std::unique_ptr<StreamControls> controls,
|
| const RequestSettings& request_settings) {
|
| - if (user_media_request.video()) {
|
| - bool ignore;
|
| - CopyConstraintsToTrackControls(user_media_request.videoConstraints(),
|
| - &controls->video, &ignore);
|
| - if (IsDeviceSource(controls->video.stream_source)) {
|
| - GetMediaDevicesDispatcher()->GetVideoInputCapabilities(
|
| - request_settings.security_origin,
|
| - base::Bind(&UserMediaClientImpl::SelectVideoDeviceSourceSettings,
|
| - weak_factory_.GetWeakPtr(), request_id, user_media_request,
|
| - base::Passed(&controls), request_settings));
|
| - return;
|
| - }
|
| + if (!user_media_request.video()) {
|
| + FinalizeRequestUserMedia(request_id, user_media_request,
|
| + std::move(controls), request_settings);
|
| + return;
|
| + }
|
| + InitializeTrackControls(user_media_request.videoConstraints(),
|
| + &controls->video);
|
| + if (IsDeviceSource(controls->video.stream_source)) {
|
| + GetMediaDevicesDispatcher()->GetVideoInputCapabilities(
|
| + request_settings.security_origin,
|
| + base::Bind(&UserMediaClientImpl::SelectVideoDeviceSourceSettings,
|
| + weak_factory_.GetWeakPtr(), request_id, user_media_request,
|
| + base::Passed(&controls), request_settings));
|
| + } else {
|
| + base::PostTaskAndReplyWithResult(
|
| + worker_task_runner_.get(), FROM_HERE,
|
| + base::Bind(&SelectVideoContentCaptureSourceSettings,
|
| + user_media_request.videoConstraints()),
|
| + base::Bind(
|
| + &UserMediaClientImpl::FinalizeSelectVideoContentSourceSettings,
|
| + weak_factory_.GetWeakPtr(), request_id, user_media_request,
|
| + base::Passed(&controls), request_settings));
|
| }
|
| - FinalizeRequestUserMedia(request_id, user_media_request, std::move(controls),
|
| - request_settings);
|
| }
|
|
|
| void UserMediaClientImpl::SelectVideoDeviceSourceSettings(
|
| @@ -417,6 +436,29 @@ void UserMediaClientImpl::FinalizeSelectVideoDeviceSourceSettings(
|
| request_settings);
|
| }
|
|
|
| +void UserMediaClientImpl::FinalizeSelectVideoContentSourceSettings(
|
| + int request_id,
|
| + const blink::WebUserMediaRequest& user_media_request,
|
| + std::unique_ptr<StreamControls> controls,
|
| + const RequestSettings& request_settings,
|
| + const VideoContentCaptureSourceSelectionResult& selection_result) {
|
| + DCHECK(CalledOnValidThread());
|
| + if (!selection_result.HasValue()) {
|
| + blink::WebString failed_constraint_name =
|
| + blink::WebString::fromASCII(selection_result.failed_constraint_name());
|
| + DCHECK(!failed_constraint_name.isEmpty());
|
| + blink::WebString device_id_constraint_name = blink::WebString::fromASCII(
|
| + user_media_request.videoConstraints().basic().deviceId.name());
|
| + GetUserMediaRequestFailed(user_media_request,
|
| + MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED,
|
| + failed_constraint_name);
|
| + return;
|
| + }
|
| + controls->video.device_id = selection_result.device_id();
|
| + FinalizeRequestUserMedia(request_id, user_media_request, std::move(controls),
|
| + request_settings);
|
| +}
|
| +
|
| void UserMediaClientImpl::FinalizeRequestUserMedia(
|
| int request_id,
|
| const blink::WebUserMediaRequest& user_media_request,
|
|
|