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 // This is counted for UMA stats in MediaStreamTrack::getSources in blink. | |
perkj_chrome
2014/09/12 12:35:33
I don't understand this comment and I am not sure
Henrik Grunell
2014/09/12 12:59:31
Another shot at explaining.
| |
286 DCHECK(CalledOnValidThread()); | |
287 | |
288 int audio_input_request_id = g_next_request_id++; | |
289 int video_input_request_id = g_next_request_id++; | |
290 | |
291 // |sources_request| can't be mocked, so in tests it will be empty (the | |
292 // underlying pointer is null). In order to use this function in a test we | |
293 // need to check if it isNull. | |
294 GURL security_origin; | |
295 if (!sources_request.isNull()) | |
296 security_origin = GURL(sources_request.origin().utf8()); | |
297 | |
298 DVLOG(1) << "UserMediaClientImpl::requestSources(" | |
299 << audio_input_request_id | |
300 << ", " << video_input_request_id | |
301 << ", " << security_origin.spec() << ")"; | |
302 | |
303 media_devices_requests_.push_back(new MediaDevicesRequestInfo( | |
304 sources_request, | |
305 audio_input_request_id, | |
306 video_input_request_id)); | |
307 | |
308 media_stream_dispatcher_->EnumerateDevices( | |
309 audio_input_request_id, | |
310 weak_factory_.GetWeakPtr(), | |
311 MEDIA_DEVICE_AUDIO_CAPTURE, | |
312 security_origin); | |
313 | |
314 media_stream_dispatcher_->EnumerateDevices( | |
315 video_input_request_id, | |
316 weak_factory_.GetWeakPtr(), | |
317 MEDIA_DEVICE_VIDEO_CAPTURE, | |
318 security_origin); | |
319 } | |
320 | |
263 // Callback from MediaStreamDispatcher. | 321 // Callback from MediaStreamDispatcher. |
264 // The requested stream have been generated by the MediaStreamDispatcher. | 322 // The requested stream have been generated by the MediaStreamDispatcher. |
265 void UserMediaClientImpl::OnStreamGenerated( | 323 void UserMediaClientImpl::OnStreamGenerated( |
266 int request_id, | 324 int request_id, |
267 const std::string& label, | 325 const std::string& label, |
268 const StreamDeviceInfoArray& audio_array, | 326 const StreamDeviceInfoArray& audio_array, |
269 const StreamDeviceInfoArray& video_array) { | 327 const StreamDeviceInfoArray& video_array) { |
270 DCHECK(CalledOnValidThread()); | 328 DCHECK(CalledOnValidThread()); |
271 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerated stream:" << label; | 329 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerated stream:" << label; |
272 | 330 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
329 media_stream_dispatcher_->StopStreamDevice(*device_it); | 387 media_stream_dispatcher_->StopStreamDevice(*device_it); |
330 } | 388 } |
331 | 389 |
332 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); | 390 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); |
333 device_it != video_array.end(); ++device_it) { | 391 device_it != video_array.end(); ++device_it) { |
334 if (!FindLocalSource(*device_it)) | 392 if (!FindLocalSource(*device_it)) |
335 media_stream_dispatcher_->StopStreamDevice(*device_it); | 393 media_stream_dispatcher_->StopStreamDevice(*device_it); |
336 } | 394 } |
337 } | 395 } |
338 | 396 |
397 void UserMediaClientImpl::FinalizeEnumerateDevices( | |
398 MediaDevicesRequestInfo* request) { | |
399 // All devices are ready for copying. We use a hashed audio output device id | |
400 // as the group id for input and output audio devices. If an input device | |
401 // doesn't have an associated output device, we use the input device's own id. | |
402 // We don't support group id for video devices, that's left empty. | |
403 blink::WebVector<blink::WebMediaDeviceInfo> | |
404 devices(request->audio_input_devices.size() + | |
405 request->video_input_devices.size() + | |
406 request->audio_output_devices.size()); | |
407 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { | |
408 const MediaStreamDevice& device = request->audio_input_devices[i].device; | |
409 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); | |
410 std::string group_id = base::UintToString(base::Hash( | |
411 !device.matched_output_device_id.empty() ? | |
412 device.matched_output_device_id : | |
413 device.id)); | |
414 devices[i].initialize( | |
415 blink::WebString::fromUTF8(device.id), | |
416 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, | |
417 blink::WebString::fromUTF8(device.name), | |
418 blink::WebString::fromUTF8(group_id)); | |
419 } | |
420 size_t offset = request->audio_input_devices.size(); | |
421 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { | |
422 const MediaStreamDevice& device = request->video_input_devices[i].device; | |
423 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); | |
424 devices[offset + i].initialize( | |
425 blink::WebString::fromUTF8(device.id), | |
426 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, | |
427 blink::WebString::fromUTF8(device.name), | |
428 blink::WebString()); | |
429 } | |
430 offset += request->video_input_devices.size(); | |
431 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { | |
432 const MediaStreamDevice& device = request->audio_output_devices[i].device; | |
433 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); | |
434 devices[offset + i].initialize( | |
435 blink::WebString::fromUTF8(device.id), | |
436 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, | |
437 blink::WebString::fromUTF8(device.name), | |
438 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); | |
439 } | |
440 | |
441 EnumerateDevicesSucceded(&request->media_devices_request, devices); | |
442 CancelAndDeleteMediaDevicesRequest(request); | |
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 CancelAndDeleteMediaDevicesRequest(request); | |
485 } | |
486 | |
339 // Callback from MediaStreamDispatcher. | 487 // Callback from MediaStreamDispatcher. |
340 // The requested stream failed to be generated. | 488 // The requested stream failed to be generated. |
341 void UserMediaClientImpl::OnStreamGenerationFailed( | 489 void UserMediaClientImpl::OnStreamGenerationFailed( |
342 int request_id, | 490 int request_id, |
343 MediaStreamRequestResult result) { | 491 MediaStreamRequestResult result) { |
344 DCHECK(CalledOnValidThread()); | 492 DCHECK(CalledOnValidThread()); |
345 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerationFailed(" | 493 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerationFailed(" |
346 << request_id << ")"; | 494 << request_id << ")"; |
347 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); | 495 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); |
348 if (!request_info) { | 496 if (!request_info) { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
531 request->video_input_devices = device_array; | 679 request->video_input_devices = device_array; |
532 } else { | 680 } else { |
533 DCHECK_EQ(request->audio_output_request_id, request_id); | 681 DCHECK_EQ(request->audio_output_request_id, request_id); |
534 request->has_audio_output_returned = true; | 682 request->has_audio_output_returned = true; |
535 DCHECK(request->audio_output_devices.empty()); | 683 DCHECK(request->audio_output_devices.empty()); |
536 request->audio_output_devices = device_array; | 684 request->audio_output_devices = device_array; |
537 } | 685 } |
538 | 686 |
539 if (!request->has_audio_input_returned || | 687 if (!request->has_audio_input_returned || |
540 !request->has_video_input_returned || | 688 !request->has_video_input_returned || |
541 !request->has_audio_output_returned) { | 689 (!request->IsSourcesRequest() && !request->has_audio_output_returned)) { |
542 // Wait for the rest of the devices to complete. | 690 // Wait for the rest of the devices to complete. |
543 return; | 691 return; |
544 } | 692 } |
545 | 693 |
546 // All devices are ready for copying. We use a hashed audio output device id | 694 if (request->IsSourcesRequest()) |
547 // as the group id for input and output audio devices. If an input device | 695 FinalizeEnumerateSources(request); |
548 // doesn't have an associated output device, we use the input device's own id. | 696 else |
549 // We don't support group id for video devices, that's left empty. | 697 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 | |
588 EnumerateDevicesSucceded(&request->request, devices); | |
589 CancelAndDeleteMediaDevicesRequest(request); | |
590 } | 698 } |
591 | 699 |
592 void UserMediaClientImpl::OnDeviceOpened( | 700 void UserMediaClientImpl::OnDeviceOpened( |
593 int request_id, | 701 int request_id, |
594 const std::string& label, | 702 const std::string& label, |
595 const StreamDeviceInfo& video_device) { | 703 const StreamDeviceInfo& video_device) { |
596 DVLOG(1) << "UserMediaClientImpl::OnDeviceOpened(" | 704 DVLOG(1) << "UserMediaClientImpl::OnDeviceOpened(" |
597 << request_id << ", " << label << ")"; | 705 << request_id << ", " << label << ")"; |
598 NOTIMPLEMENTED(); | 706 NOTIMPLEMENTED(); |
599 } | 707 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
668 break; | 776 break; |
669 } | 777 } |
670 } | 778 } |
671 | 779 |
672 void UserMediaClientImpl::EnumerateDevicesSucceded( | 780 void UserMediaClientImpl::EnumerateDevicesSucceded( |
673 blink::WebMediaDevicesRequest* request, | 781 blink::WebMediaDevicesRequest* request, |
674 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { | 782 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { |
675 request->requestSucceeded(devices); | 783 request->requestSucceeded(devices); |
676 } | 784 } |
677 | 785 |
786 void UserMediaClientImpl::EnumerateSourcesSucceded( | |
787 blink::WebMediaStreamTrackSourcesRequest* request, | |
788 blink::WebVector<blink::WebSourceInfo>& sources) { | |
789 request->requestSucceeded(sources); | |
790 } | |
791 | |
678 const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource( | 792 const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource( |
679 const StreamDeviceInfo& device) const { | 793 const StreamDeviceInfo& device) const { |
680 for (LocalStreamSources::const_iterator it = local_sources_.begin(); | 794 for (LocalStreamSources::const_iterator it = local_sources_.begin(); |
681 it != local_sources_.end(); ++it) { | 795 it != local_sources_.end(); ++it) { |
682 MediaStreamSource* const source = | 796 MediaStreamSource* const source = |
683 static_cast<MediaStreamSource*>(it->extraData()); | 797 static_cast<MediaStreamSource*>(it->extraData()); |
684 const StreamDeviceInfo& active_device = source->device_info(); | 798 const StreamDeviceInfo& active_device = source->device_info(); |
685 if (active_device.device.id == device.device.id && | 799 if (active_device.device.id == device.device.id && |
686 active_device.device.type == device.device.type && | 800 active_device.device.type == device.device.type && |
687 active_device.session_id == device.session_id) { | 801 active_device.session_id == device.session_id) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
760 } | 874 } |
761 } | 875 } |
762 return NULL; | 876 return NULL; |
763 } | 877 } |
764 | 878 |
765 UserMediaClientImpl::MediaDevicesRequestInfo* | 879 UserMediaClientImpl::MediaDevicesRequestInfo* |
766 UserMediaClientImpl::FindMediaDevicesRequestInfo( | 880 UserMediaClientImpl::FindMediaDevicesRequestInfo( |
767 const blink::WebMediaDevicesRequest& request) { | 881 const blink::WebMediaDevicesRequest& request) { |
768 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); | 882 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); |
769 for (; it != media_devices_requests_.end(); ++it) { | 883 for (; it != media_devices_requests_.end(); ++it) { |
770 if ((*it)->request == request) | 884 if ((*it)->media_devices_request == request) |
771 return (*it); | 885 return (*it); |
772 } | 886 } |
773 return NULL; | 887 return NULL; |
774 } | 888 } |
775 | 889 |
776 void UserMediaClientImpl::CancelAndDeleteMediaDevicesRequest( | 890 void UserMediaClientImpl::CancelAndDeleteMediaDevicesRequest( |
777 MediaDevicesRequestInfo* request) { | 891 MediaDevicesRequestInfo* request) { |
778 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); | 892 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); |
779 for (; it != media_devices_requests_.end(); ++it) { | 893 for (; it != media_devices_requests_.end(); ++it) { |
780 if ((*it) == request) { | 894 if ((*it) == request) { |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
946 return; | 1060 return; |
947 } | 1061 } |
948 } | 1062 } |
949 } | 1063 } |
950 | 1064 |
951 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { | 1065 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { |
952 return !sources_waiting_for_callback_.empty(); | 1066 return !sources_waiting_for_callback_.empty(); |
953 } | 1067 } |
954 | 1068 |
955 } // namespace content | 1069 } // namespace content |
OLD | NEW |