| Index: chrome/browser/media/media_stream_devices_controller.cc
|
| diff --git a/chrome/browser/media/media_stream_devices_controller.cc b/chrome/browser/media/media_stream_devices_controller.cc
|
| index cd2d2f2cfb6f1165d2a15f51d20a7360c5e6c2f7..98a08f3f248a010514f6b774fc90f594e64a5365 100644
|
| --- a/chrome/browser/media/media_stream_devices_controller.cc
|
| +++ b/chrome/browser/media/media_stream_devices_controller.cc
|
| @@ -84,6 +84,61 @@ enum DevicePermissionActions {
|
| kPermissionActionsMax // Must always be last!
|
| };
|
|
|
| +// This is a wrapper around the call to
|
| +// TabSpecificContentSettings::OnMediaStreamPermissionSet, precomputing the
|
| +// information from |request_permissions| to a form which is understood by
|
| +// TabSpecificContentSettings.
|
| +void OnMediaStreamPermissionSet(
|
| + TabSpecificContentSettings* content_settings,
|
| + content::WebContents* web_contents,
|
| + const GURL& request_origin,
|
| + const MediaStreamDevicesController::MediaStreamTypeSettingsMap&
|
| + request_permissions) {
|
| + TabSpecificContentSettings::MicrophoneCameraState microphone_camera_state =
|
| + TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED;
|
| + std::string selected_audio_device;
|
| + std::string selected_video_device;
|
| + std::string requested_audio_device;
|
| + std::string requested_video_device;
|
| +
|
| + PrefService* prefs = Profile::FromBrowserContext(
|
| + web_contents->GetBrowserContext())->GetPrefs();
|
| + auto it = request_permissions.find(content::MEDIA_DEVICE_AUDIO_CAPTURE);
|
| + if (it != request_permissions.end()) {
|
| + requested_audio_device = it->second.requested_device_id;
|
| + selected_audio_device = requested_audio_device.empty() ?
|
| + prefs->GetString(prefs::kDefaultAudioCaptureDevice) :
|
| + requested_audio_device;
|
| + DCHECK_NE(MediaStreamDevicesController::MEDIA_NONE, it->second.permission);
|
| + bool mic_allowed =
|
| + it->second.permission == MediaStreamDevicesController::MEDIA_ALLOWED;
|
| + microphone_camera_state |=
|
| + TabSpecificContentSettings::MICROPHONE_ACCESSED |
|
| + (mic_allowed ? 0 : TabSpecificContentSettings::MICROPHONE_BLOCKED);
|
| + }
|
| +
|
| + it = request_permissions.find(content::MEDIA_DEVICE_VIDEO_CAPTURE);
|
| + if (it != request_permissions.end()) {
|
| + requested_video_device = it->second.requested_device_id;
|
| + selected_video_device = requested_video_device.empty() ?
|
| + prefs->GetString(prefs::kDefaultVideoCaptureDevice) :
|
| + requested_video_device;
|
| + DCHECK_NE(MediaStreamDevicesController::MEDIA_NONE, it->second.permission);
|
| + bool cam_allowed =
|
| + it->second.permission == MediaStreamDevicesController::MEDIA_ALLOWED;
|
| + microphone_camera_state |=
|
| + TabSpecificContentSettings::CAMERA_ACCESSED |
|
| + (cam_allowed ? 0 : TabSpecificContentSettings::CAMERA_BLOCKED);
|
| + }
|
| +
|
| + content_settings->OnMediaStreamPermissionSet(request_origin,
|
| + microphone_camera_state,
|
| + selected_audio_device,
|
| + selected_video_device,
|
| + requested_audio_device,
|
| + requested_video_device);
|
| +}
|
| +
|
| } // namespace
|
|
|
| MediaStreamDevicesController::MediaStreamTypeSettings::MediaStreamTypeSettings(
|
| @@ -579,8 +634,10 @@ void MediaStreamDevicesController::NotifyUIRequestAccepted() const {
|
| if (!content_settings_)
|
| return;
|
|
|
| - content_settings_->OnMediaStreamPermissionSet(request_.security_origin,
|
| - request_permissions_);
|
| + OnMediaStreamPermissionSet(content_settings_,
|
| + web_contents_,
|
| + request_.security_origin,
|
| + request_permissions_);
|
| }
|
|
|
| void MediaStreamDevicesController::NotifyUIRequestDenied() {
|
| @@ -596,8 +653,10 @@ void MediaStreamDevicesController::NotifyUIRequestDenied() {
|
| MEDIA_BLOCKED_BY_USER;
|
| }
|
|
|
| - content_settings_->OnMediaStreamPermissionSet(request_.security_origin,
|
| - request_permissions_);
|
| + OnMediaStreamPermissionSet(content_settings_,
|
| + web_contents_,
|
| + request_.security_origin,
|
| + request_permissions_);
|
| }
|
|
|
| bool MediaStreamDevicesController::IsDeviceAudioCaptureRequestedAndAllowed()
|
|
|