Chromium Code Reviews| 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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 // Wait for the tracks to be started successfully or to fail. | 329 // Wait for the tracks to be started successfully or to fail. |
| 330 request_info->CallbackOnTracksStarted( | 330 request_info->CallbackOnTracksStarted( |
| 331 base::Bind(&MediaStreamImpl::OnCreateNativeTracksCompleted, | 331 base::Bind(&MediaStreamImpl::OnCreateNativeTracksCompleted, |
| 332 weak_factory_.GetWeakPtr())); | 332 weak_factory_.GetWeakPtr())); |
| 333 } | 333 } |
| 334 | 334 |
| 335 // Callback from MediaStreamDispatcher. | 335 // Callback from MediaStreamDispatcher. |
| 336 // The requested stream failed to be generated. | 336 // The requested stream failed to be generated. |
| 337 void MediaStreamImpl::OnStreamGenerationFailed( | 337 void MediaStreamImpl::OnStreamGenerationFailed( |
| 338 int request_id, | 338 int request_id, |
| 339 content::MediaStreamRequestResult result) { | 339 MediaStreamRequestResult result) { |
| 340 DCHECK(CalledOnValidThread()); | 340 DCHECK(CalledOnValidThread()); |
| 341 DVLOG(1) << "MediaStreamImpl::OnStreamGenerationFailed(" | 341 DVLOG(1) << "MediaStreamImpl::OnStreamGenerationFailed(" |
| 342 << request_id << ")"; | 342 << request_id << ")"; |
| 343 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); | 343 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); |
| 344 if (!request_info) { | 344 if (!request_info) { |
| 345 // This can happen if the request is canceled or the frame reloads while | 345 // This can happen if the request is canceled or the frame reloads while |
| 346 // MediaStreamDispatcher is processing the request. | 346 // MediaStreamDispatcher is processing the request. |
| 347 DVLOG(1) << "Request ID not found"; | 347 DVLOG(1) << "Request ID not found"; |
| 348 return; | 348 return; |
| 349 } | 349 } |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 487 blink::WebMediaStreamSource::TypeAudio, | 487 blink::WebMediaStreamSource::TypeAudio, |
| 488 constraints, | 488 constraints, |
| 489 &webkit_source); | 489 &webkit_source); |
| 490 (*webkit_tracks)[i].initialize(webkit_source); | 490 (*webkit_tracks)[i].initialize(webkit_source); |
| 491 request->StartAudioTrack((*webkit_tracks)[i], constraints); | 491 request->StartAudioTrack((*webkit_tracks)[i], constraints); |
| 492 } | 492 } |
| 493 } | 493 } |
| 494 | 494 |
| 495 void MediaStreamImpl::OnCreateNativeTracksCompleted( | 495 void MediaStreamImpl::OnCreateNativeTracksCompleted( |
| 496 UserMediaRequestInfo* request, | 496 UserMediaRequestInfo* request, |
| 497 content::MediaStreamRequestResult result) { | 497 MediaStreamRequestResult result, |
| 498 const blink::WebString& result_name) { | |
| 498 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" | 499 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" |
| 499 << "{request_id = " << request->request_id << "} " | 500 << "{request_id = " << request->request_id << "} " |
| 500 << "{result = " << result << "})"; | 501 << "{result = " << result << "})"; |
| 501 if (result == content::MEDIA_DEVICE_OK) | 502 if (result == content::MEDIA_DEVICE_OK) |
| 502 GetUserMediaRequestSucceeded(request->web_stream, &request->request); | 503 GetUserMediaRequestSucceeded(request->web_stream, &request->request); |
| 503 else | 504 else |
| 504 GetUserMediaRequestFailed(&request->request, result); | 505 GetUserMediaRequestTrackStartedFailed(&request->request, |
| 506 result, | |
| 507 result_name); | |
| 505 | 508 |
| 506 DeleteUserMediaRequestInfo(request); | 509 DeleteUserMediaRequestInfo(request); |
| 507 } | 510 } |
| 508 | 511 |
| 509 void MediaStreamImpl::OnDevicesEnumerated( | 512 void MediaStreamImpl::OnDevicesEnumerated( |
| 510 int request_id, | 513 int request_id, |
| 511 const StreamDeviceInfoArray& device_array) { | 514 const StreamDeviceInfoArray& device_array) { |
| 512 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")"; | 515 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")"; |
| 513 | 516 |
| 514 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id); | 517 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 599 | 602 |
| 600 void MediaStreamImpl::GetUserMediaRequestSucceeded( | 603 void MediaStreamImpl::GetUserMediaRequestSucceeded( |
| 601 const blink::WebMediaStream& stream, | 604 const blink::WebMediaStream& stream, |
| 602 blink::WebUserMediaRequest* request_info) { | 605 blink::WebUserMediaRequest* request_info) { |
| 603 DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded"; | 606 DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded"; |
| 604 request_info->requestSucceeded(stream); | 607 request_info->requestSucceeded(stream); |
| 605 } | 608 } |
| 606 | 609 |
| 607 void MediaStreamImpl::GetUserMediaRequestFailed( | 610 void MediaStreamImpl::GetUserMediaRequestFailed( |
| 608 blink::WebUserMediaRequest* request_info, | 611 blink::WebUserMediaRequest* request_info, |
| 609 content::MediaStreamRequestResult result) { | 612 MediaStreamRequestResult result) { |
| 610 switch (result) { | 613 switch (result) { |
| 611 case MEDIA_DEVICE_OK: | 614 case MEDIA_DEVICE_OK: |
| 612 NOTREACHED(); | 615 NOTREACHED(); |
| 613 break; | 616 break; |
| 614 case MEDIA_DEVICE_PERMISSION_DENIED: | 617 case MEDIA_DEVICE_PERMISSION_DENIED: |
| 615 request_info->requestDenied(); | 618 request_info->requestDenied(); |
| 616 break; | 619 break; |
| 617 case MEDIA_DEVICE_PERMISSION_DISMISSED: | 620 case MEDIA_DEVICE_PERMISSION_DISMISSED: |
| 618 request_info->requestFailedUASpecific("PermissionDismissedError"); | 621 request_info->requestFailedUASpecific("PermissionDismissedError"); |
| 619 break; | 622 break; |
| 620 case MEDIA_DEVICE_INVALID_STATE: | 623 case MEDIA_DEVICE_INVALID_STATE: |
| 621 request_info->requestFailedUASpecific("InvalidStateError"); | 624 request_info->requestFailedUASpecific("InvalidStateError"); |
| 622 break; | 625 break; |
| 623 case MEDIA_DEVICE_NO_HARDWARE: | 626 case MEDIA_DEVICE_NO_HARDWARE: |
| 624 request_info->requestFailedUASpecific("DevicesNotFoundError"); | 627 request_info->requestFailedUASpecific("DevicesNotFoundError"); |
| 625 break; | 628 break; |
| 626 case MEDIA_DEVICE_INVALID_SECURITY_ORIGIN: | 629 case MEDIA_DEVICE_INVALID_SECURITY_ORIGIN: |
| 627 request_info->requestFailedUASpecific("InvalidSecurityOriginError"); | 630 request_info->requestFailedUASpecific("InvalidSecurityOriginError"); |
| 628 break; | 631 break; |
| 629 case MEDIA_DEVICE_TAB_CAPTURE_FAILURE: | 632 case MEDIA_DEVICE_TAB_CAPTURE_FAILURE: |
| 630 request_info->requestFailedUASpecific("TabCaptureError"); | 633 request_info->requestFailedUASpecific("TabCaptureError"); |
| 631 break; | 634 break; |
| 632 case MEDIA_DEVICE_SCREEN_CAPTURE_FAILURE: | 635 case MEDIA_DEVICE_SCREEN_CAPTURE_FAILURE: |
| 633 request_info->requestFailedUASpecific("ScreenCaptureError"); | 636 request_info->requestFailedUASpecific("ScreenCaptureError"); |
| 634 break; | 637 break; |
| 635 case MEDIA_DEVICE_CAPTURE_FAILURE: | 638 case MEDIA_DEVICE_CAPTURE_FAILURE: |
| 636 request_info->requestFailedUASpecific("DeviceCaptureError"); | 639 request_info->requestFailedUASpecific("DeviceCaptureError"); |
| 637 break; | 640 break; |
| 641 default: | |
| 642 NOTREACHED(); | |
| 643 } | |
| 644 } | |
| 645 | |
| 646 void MediaStreamImpl::GetUserMediaRequestTrackStartedFailed( | |
| 647 blink::WebUserMediaRequest* request_info, | |
| 648 MediaStreamRequestResult result, | |
| 649 const blink::WebString& result_name) { | |
| 650 switch (result) { | |
| 651 case MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED: | |
| 652 request_info->requestFailedConstraint(result_name); | |
| 653 break; | |
| 638 case MEDIA_DEVICE_TRACK_START_FAILURE: | 654 case MEDIA_DEVICE_TRACK_START_FAILURE: |
| 639 request_info->requestFailedUASpecific("TrackStartError"); | 655 request_info->requestFailedUASpecific("TrackStartError"); |
| 640 break; | 656 break; |
| 641 default: | 657 default: |
| 642 request_info->requestFailed(); | 658 NOTREACHED(); |
|
miu
2014/07/31 19:30:10
ditto: call request_info->requestFailed() after NO
jiajia.qin
2014/08/01 05:25:33
Done.
| |
| 643 break; | |
| 644 } | 659 } |
| 645 } | 660 } |
| 646 | 661 |
| 647 void MediaStreamImpl::EnumerateDevicesSucceded( | 662 void MediaStreamImpl::EnumerateDevicesSucceded( |
| 648 blink::WebMediaDevicesRequest* request, | 663 blink::WebMediaDevicesRequest* request, |
| 649 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { | 664 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { |
| 650 request->requestSucceeded(devices); | 665 request->requestSucceeded(devices); |
| 651 } | 666 } |
| 652 | 667 |
| 653 const blink::WebMediaStreamSource* MediaStreamImpl::FindLocalSource( | 668 const blink::WebMediaStreamSource* MediaStreamImpl::FindLocalSource( |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 855 } | 870 } |
| 856 | 871 |
| 857 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted( | 872 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted( |
| 858 const ResourcesReady& callback) { | 873 const ResourcesReady& callback) { |
| 859 DCHECK(ready_callback_.is_null()); | 874 DCHECK(ready_callback_.is_null()); |
| 860 ready_callback_ = callback; | 875 ready_callback_ = callback; |
| 861 CheckAllTracksStarted(); | 876 CheckAllTracksStarted(); |
| 862 } | 877 } |
| 863 | 878 |
| 864 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted( | 879 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted( |
| 865 MediaStreamSource* source, bool success) { | 880 MediaStreamSource* source, |
| 866 DVLOG(1) << "OnTrackStarted result " << success; | 881 MediaStreamRequestResult result, |
| 882 const blink::WebString& result_name) { | |
| 883 DVLOG(1) << "OnTrackStarted result " << result; | |
| 867 std::vector<MediaStreamSource*>::iterator it = | 884 std::vector<MediaStreamSource*>::iterator it = |
| 868 std::find(sources_waiting_for_callback_.begin(), | 885 std::find(sources_waiting_for_callback_.begin(), |
| 869 sources_waiting_for_callback_.end(), | 886 sources_waiting_for_callback_.end(), |
| 870 source); | 887 source); |
| 871 DCHECK(it != sources_waiting_for_callback_.end()); | 888 DCHECK(it != sources_waiting_for_callback_.end()); |
| 872 sources_waiting_for_callback_.erase(it); | 889 sources_waiting_for_callback_.erase(it); |
| 873 // All tracks must be started successfully. Otherwise the request is a | 890 // All tracks must be started successfully. Otherwise the request is a |
| 874 // failure. | 891 // failure. |
| 875 if (!success) | 892 if (result != MEDIA_DEVICE_OK) |
| 876 request_failed_ = true; | 893 request_failed_ = true; |
| 877 CheckAllTracksStarted(); | 894 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) { |
| 895 ready_callback_.Run(this, result, result_name); | |
| 896 } | |
| 878 } | 897 } |
| 879 | 898 |
| 880 void MediaStreamImpl::UserMediaRequestInfo::CheckAllTracksStarted() { | 899 void MediaStreamImpl::UserMediaRequestInfo::CheckAllTracksStarted() { |
| 881 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) { | 900 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) { |
| 882 ready_callback_.Run( | 901 ready_callback_.Run( |
| 883 this, | 902 this, |
| 884 request_failed_ ? MEDIA_DEVICE_TRACK_START_FAILURE : MEDIA_DEVICE_OK); | 903 request_failed_ ? MEDIA_DEVICE_TRACK_START_FAILURE : MEDIA_DEVICE_OK, |
| 904 ""); | |
| 885 } | 905 } |
| 886 } | 906 } |
| 887 | 907 |
| 888 bool MediaStreamImpl::UserMediaRequestInfo::IsSourceUsed( | 908 bool MediaStreamImpl::UserMediaRequestInfo::IsSourceUsed( |
| 889 const blink::WebMediaStreamSource& source) const { | 909 const blink::WebMediaStreamSource& source) const { |
| 890 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it = | 910 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it = |
| 891 sources_.begin(); | 911 sources_.begin(); |
| 892 source_it != sources_.end(); ++source_it) { | 912 source_it != sources_.end(); ++source_it) { |
| 893 if (source_it->id() == source.id()) | 913 if (source_it->id() == source.id()) |
| 894 return true; | 914 return true; |
| 895 } | 915 } |
| 896 return false; | 916 return false; |
| 897 } | 917 } |
| 898 | 918 |
| 899 void MediaStreamImpl::UserMediaRequestInfo::RemoveSource( | 919 void MediaStreamImpl::UserMediaRequestInfo::RemoveSource( |
| 900 const blink::WebMediaStreamSource& source) { | 920 const blink::WebMediaStreamSource& source) { |
| 901 for (std::vector<blink::WebMediaStreamSource>::iterator it = | 921 for (std::vector<blink::WebMediaStreamSource>::iterator it = |
| 902 sources_.begin(); | 922 sources_.begin(); |
| 903 it != sources_.end(); ++it) { | 923 it != sources_.end(); ++it) { |
| 904 if (source.id() == it->id()) { | 924 if (source.id() == it->id()) { |
| 905 sources_.erase(it); | 925 sources_.erase(it); |
| 906 return; | 926 return; |
| 907 } | 927 } |
| 908 } | 928 } |
| 909 } | 929 } |
| 910 | 930 |
| 911 } // namespace content | 931 } // namespace content |
| OLD | NEW |