| 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 |