| 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 1ff102e63cf2d33cf5ea60318325dac991b6a813..691e768b3b1c2f186d9b218d774e8466c3bfb73e 100644
|
| --- a/content/renderer/media/user_media_client_impl.cc
|
| +++ b/content/renderer/media/user_media_client_impl.cc
|
| @@ -389,19 +389,26 @@ void UserMediaClientImpl::FinalizeSelectVideoDeviceSourceSettings(
|
| const RequestSettings& request_settings,
|
| const VideoCaptureSourceSelectionResult& selection_result) {
|
| DCHECK(CalledOnValidThread());
|
| - // Select video device.
|
| - if (!selection_result.has_value()) {
|
| + if (selection_result.has_value()) {
|
| + controls->video.device_id = selection_result.settings.device_id();
|
| + } else {
|
| + // TODO(guidou): Abort the request in all cases where |selection_result|
|
| + // has no value, as the spec mandates.
|
| + // Currently, some applications rely on the nonstandard behavior of asking
|
| + // for permission even if constraints cannot be satisfied or there are no
|
| + // devices. Fix once the standard behavior ceases to be disruptive.
|
| + // See http://crbug.com/690491.
|
| blink::WebString failed_constraint_name =
|
| blink::WebString::fromASCII(selection_result.failed_constraint_name);
|
| - MediaStreamRequestResult result =
|
| - failed_constraint_name.isEmpty()
|
| - ? MEDIA_DEVICE_NO_HARDWARE
|
| - : MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED;
|
| - GetUserMediaRequestFailed(user_media_request, result,
|
| - failed_constraint_name);
|
| - return;
|
| + blink::WebString device_id_constraint_name = blink::WebString::fromASCII(
|
| + user_media_request.videoConstraints().basic().deviceId.name());
|
| + if (failed_constraint_name.equals(device_id_constraint_name)) {
|
| + GetUserMediaRequestFailed(user_media_request,
|
| + MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED,
|
| + failed_constraint_name);
|
| + return;
|
| + }
|
| }
|
| - controls->video.device_id = selection_result.settings.device_id();
|
| FinalizeRequestUserMedia(request_id, user_media_request, std::move(controls),
|
| request_settings);
|
| }
|
|
|