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

Side by Side Diff: content/renderer/media/media_stream_impl.cc

Issue 391703002: Implement ConstraintNotSatisfiedError for getusermedia (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add bug id and reviewer Created 6 years, 4 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 unified diff | Download patch
OLDNEW
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/renderer/media/media_stream_impl.h" 5 #include "content/renderer/media/media_stream_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/hash.h" 9 #include "base/hash.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 constraints, 490 constraints,
491 request->frame, 491 request->frame,
492 &webkit_source); 492 &webkit_source);
493 (*webkit_tracks)[i].initialize(webkit_source); 493 (*webkit_tracks)[i].initialize(webkit_source);
494 request->StartAudioTrack((*webkit_tracks)[i], constraints); 494 request->StartAudioTrack((*webkit_tracks)[i], constraints);
495 } 495 }
496 } 496 }
497 497
498 void MediaStreamImpl::OnCreateNativeTracksCompleted( 498 void MediaStreamImpl::OnCreateNativeTracksCompleted(
499 UserMediaRequestInfo* request, 499 UserMediaRequestInfo* request,
500 content::MediaStreamRequestResult result) { 500 content::MediaStreamRequestResult result,
501 const blink::WebString& result_name) {
501 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" 502 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete("
502 << "{request_id = " << request->request_id << "} " 503 << "{request_id = " << request->request_id << "} "
503 << "{result = " << result << "})"; 504 << "{result = " << result << "})";
504 if (result == content::MEDIA_DEVICE_OK) 505 if (result == content::MEDIA_DEVICE_OK)
505 GetUserMediaRequestSucceeded(request->web_stream, &request->request); 506 GetUserMediaRequestSucceeded(request->web_stream, &request->request);
506 else 507 else
507 GetUserMediaRequestFailed(&request->request, result); 508 GetUserMediaRequestFailed(&request->request, result, result_name);
508 509
509 DeleteUserMediaRequestInfo(request); 510 DeleteUserMediaRequestInfo(request);
510 } 511 }
511 512
512 void MediaStreamImpl::OnDevicesEnumerated( 513 void MediaStreamImpl::OnDevicesEnumerated(
513 int request_id, 514 int request_id,
514 const StreamDeviceInfoArray& device_array) { 515 const StreamDeviceInfoArray& device_array) {
515 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")"; 516 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")";
516 517
517 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id); 518 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 615
615 void MediaStreamImpl::GetUserMediaRequestSucceeded( 616 void MediaStreamImpl::GetUserMediaRequestSucceeded(
616 const blink::WebMediaStream& stream, 617 const blink::WebMediaStream& stream,
617 blink::WebUserMediaRequest* request_info) { 618 blink::WebUserMediaRequest* request_info) {
618 DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded"; 619 DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded";
619 request_info->requestSucceeded(stream); 620 request_info->requestSucceeded(stream);
620 } 621 }
621 622
622 void MediaStreamImpl::GetUserMediaRequestFailed( 623 void MediaStreamImpl::GetUserMediaRequestFailed(
623 blink::WebUserMediaRequest* request_info, 624 blink::WebUserMediaRequest* request_info,
624 content::MediaStreamRequestResult result) { 625 content::MediaStreamRequestResult result,
626 const blink::WebString& result_name) {
625 switch (result) { 627 switch (result) {
626 case MEDIA_DEVICE_OK: 628 case MEDIA_DEVICE_OK:
627 NOTREACHED(); 629 NOTREACHED();
628 break; 630 break;
629 case MEDIA_DEVICE_PERMISSION_DENIED: 631 case MEDIA_DEVICE_PERMISSION_DENIED:
630 request_info->requestDenied(); 632 request_info->requestDenied();
631 break; 633 break;
632 case MEDIA_DEVICE_PERMISSION_DISMISSED: 634 case MEDIA_DEVICE_PERMISSION_DISMISSED:
633 request_info->requestFailedUASpecific("PermissionDismissedError"); 635 request_info->requestFailedUASpecific("PermissionDismissedError");
634 break; 636 break;
635 case MEDIA_DEVICE_INVALID_STATE: 637 case MEDIA_DEVICE_INVALID_STATE:
636 request_info->requestFailedUASpecific("InvalidStateError"); 638 request_info->requestFailedUASpecific("InvalidStateError");
637 break; 639 break;
638 case MEDIA_DEVICE_NO_HARDWARE: 640 case MEDIA_DEVICE_NO_HARDWARE:
639 request_info->requestFailedUASpecific("DevicesNotFoundError"); 641 request_info->requestFailedUASpecific("DevicesNotFoundError");
640 break; 642 break;
641 case MEDIA_DEVICE_INVALID_SECURITY_ORIGIN: 643 case MEDIA_DEVICE_INVALID_SECURITY_ORIGIN:
642 request_info->requestFailedUASpecific("InvalidSecurityOriginError"); 644 request_info->requestFailedUASpecific("InvalidSecurityOriginError");
643 break; 645 break;
644 case MEDIA_DEVICE_TAB_CAPTURE_FAILURE: 646 case MEDIA_DEVICE_TAB_CAPTURE_FAILURE:
645 request_info->requestFailedUASpecific("TabCaptureError"); 647 request_info->requestFailedUASpecific("TabCaptureError");
646 break; 648 break;
647 case MEDIA_DEVICE_SCREEN_CAPTURE_FAILURE: 649 case MEDIA_DEVICE_SCREEN_CAPTURE_FAILURE:
648 request_info->requestFailedUASpecific("ScreenCaptureError"); 650 request_info->requestFailedUASpecific("ScreenCaptureError");
649 break; 651 break;
650 case MEDIA_DEVICE_CAPTURE_FAILURE: 652 case MEDIA_DEVICE_CAPTURE_FAILURE:
651 request_info->requestFailedUASpecific("DeviceCaptureError"); 653 request_info->requestFailedUASpecific("DeviceCaptureError");
652 break; 654 break;
655 case MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED:
656 request_info->requestFailedConstraint(result_name);
657 break;
653 case MEDIA_DEVICE_TRACK_START_FAILURE: 658 case MEDIA_DEVICE_TRACK_START_FAILURE:
654 request_info->requestFailedUASpecific("TrackStartError"); 659 request_info->requestFailedUASpecific("TrackStartError");
655 break; 660 break;
661 case MEDIA_DEVICE_SOURCE_START_FAILURE:
662 request_info->requestFailedUASpecific("SourceStartError");
663 break;
656 default: 664 default:
657 request_info->requestFailed(); 665 request_info->requestFailed();
658 break; 666 break;
659 } 667 }
660 } 668 }
661 669
662 void MediaStreamImpl::EnumerateDevicesSucceded( 670 void MediaStreamImpl::EnumerateDevicesSucceded(
663 blink::WebMediaDevicesRequest* request, 671 blink::WebMediaDevicesRequest* request,
664 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { 672 blink::WebVector<blink::WebMediaDeviceInfo>& devices) {
665 request->requestSucceeded(devices); 673 request->requestSucceeded(devices);
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 } 887 }
880 888
881 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted( 889 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted(
882 const ResourcesReady& callback) { 890 const ResourcesReady& callback) {
883 DCHECK(ready_callback_.is_null()); 891 DCHECK(ready_callback_.is_null());
884 ready_callback_ = callback; 892 ready_callback_ = callback;
885 CheckAllTracksStarted(); 893 CheckAllTracksStarted();
886 } 894 }
887 895
888 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted( 896 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted(
889 MediaStreamSource* source, bool success) { 897 MediaStreamSource* source,
890 DVLOG(1) << "OnTrackStarted result " << success; 898 content::MediaStreamRequestResult result,
899 const blink::WebString& result_name) {
900 DVLOG(1) << "OnTrackStarted result " << result;
891 std::vector<MediaStreamSource*>::iterator it = 901 std::vector<MediaStreamSource*>::iterator it =
892 std::find(sources_waiting_for_callback_.begin(), 902 std::find(sources_waiting_for_callback_.begin(),
893 sources_waiting_for_callback_.end(), 903 sources_waiting_for_callback_.end(),
894 source); 904 source);
895 DCHECK(it != sources_waiting_for_callback_.end()); 905 DCHECK(it != sources_waiting_for_callback_.end());
896 sources_waiting_for_callback_.erase(it); 906 sources_waiting_for_callback_.erase(it);
897 // All tracks must be started successfully. Otherwise the request is a 907 // All tracks must be started successfully. Otherwise the request is a
898 // failure. 908 // failure.
899 if (!success) 909 if (result != MEDIA_DEVICE_OK)
900 request_failed_ = true; 910 request_failed_ = true;
901 CheckAllTracksStarted(); 911 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) {
912 ready_callback_.Run(this, result, result_name);
913 }
902 } 914 }
903 915
904 void MediaStreamImpl::UserMediaRequestInfo::CheckAllTracksStarted() { 916 void MediaStreamImpl::UserMediaRequestInfo::CheckAllTracksStarted() {
905 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) { 917 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) {
906 ready_callback_.Run( 918 ready_callback_.Run(
907 this, 919 this,
908 request_failed_ ? MEDIA_DEVICE_TRACK_START_FAILURE : MEDIA_DEVICE_OK); 920 request_failed_ ? MEDIA_DEVICE_TRACK_START_FAILURE : MEDIA_DEVICE_OK,
921 "");
909 } 922 }
910 } 923 }
911 924
912 bool MediaStreamImpl::UserMediaRequestInfo::IsSourceUsed( 925 bool MediaStreamImpl::UserMediaRequestInfo::IsSourceUsed(
913 const blink::WebMediaStreamSource& source) const { 926 const blink::WebMediaStreamSource& source) const {
914 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it = 927 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it =
915 sources_.begin(); 928 sources_.begin();
916 source_it != sources_.end(); ++source_it) { 929 source_it != sources_.end(); ++source_it) {
917 if (source_it->id() == source.id()) 930 if (source_it->id() == source.id())
918 return true; 931 return true;
919 } 932 }
920 return false; 933 return false;
921 } 934 }
922 935
923 void MediaStreamImpl::UserMediaRequestInfo::RemoveSource( 936 void MediaStreamImpl::UserMediaRequestInfo::RemoveSource(
924 const blink::WebMediaStreamSource& source) { 937 const blink::WebMediaStreamSource& source) {
925 for (std::vector<blink::WebMediaStreamSource>::iterator it = 938 for (std::vector<blink::WebMediaStreamSource>::iterator it =
926 sources_.begin(); 939 sources_.begin();
927 it != sources_.end(); ++it) { 940 it != sources_.end(); ++it) {
928 if (source.id() == it->id()) { 941 if (source.id() == it->id()) {
929 sources_.erase(it); 942 sources_.erase(it);
930 return; 943 return;
931 } 944 }
932 } 945 }
933 } 946 }
934 947
935 } // namespace content 948 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698