OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |