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

Unified Diff: chrome/browser/media/webrtc/media_stream_devices_controller.cc

Issue 2815933003: Simplify RecordPermissionAction and Android permission callback (Closed)
Patch Set: Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/media/webrtc/media_stream_devices_controller.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/media/webrtc/media_stream_devices_controller.cc
diff --git a/chrome/browser/media/webrtc/media_stream_devices_controller.cc b/chrome/browser/media/webrtc/media_stream_devices_controller.cc
index 52b81f13b06cd32f7229eb05deff2af6422d7c2c..a063d9b0642cf80bcd36a6a162d1f3eefc876c2d 100644
--- a/chrome/browser/media/webrtc/media_stream_devices_controller.cc
+++ b/chrome/browser/media/webrtc/media_stream_devices_controller.cc
@@ -82,42 +82,26 @@ using PermissionActionCallback =
const GURL&,
Profile*)>;
-void RecordSinglePermissionAction(const content::MediaStreamRequest& request,
- ContentSettingsType content_type,
- Profile* profile,
- PermissionActionCallback callback) {
- if (ContentTypeIsRequested(content_type, request)) {
- // TODO(stefanocs): Pass the actual |gesture_type| once this file has been
- // refactored into PermissionContext.
- callback.Run(content_type, PermissionRequestGestureType::UNKNOWN,
- request.security_origin, profile);
- }
-}
-
-// Calls |action_function| for each permission requested by |request|.
-void RecordPermissionAction(const content::MediaStreamRequest& request,
+// Calls |action_callback| for each permission requested.
+void RecordPermissionAction(bool is_asking_for_audio,
+ bool is_asking_for_video,
+ const GURL& security_origin,
Profile* profile,
- PermissionActionCallback callback) {
- RecordSinglePermissionAction(request, CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
- profile, callback);
- RecordSinglePermissionAction(
- request, CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, profile, callback);
-}
-
-#if defined(OS_ANDROID)
-// Callback for the permission update infobar when the site and Chrome
-// permissions are mismatched on Android.
-void OnPermissionConflictResolved(
- std::unique_ptr<MediaStreamDevicesController> controller,
- bool allowed) {
- if (allowed)
- controller->PermissionGranted();
- else
- controller->ForcePermissionDeniedTemporarily();
+ PermissionActionCallback action_callback) {
+ // TODO(stefanocs): Pass the actual |gesture_type| once this file has been
+ // refactored into PermissionContext.
+ if (is_asking_for_audio) {
+ action_callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ PermissionRequestGestureType::UNKNOWN, security_origin,
+ profile);
+ }
+ if (is_asking_for_video) {
+ action_callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
+ PermissionRequestGestureType::UNKNOWN, security_origin,
+ profile);
+ }
}
-#endif // defined(OS_ANDROID)
-
// This helper class helps to measure the number of media stream requests that
// occur. It ensures that only one request will be recorded per navigation, per
// frame. TODO(raymes): Remove this when https://crbug.com/526324 is fixed.
@@ -254,7 +238,8 @@ void MediaStreamDevicesController::RegisterProfilePrefs(
MediaStreamDevicesController::~MediaStreamDevicesController() {
if (!callback_.is_null()) {
- RecordPermissionAction(request_, profile_,
+ RecordPermissionAction(IsAskingForAudio(), IsAskingForVideo(), GetOrigin(),
+ profile_,
base::Bind(PermissionUmaUtil::PermissionIgnored));
callback_.Run(content::MediaStreamDevices(),
content::MEDIA_DEVICE_FAILED_DUE_TO_SHUTDOWN,
@@ -282,15 +267,28 @@ base::string16 MediaStreamDevicesController::GetMessageText() const {
GetOrigin(), url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC));
}
-void MediaStreamDevicesController::ForcePermissionDeniedTemporarily() {
- set_persist(false);
- // TODO(tsergeant): Determine whether it is appropriate to record permission
- // action metrics here, as this is a different sort of user action.
- RunCallback(CONTENT_SETTING_BLOCK,
- CONTENT_SETTING_BLOCK,
+#if defined(OS_ANDROID)
+void MediaStreamDevicesController::AndroidOSPromptAnswered(bool allowed) {
+ DCHECK(old_audio_setting_ != CONTENT_SETTING_ASK &&
+ old_video_setting_ != CONTENT_SETTING_ASK);
+
+ ContentSetting audio_setting = old_audio_setting_;
+ ContentSetting video_setting = old_video_setting_;
+
+ if (!allowed) {
+ // Only permissions that were previously ALLOW for a site will have had
+ // their android permissions requested. It's only in that case that we need
+ // to change the setting to BLOCK to reflect that it wasn't allowed.
+ if (audio_setting == CONTENT_SETTING_ALLOW)
+ audio_setting = CONTENT_SETTING_BLOCK;
+ if (video_setting == CONTENT_SETTING_ALLOW)
+ video_setting = CONTENT_SETTING_BLOCK;
+ }
+
+ RunCallback(audio_setting, video_setting,
content::MEDIA_DEVICE_PERMISSION_DENIED);
- set_persist(true);
}
+#endif // defined(OS_ANDROID)
PermissionRequest::IconId MediaStreamDevicesController::GetIconId() const {
#if defined(OS_ANDROID)
@@ -315,7 +313,8 @@ GURL MediaStreamDevicesController::GetOrigin() const {
}
void MediaStreamDevicesController::PermissionGranted() {
- RecordPermissionAction(request_, profile_,
+ RecordPermissionAction(IsAskingForAudio(), IsAskingForVideo(), GetOrigin(),
+ profile_,
base::Bind(PermissionUmaUtil::PermissionGranted));
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_ALLOW),
@@ -325,7 +324,8 @@ void MediaStreamDevicesController::PermissionGranted() {
}
void MediaStreamDevicesController::PermissionDenied() {
- RecordPermissionAction(request_, profile_,
+ RecordPermissionAction(IsAskingForAudio(), IsAskingForVideo(), GetOrigin(),
+ profile_,
base::Bind(PermissionUmaUtil::PermissionDenied));
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_BLOCK),
@@ -339,7 +339,8 @@ bool MediaStreamDevicesController::ShouldShowPersistenceToggle() const {
}
void MediaStreamDevicesController::Cancelled() {
- RecordPermissionAction(request_, profile_,
+ RecordPermissionAction(IsAskingForAudio(), IsAskingForVideo(), GetOrigin(),
+ profile_,
base::Bind(PermissionUmaUtil::PermissionDismissed));
RunCallback(old_audio_setting_, old_video_setting_,
content::MEDIA_DEVICE_PERMISSION_DISMISSED);
@@ -389,7 +390,8 @@ void MediaStreamDevicesController::RequestPermissionsWithDelegate(
web_contents, content_settings_types)) {
PermissionUpdateInfoBarDelegate::Create(
web_contents, content_settings_types,
- base::Bind(&OnPermissionConflictResolved, base::Passed(&controller)));
+ base::Bind(&MediaStreamDevicesController::AndroidOSPromptAnswered,
+ base::Passed(&controller)));
}
#endif
return;
« no previous file with comments | « chrome/browser/media/webrtc/media_stream_devices_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698