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

Side by Side Diff: content/renderer/media/user_media_client_impl.cc

Issue 2872913003: Do not pass the origin to MediaDevicesDispatcherHost. (Closed)
Patch Set: Add tests with unique origin Created 3 years, 7 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/user_media_client_impl.h" 5 #include "content/renderer/media/user_media_client_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 GetConstraintValueAsBoolean( 407 GetConstraintValueAsBoolean(
408 current_request_info_->request().AudioConstraints(), 408 current_request_info_->request().AudioConstraints(),
409 &blink::WebMediaTrackConstraintSet::render_to_associated_sink, 409 &blink::WebMediaTrackConstraintSet::render_to_associated_sink,
410 &enable_automatic_output_device_selection); 410 &enable_automatic_output_device_selection);
411 current_request_info_->set_enable_automatic_output_device_selection( 411 current_request_info_->set_enable_automatic_output_device_selection(
412 enable_automatic_output_device_selection); 412 enable_automatic_output_device_selection);
413 413
414 if (request_audio_input_devices) { 414 if (request_audio_input_devices) {
415 GetMediaDevicesDispatcher()->EnumerateDevices( 415 GetMediaDevicesDispatcher()->EnumerateDevices(
416 true /* audio_input */, false /* video_input */, 416 true /* audio_input */, false /* video_input */,
417 false /* audio_output */, current_request_info_->security_origin(), 417 false /* audio_output */,
418 base::Bind(&UserMediaClientImpl::SelectAudioInputDevice, 418 base::Bind(&UserMediaClientImpl::SelectAudioInputDevice,
419 weak_factory_.GetWeakPtr(), 419 weak_factory_.GetWeakPtr(),
420 current_request_info_->request())); 420 current_request_info_->request()));
421 return; 421 return;
422 } 422 }
423 } 423 }
424 424
425 SetupVideoInput(current_request_info_->request()); 425 SetupVideoInput(current_request_info_->request());
426 } 426 }
427 427
(...skipping 26 matching lines...) Expand all
454 454
455 if (!user_media_request.Video()) { 455 if (!user_media_request.Video()) {
456 GenerateStreamForCurrentRequestInfo(); 456 GenerateStreamForCurrentRequestInfo();
457 return; 457 return;
458 } 458 }
459 auto& video_controls = current_request_info_->stream_controls()->video; 459 auto& video_controls = current_request_info_->stream_controls()->video;
460 InitializeTrackControls(user_media_request.VideoConstraints(), 460 InitializeTrackControls(user_media_request.VideoConstraints(),
461 &video_controls); 461 &video_controls);
462 if (IsDeviceSource(video_controls.stream_source)) { 462 if (IsDeviceSource(video_controls.stream_source)) {
463 GetMediaDevicesDispatcher()->GetVideoInputCapabilities( 463 GetMediaDevicesDispatcher()->GetVideoInputCapabilities(
464 current_request_info_->security_origin(),
465 base::Bind(&UserMediaClientImpl::SelectVideoDeviceSettings, 464 base::Bind(&UserMediaClientImpl::SelectVideoDeviceSettings,
466 weak_factory_.GetWeakPtr(), user_media_request)); 465 weak_factory_.GetWeakPtr(), user_media_request));
467 } else { 466 } else {
468 base::PostTaskAndReplyWithResult( 467 base::PostTaskAndReplyWithResult(
469 worker_task_runner_.get(), FROM_HERE, 468 worker_task_runner_.get(), FROM_HERE,
470 base::Bind(&SelectSettingsVideoContentCapture, 469 base::Bind(&SelectSettingsVideoContentCapture,
471 user_media_request.VideoConstraints(), 470 user_media_request.VideoConstraints(),
472 video_controls.stream_source), 471 video_controls.stream_source),
473 base::Bind(&UserMediaClientImpl::FinalizeSelectVideoContentSettings, 472 base::Bind(&UserMediaClientImpl::FinalizeSelectVideoContentSettings,
474 weak_factory_.GetWeakPtr(), user_media_request)); 473 weak_factory_.GetWeakPtr(), user_media_request));
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 // Instead, erase the request. Once the stream is generated we will stop the 582 // Instead, erase the request. Once the stream is generated we will stop the
584 // stream if the request does not exist. 583 // stream if the request does not exist.
585 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_EXPLICITLY_CANCELLED); 584 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_EXPLICITLY_CANCELLED);
586 } 585 }
587 } 586 }
588 587
589 void UserMediaClientImpl::RequestMediaDevices( 588 void UserMediaClientImpl::RequestMediaDevices(
590 const blink::WebMediaDevicesRequest& media_devices_request) { 589 const blink::WebMediaDevicesRequest& media_devices_request) {
591 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES); 590 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES);
592 DCHECK(CalledOnValidThread()); 591 DCHECK(CalledOnValidThread());
593
594 // |media_devices_request| can't be mocked, so in tests it will be empty (the
595 // underlying pointer is null). In order to use this function in a test we
596 // need to check if it isNull.
597 url::Origin security_origin;
598 if (!media_devices_request.IsNull())
599 security_origin = media_devices_request.GetSecurityOrigin();
600
601 GetMediaDevicesDispatcher()->EnumerateDevices( 592 GetMediaDevicesDispatcher()->EnumerateDevices(
602 true /* audio input */, true /* video input */, true /* audio output */, 593 true /* audio input */, true /* video input */, true /* audio output */,
603 security_origin,
604 base::Bind(&UserMediaClientImpl::FinalizeEnumerateDevices, 594 base::Bind(&UserMediaClientImpl::FinalizeEnumerateDevices,
605 weak_factory_.GetWeakPtr(), media_devices_request)); 595 weak_factory_.GetWeakPtr(), media_devices_request));
606 } 596 }
607 597
608 void UserMediaClientImpl::SetMediaDeviceChangeObserver( 598 void UserMediaClientImpl::SetMediaDeviceChangeObserver(
609 const blink::WebMediaDeviceChangeObserver& observer) { 599 const blink::WebMediaDeviceChangeObserver& observer) {
610 media_device_change_observer_ = observer; 600 media_device_change_observer_ = observer;
611 601
612 // Do nothing if setting a valid observer while already subscribed or setting 602 // Do nothing if setting a valid observer while already subscribed or setting
613 // no observer while unsubscribed. 603 // no observer while unsubscribed.
614 if (media_device_change_observer_.IsNull() == 604 if (media_device_change_observer_.IsNull() ==
615 device_change_subscription_ids_.empty()) 605 device_change_subscription_ids_.empty())
616 return; 606 return;
617 607
618 base::WeakPtr<MediaDevicesEventDispatcher> event_dispatcher = 608 base::WeakPtr<MediaDevicesEventDispatcher> event_dispatcher =
619 MediaDevicesEventDispatcher::GetForRenderFrame(render_frame()); 609 MediaDevicesEventDispatcher::GetForRenderFrame(render_frame());
620 if (media_device_change_observer_.IsNull()) { 610 if (media_device_change_observer_.IsNull()) {
621 event_dispatcher->UnsubscribeDeviceChangeNotifications( 611 event_dispatcher->UnsubscribeDeviceChangeNotifications(
622 device_change_subscription_ids_); 612 device_change_subscription_ids_);
623 device_change_subscription_ids_.clear(); 613 device_change_subscription_ids_.clear();
624 } else { 614 } else {
625 DCHECK(device_change_subscription_ids_.empty()); 615 DCHECK(device_change_subscription_ids_.empty());
626 url::Origin security_origin =
627 media_device_change_observer_.GetSecurityOrigin();
628 device_change_subscription_ids_ = 616 device_change_subscription_ids_ =
629 event_dispatcher->SubscribeDeviceChangeNotifications( 617 event_dispatcher->SubscribeDeviceChangeNotifications(base::Bind(
630 security_origin, base::Bind(&UserMediaClientImpl::DevicesChanged, 618 &UserMediaClientImpl::DevicesChanged, weak_factory_.GetWeakPtr()));
631 weak_factory_.GetWeakPtr()));
632 } 619 }
633 } 620 }
634 621
635 // Callback from MediaStreamDispatcher. 622 // Callback from MediaStreamDispatcher.
636 // The requested stream have been generated by the MediaStreamDispatcher. 623 // The requested stream have been generated by the MediaStreamDispatcher.
637 void UserMediaClientImpl::OnStreamGenerated( 624 void UserMediaClientImpl::OnStreamGenerated(
638 int request_id, 625 int request_id,
639 const std::string& label, 626 const std::string& label,
640 const StreamDeviceInfoArray& audio_array, 627 const StreamDeviceInfoArray& audio_array,
641 const StreamDeviceInfoArray& video_array) { 628 const StreamDeviceInfoArray& video_array) {
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 const blink::WebString& result_name) { 1378 const blink::WebString& result_name) {
1392 // Check if we're waiting to be notified of this source. If not, then we'll 1379 // Check if we're waiting to be notified of this source. If not, then we'll
1393 // ignore the notification. 1380 // ignore the notification.
1394 auto found = std::find(sources_waiting_for_callback_.begin(), 1381 auto found = std::find(sources_waiting_for_callback_.begin(),
1395 sources_waiting_for_callback_.end(), source); 1382 sources_waiting_for_callback_.end(), source);
1396 if (found != sources_waiting_for_callback_.end()) 1383 if (found != sources_waiting_for_callback_.end())
1397 OnTrackStarted(source, result, result_name); 1384 OnTrackStarted(source, result, result_name);
1398 } 1385 }
1399 1386
1400 } // namespace content 1387 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698