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

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: 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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_impl.h ('k') | content/renderer/media/media_stream_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698