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() |