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/user_media_client_impl.h" | 5 #include "content/renderer/media/user_media_client_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" |
11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "content/public/renderer/render_frame.h" | 15 #include "content/public/renderer/render_frame.h" |
16 #include "content/renderer/media/media_stream.h" | 16 #include "content/renderer/media/media_stream.h" |
17 #include "content/renderer/media/media_stream_audio_source.h" | 17 #include "content/renderer/media/media_stream_audio_source.h" |
18 #include "content/renderer/media/media_stream_dispatcher.h" | 18 #include "content/renderer/media/media_stream_dispatcher.h" |
19 #include "content/renderer/media/media_stream_video_capturer_source.h" | 19 #include "content/renderer/media/media_stream_video_capturer_source.h" |
20 #include "content/renderer/media/media_stream_video_track.h" | 20 #include "content/renderer/media/media_stream_video_track.h" |
21 #include "content/renderer/media/peer_connection_tracker.h" | 21 #include "content/renderer/media/peer_connection_tracker.h" |
22 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" | 22 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" |
23 #include "content/renderer/media/webrtc_audio_capturer.h" | 23 #include "content/renderer/media/webrtc_audio_capturer.h" |
24 #include "content/renderer/media/webrtc_logging.h" | 24 #include "content/renderer/media/webrtc_logging.h" |
25 #include "content/renderer/media/webrtc_uma_histograms.h" | 25 #include "content/renderer/media/webrtc_uma_histograms.h" |
26 #include "content/renderer/render_thread_impl.h" | 26 #include "content/renderer/render_thread_impl.h" |
27 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 27 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
28 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" | 28 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" |
29 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 29 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 30 #include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h
" |
30 #include "third_party/WebKit/public/web/WebDocument.h" | 31 #include "third_party/WebKit/public/web/WebDocument.h" |
31 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 32 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
32 | 33 |
33 namespace content { | 34 namespace content { |
34 namespace { | 35 namespace { |
35 | 36 |
36 void CopyStreamConstraints(const blink::WebMediaConstraints& constraints, | 37 void CopyStreamConstraints(const blink::WebMediaConstraints& constraints, |
37 StreamOptions::Constraints* mandatory, | 38 StreamOptions::Constraints* mandatory, |
38 StreamOptions::Constraints* optional) { | 39 StreamOptions::Constraints* optional) { |
39 blink::WebVector<blink::WebMediaConstraint> mandatory_constraints; | 40 blink::WebVector<blink::WebMediaConstraint> mandatory_constraints; |
(...skipping 15 matching lines...) Expand all Loading... |
55 | 56 |
56 static int g_next_request_id = 0; | 57 static int g_next_request_id = 0; |
57 | 58 |
58 } // namespace | 59 } // namespace |
59 | 60 |
60 struct UserMediaClientImpl::MediaDevicesRequestInfo { | 61 struct UserMediaClientImpl::MediaDevicesRequestInfo { |
61 MediaDevicesRequestInfo(const blink::WebMediaDevicesRequest& request, | 62 MediaDevicesRequestInfo(const blink::WebMediaDevicesRequest& request, |
62 int audio_input_request_id, | 63 int audio_input_request_id, |
63 int video_input_request_id, | 64 int video_input_request_id, |
64 int audio_output_request_id) | 65 int audio_output_request_id) |
65 : request(request), | 66 : media_devices_request(request), |
66 audio_input_request_id(audio_input_request_id), | 67 audio_input_request_id(audio_input_request_id), |
67 video_input_request_id(video_input_request_id), | 68 video_input_request_id(video_input_request_id), |
68 audio_output_request_id(audio_output_request_id), | 69 audio_output_request_id(audio_output_request_id), |
69 has_audio_input_returned(false), | 70 has_audio_input_returned(false), |
70 has_video_input_returned(false), | 71 has_video_input_returned(false), |
71 has_audio_output_returned(false) {} | 72 has_audio_output_returned(false) {} |
72 | 73 |
73 blink::WebMediaDevicesRequest request; | 74 MediaDevicesRequestInfo( |
| 75 const blink::WebMediaStreamTrackSourcesRequest& request, |
| 76 int audio_input_request_id, |
| 77 int video_input_request_id) |
| 78 : sources_request(request), |
| 79 audio_input_request_id(audio_input_request_id), |
| 80 video_input_request_id(video_input_request_id), |
| 81 audio_output_request_id(-1), |
| 82 has_audio_input_returned(false), |
| 83 has_video_input_returned(false), |
| 84 has_audio_output_returned(false) {} |
| 85 |
| 86 bool IsSourcesRequest() { |
| 87 // We can't check isNull() on |media_devices_request| and |sources_request|, |
| 88 // because in unit tests they will always be null. |
| 89 return audio_output_request_id == -1; |
| 90 } |
| 91 |
| 92 blink::WebMediaDevicesRequest media_devices_request; |
| 93 blink::WebMediaStreamTrackSourcesRequest sources_request; |
74 int audio_input_request_id; | 94 int audio_input_request_id; |
75 int video_input_request_id; | 95 int video_input_request_id; |
76 int audio_output_request_id; | 96 int audio_output_request_id; |
77 bool has_audio_input_returned; | 97 bool has_audio_input_returned; |
78 bool has_video_input_returned; | 98 bool has_video_input_returned; |
79 bool has_audio_output_returned; | 99 bool has_audio_output_returned; |
80 StreamDeviceInfoArray audio_input_devices; | 100 StreamDeviceInfoArray audio_input_devices; |
81 StreamDeviceInfoArray video_input_devices; | 101 StreamDeviceInfoArray video_input_devices; |
82 StreamDeviceInfoArray audio_output_devices; | 102 StreamDeviceInfoArray audio_output_devices; |
83 }; | 103 }; |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 void UserMediaClientImpl::cancelMediaDevicesRequest( | 273 void UserMediaClientImpl::cancelMediaDevicesRequest( |
254 const blink::WebMediaDevicesRequest& media_devices_request) { | 274 const blink::WebMediaDevicesRequest& media_devices_request) { |
255 DCHECK(CalledOnValidThread()); | 275 DCHECK(CalledOnValidThread()); |
256 MediaDevicesRequestInfo* request = | 276 MediaDevicesRequestInfo* request = |
257 FindMediaDevicesRequestInfo(media_devices_request); | 277 FindMediaDevicesRequestInfo(media_devices_request); |
258 if (!request) | 278 if (!request) |
259 return; | 279 return; |
260 CancelAndDeleteMediaDevicesRequest(request); | 280 CancelAndDeleteMediaDevicesRequest(request); |
261 } | 281 } |
262 | 282 |
| 283 void UserMediaClientImpl::requestSources( |
| 284 const blink::WebMediaStreamTrackSourcesRequest& sources_request) { |
| 285 // We don't call UpdateWebRTCMethodCount() here to track the API count in UMA |
| 286 // stats. This is instead counted in MediaStreamTrack::getSources in blink. |
| 287 DCHECK(CalledOnValidThread()); |
| 288 |
| 289 int audio_input_request_id = g_next_request_id++; |
| 290 int video_input_request_id = g_next_request_id++; |
| 291 |
| 292 // |sources_request| can't be mocked, so in tests it will be empty (the |
| 293 // underlying pointer is null). In order to use this function in a test we |
| 294 // need to check if it isNull. |
| 295 GURL security_origin; |
| 296 if (!sources_request.isNull()) |
| 297 security_origin = GURL(sources_request.origin().utf8()); |
| 298 |
| 299 DVLOG(1) << "UserMediaClientImpl::requestSources(" |
| 300 << audio_input_request_id |
| 301 << ", " << video_input_request_id |
| 302 << ", " << security_origin.spec() << ")"; |
| 303 |
| 304 media_devices_requests_.push_back(new MediaDevicesRequestInfo( |
| 305 sources_request, |
| 306 audio_input_request_id, |
| 307 video_input_request_id)); |
| 308 |
| 309 media_stream_dispatcher_->EnumerateDevices( |
| 310 audio_input_request_id, |
| 311 weak_factory_.GetWeakPtr(), |
| 312 MEDIA_DEVICE_AUDIO_CAPTURE, |
| 313 security_origin); |
| 314 |
| 315 media_stream_dispatcher_->EnumerateDevices( |
| 316 video_input_request_id, |
| 317 weak_factory_.GetWeakPtr(), |
| 318 MEDIA_DEVICE_VIDEO_CAPTURE, |
| 319 security_origin); |
| 320 } |
| 321 |
263 // Callback from MediaStreamDispatcher. | 322 // Callback from MediaStreamDispatcher. |
264 // The requested stream have been generated by the MediaStreamDispatcher. | 323 // The requested stream have been generated by the MediaStreamDispatcher. |
265 void UserMediaClientImpl::OnStreamGenerated( | 324 void UserMediaClientImpl::OnStreamGenerated( |
266 int request_id, | 325 int request_id, |
267 const std::string& label, | 326 const std::string& label, |
268 const StreamDeviceInfoArray& audio_array, | 327 const StreamDeviceInfoArray& audio_array, |
269 const StreamDeviceInfoArray& video_array) { | 328 const StreamDeviceInfoArray& video_array) { |
270 DCHECK(CalledOnValidThread()); | 329 DCHECK(CalledOnValidThread()); |
271 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerated stream:" << label; | 330 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerated stream:" << label; |
272 | 331 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 media_stream_dispatcher_->StopStreamDevice(*device_it); | 388 media_stream_dispatcher_->StopStreamDevice(*device_it); |
330 } | 389 } |
331 | 390 |
332 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); | 391 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); |
333 device_it != video_array.end(); ++device_it) { | 392 device_it != video_array.end(); ++device_it) { |
334 if (!FindLocalSource(*device_it)) | 393 if (!FindLocalSource(*device_it)) |
335 media_stream_dispatcher_->StopStreamDevice(*device_it); | 394 media_stream_dispatcher_->StopStreamDevice(*device_it); |
336 } | 395 } |
337 } | 396 } |
338 | 397 |
| 398 void UserMediaClientImpl::FinalizeEnumerateDevices( |
| 399 MediaDevicesRequestInfo* request) { |
| 400 // All devices are ready for copying. We use a hashed audio output device id |
| 401 // as the group id for input and output audio devices. If an input device |
| 402 // doesn't have an associated output device, we use the input device's own id. |
| 403 // We don't support group id for video devices, that's left empty. |
| 404 blink::WebVector<blink::WebMediaDeviceInfo> |
| 405 devices(request->audio_input_devices.size() + |
| 406 request->video_input_devices.size() + |
| 407 request->audio_output_devices.size()); |
| 408 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { |
| 409 const MediaStreamDevice& device = request->audio_input_devices[i].device; |
| 410 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); |
| 411 std::string group_id = base::UintToString(base::Hash( |
| 412 !device.matched_output_device_id.empty() ? |
| 413 device.matched_output_device_id : |
| 414 device.id)); |
| 415 devices[i].initialize( |
| 416 blink::WebString::fromUTF8(device.id), |
| 417 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, |
| 418 blink::WebString::fromUTF8(device.name), |
| 419 blink::WebString::fromUTF8(group_id)); |
| 420 } |
| 421 size_t offset = request->audio_input_devices.size(); |
| 422 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { |
| 423 const MediaStreamDevice& device = request->video_input_devices[i].device; |
| 424 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); |
| 425 devices[offset + i].initialize( |
| 426 blink::WebString::fromUTF8(device.id), |
| 427 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, |
| 428 blink::WebString::fromUTF8(device.name), |
| 429 blink::WebString()); |
| 430 } |
| 431 offset += request->video_input_devices.size(); |
| 432 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { |
| 433 const MediaStreamDevice& device = request->audio_output_devices[i].device; |
| 434 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); |
| 435 devices[offset + i].initialize( |
| 436 blink::WebString::fromUTF8(device.id), |
| 437 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, |
| 438 blink::WebString::fromUTF8(device.name), |
| 439 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); |
| 440 } |
| 441 |
| 442 EnumerateDevicesSucceded(&request->media_devices_request, devices); |
| 443 } |
| 444 |
| 445 void UserMediaClientImpl::FinalizeEnumerateSources( |
| 446 MediaDevicesRequestInfo* request) { |
| 447 blink::WebVector<blink::WebSourceInfo> |
| 448 sources(request->audio_input_devices.size() + |
| 449 request->video_input_devices.size()); |
| 450 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { |
| 451 const MediaStreamDevice& device = request->audio_input_devices[i].device; |
| 452 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); |
| 453 std::string group_id = base::UintToString(base::Hash( |
| 454 !device.matched_output_device_id.empty() ? |
| 455 device.matched_output_device_id : |
| 456 device.id)); |
| 457 sources[i].initialize(blink::WebString::fromUTF8(device.id), |
| 458 blink::WebSourceInfo::SourceKindAudio, |
| 459 blink::WebString::fromUTF8(device.name), |
| 460 blink::WebSourceInfo::VideoFacingModeNone); |
| 461 } |
| 462 size_t offset = request->audio_input_devices.size(); |
| 463 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { |
| 464 const MediaStreamDevice& device = request->video_input_devices[i].device; |
| 465 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); |
| 466 blink::WebSourceInfo::VideoFacingMode video_facing; |
| 467 switch (device.video_facing) { |
| 468 case MEDIA_VIDEO_FACING_USER: |
| 469 video_facing = blink::WebSourceInfo::VideoFacingModeUser; |
| 470 break; |
| 471 case MEDIA_VIDEO_FACING_ENVIRONMENT: |
| 472 video_facing = blink::WebSourceInfo::VideoFacingModeEnvironment; |
| 473 break; |
| 474 default: |
| 475 video_facing = blink::WebSourceInfo::VideoFacingModeNone; |
| 476 } |
| 477 sources[offset + i].initialize(blink::WebString::fromUTF8(device.id), |
| 478 blink::WebSourceInfo::SourceKindVideo, |
| 479 blink::WebString::fromUTF8(device.name), |
| 480 video_facing); |
| 481 } |
| 482 |
| 483 EnumerateSourcesSucceded(&request->sources_request, sources); |
| 484 } |
| 485 |
339 // Callback from MediaStreamDispatcher. | 486 // Callback from MediaStreamDispatcher. |
340 // The requested stream failed to be generated. | 487 // The requested stream failed to be generated. |
341 void UserMediaClientImpl::OnStreamGenerationFailed( | 488 void UserMediaClientImpl::OnStreamGenerationFailed( |
342 int request_id, | 489 int request_id, |
343 MediaStreamRequestResult result) { | 490 MediaStreamRequestResult result) { |
344 DCHECK(CalledOnValidThread()); | 491 DCHECK(CalledOnValidThread()); |
345 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerationFailed(" | 492 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerationFailed(" |
346 << request_id << ")"; | 493 << request_id << ")"; |
347 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); | 494 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); |
348 if (!request_info) { | 495 if (!request_info) { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 request->video_input_devices = device_array; | 678 request->video_input_devices = device_array; |
532 } else { | 679 } else { |
533 DCHECK_EQ(request->audio_output_request_id, request_id); | 680 DCHECK_EQ(request->audio_output_request_id, request_id); |
534 request->has_audio_output_returned = true; | 681 request->has_audio_output_returned = true; |
535 DCHECK(request->audio_output_devices.empty()); | 682 DCHECK(request->audio_output_devices.empty()); |
536 request->audio_output_devices = device_array; | 683 request->audio_output_devices = device_array; |
537 } | 684 } |
538 | 685 |
539 if (!request->has_audio_input_returned || | 686 if (!request->has_audio_input_returned || |
540 !request->has_video_input_returned || | 687 !request->has_video_input_returned || |
541 !request->has_audio_output_returned) { | 688 (!request->IsSourcesRequest() && !request->has_audio_output_returned)) { |
542 // Wait for the rest of the devices to complete. | 689 // Wait for the rest of the devices to complete. |
543 return; | 690 return; |
544 } | 691 } |
545 | 692 |
546 // All devices are ready for copying. We use a hashed audio output device id | 693 if (request->IsSourcesRequest()) |
547 // as the group id for input and output audio devices. If an input device | 694 FinalizeEnumerateSources(request); |
548 // doesn't have an associated output device, we use the input device's own id. | 695 else |
549 // We don't support group id for video devices, that's left empty. | 696 FinalizeEnumerateDevices(request); |
550 blink::WebVector<blink::WebMediaDeviceInfo> | |
551 devices(request->audio_input_devices.size() + | |
552 request->video_input_devices.size() + | |
553 request->audio_output_devices.size()); | |
554 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { | |
555 const MediaStreamDevice& device = request->audio_input_devices[i].device; | |
556 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); | |
557 std::string group_id = base::UintToString(base::Hash( | |
558 !device.matched_output_device_id.empty() ? | |
559 device.matched_output_device_id : | |
560 device.id)); | |
561 devices[i].initialize( | |
562 blink::WebString::fromUTF8(device.id), | |
563 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, | |
564 blink::WebString::fromUTF8(device.name), | |
565 blink::WebString::fromUTF8(group_id)); | |
566 } | |
567 size_t offset = request->audio_input_devices.size(); | |
568 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { | |
569 const MediaStreamDevice& device = request->video_input_devices[i].device; | |
570 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); | |
571 devices[offset + i].initialize( | |
572 blink::WebString::fromUTF8(device.id), | |
573 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, | |
574 blink::WebString::fromUTF8(device.name), | |
575 blink::WebString()); | |
576 } | |
577 offset += request->video_input_devices.size(); | |
578 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { | |
579 const MediaStreamDevice& device = request->audio_output_devices[i].device; | |
580 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); | |
581 devices[offset + i].initialize( | |
582 blink::WebString::fromUTF8(device.id), | |
583 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, | |
584 blink::WebString::fromUTF8(device.name), | |
585 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); | |
586 } | |
587 | 697 |
588 EnumerateDevicesSucceded(&request->request, devices); | |
589 CancelAndDeleteMediaDevicesRequest(request); | 698 CancelAndDeleteMediaDevicesRequest(request); |
590 } | 699 } |
591 | 700 |
592 void UserMediaClientImpl::OnDeviceOpened( | 701 void UserMediaClientImpl::OnDeviceOpened( |
593 int request_id, | 702 int request_id, |
594 const std::string& label, | 703 const std::string& label, |
595 const StreamDeviceInfo& video_device) { | 704 const StreamDeviceInfo& video_device) { |
596 DVLOG(1) << "UserMediaClientImpl::OnDeviceOpened(" | 705 DVLOG(1) << "UserMediaClientImpl::OnDeviceOpened(" |
597 << request_id << ", " << label << ")"; | 706 << request_id << ", " << label << ")"; |
598 NOTIMPLEMENTED(); | 707 NOTIMPLEMENTED(); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 break; | 777 break; |
669 } | 778 } |
670 } | 779 } |
671 | 780 |
672 void UserMediaClientImpl::EnumerateDevicesSucceded( | 781 void UserMediaClientImpl::EnumerateDevicesSucceded( |
673 blink::WebMediaDevicesRequest* request, | 782 blink::WebMediaDevicesRequest* request, |
674 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { | 783 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { |
675 request->requestSucceeded(devices); | 784 request->requestSucceeded(devices); |
676 } | 785 } |
677 | 786 |
| 787 void UserMediaClientImpl::EnumerateSourcesSucceded( |
| 788 blink::WebMediaStreamTrackSourcesRequest* request, |
| 789 blink::WebVector<blink::WebSourceInfo>& sources) { |
| 790 request->requestSucceeded(sources); |
| 791 } |
| 792 |
678 const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource( | 793 const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource( |
679 const StreamDeviceInfo& device) const { | 794 const StreamDeviceInfo& device) const { |
680 for (LocalStreamSources::const_iterator it = local_sources_.begin(); | 795 for (LocalStreamSources::const_iterator it = local_sources_.begin(); |
681 it != local_sources_.end(); ++it) { | 796 it != local_sources_.end(); ++it) { |
682 MediaStreamSource* const source = | 797 MediaStreamSource* const source = |
683 static_cast<MediaStreamSource*>(it->extraData()); | 798 static_cast<MediaStreamSource*>(it->extraData()); |
684 const StreamDeviceInfo& active_device = source->device_info(); | 799 const StreamDeviceInfo& active_device = source->device_info(); |
685 if (active_device.device.id == device.device.id && | 800 if (active_device.device.id == device.device.id && |
686 active_device.device.type == device.device.type && | 801 active_device.device.type == device.device.type && |
687 active_device.session_id == device.session_id) { | 802 active_device.session_id == device.session_id) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
760 } | 875 } |
761 } | 876 } |
762 return NULL; | 877 return NULL; |
763 } | 878 } |
764 | 879 |
765 UserMediaClientImpl::MediaDevicesRequestInfo* | 880 UserMediaClientImpl::MediaDevicesRequestInfo* |
766 UserMediaClientImpl::FindMediaDevicesRequestInfo( | 881 UserMediaClientImpl::FindMediaDevicesRequestInfo( |
767 const blink::WebMediaDevicesRequest& request) { | 882 const blink::WebMediaDevicesRequest& request) { |
768 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); | 883 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); |
769 for (; it != media_devices_requests_.end(); ++it) { | 884 for (; it != media_devices_requests_.end(); ++it) { |
770 if ((*it)->request == request) | 885 if ((*it)->media_devices_request == request) |
771 return (*it); | 886 return (*it); |
772 } | 887 } |
773 return NULL; | 888 return NULL; |
774 } | 889 } |
775 | 890 |
776 void UserMediaClientImpl::CancelAndDeleteMediaDevicesRequest( | 891 void UserMediaClientImpl::CancelAndDeleteMediaDevicesRequest( |
777 MediaDevicesRequestInfo* request) { | 892 MediaDevicesRequestInfo* request) { |
778 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); | 893 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); |
779 for (; it != media_devices_requests_.end(); ++it) { | 894 for (; it != media_devices_requests_.end(); ++it) { |
780 if ((*it) == request) { | 895 if ((*it) == request) { |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
946 return; | 1061 return; |
947 } | 1062 } |
948 } | 1063 } |
949 } | 1064 } |
950 | 1065 |
951 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { | 1066 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { |
952 return !sources_waiting_for_callback_.empty(); | 1067 return !sources_waiting_for_callback_.empty(); |
953 } | 1068 } |
954 | 1069 |
955 } // namespace content | 1070 } // namespace content |
OLD | NEW |