Chromium Code Reviews| Index: chrome/browser/permissions/permission_uma_util.cc |
| diff --git a/chrome/browser/permissions/permission_uma_util.cc b/chrome/browser/permissions/permission_uma_util.cc |
| index 3ea75c74115282983e75d3d5cce4576ac60d3d1a..962df70bad0132eec6f57599a5e12bb81cebb77b 100644 |
| --- a/chrome/browser/permissions/permission_uma_util.cc |
| +++ b/chrome/browser/permissions/permission_uma_util.cc |
| @@ -7,6 +7,7 @@ |
| #include <utility> |
| #include "base/command_line.h" |
| +#include "base/metrics/histogram.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/strings/stringprintf.h" |
| #include "chrome/browser/browser_process.h" |
| @@ -188,14 +189,38 @@ const char PermissionUmaUtil::kPermissionsPromptAccepted[] = |
| "Permissions.Prompt.Accepted"; |
| const char PermissionUmaUtil::kPermissionsPromptAcceptedGesture[] = |
| "Permissions.Prompt.Accepted.Gesture"; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptAcceptedPriorDismissCountPrefix[] = |
| + "Permissions.Prompt.Accepted.PriorDismissCount."; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptAcceptedPriorIgnoreCountPrefix[] = |
| + "Permissions.Prompt.Accepted.PriorIgnoreCount."; |
| const char PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture[] = |
| "Permissions.Prompt.Accepted.NoGesture"; |
| const char PermissionUmaUtil::kPermissionsPromptDenied[] = |
| "Permissions.Prompt.Denied"; |
| const char PermissionUmaUtil::kPermissionsPromptDeniedGesture[] = |
| "Permissions.Prompt.Denied.Gesture"; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptDeniedPriorDismissCountPrefix[] = |
| + "Permissions.Prompt.Denied.PriorDismissCount."; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptDeniedPriorIgnoreCountPrefix[] = |
| + "Permissions.Prompt.Denied.PriorIgnoreCount."; |
| const char PermissionUmaUtil::kPermissionsPromptDeniedNoGesture[] = |
| "Permissions.Prompt.Denied.NoGesture"; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptDismissedPriorDismissCountPrefix[] = |
| + "Permissions.Prompt.Dismissed.PriorDismissCount."; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptDismissedPriorIgnoreCountPrefix[] = |
| + "Permissions.Prompt.Dismissed.PriorIgnoreCount."; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptIgnoredPriorDismissCountPrefix[] = |
| + "Permissions.Prompt.Ignored.PriorDismissCount."; |
| +const char |
| + PermissionUmaUtil::kPermissionsPromptIgnoredPriorIgnoreCountPrefix[] = |
| + "Permissions.Prompt.Ignored.PriorIgnoreCount."; |
| const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = |
| "Permissions.Prompt.RequestsPerPrompt"; |
| const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = |
| @@ -222,6 +247,14 @@ void PermissionUmaUtil::PermissionGranted( |
| Profile* profile) { |
| RecordPermissionAction(permission, GRANTED, PermissionSourceUI::PROMPT, |
| gesture_type, requesting_origin, profile); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptAcceptedPriorDismissCountPrefix, |
| + PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin, |
| + permission, profile)); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptAcceptedPriorIgnoreCountPrefix, |
| + PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin, |
| + permission, profile)); |
| } |
| void PermissionUmaUtil::PermissionDenied( |
| @@ -231,6 +264,14 @@ void PermissionUmaUtil::PermissionDenied( |
| Profile* profile) { |
| RecordPermissionAction(permission, DENIED, PermissionSourceUI::PROMPT, |
| gesture_type, requesting_origin, profile); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptDeniedPriorDismissCountPrefix, |
| + PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin, |
| + permission, profile)); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptDeniedPriorIgnoreCountPrefix, |
| + PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin, |
| + permission, profile)); |
| } |
| void PermissionUmaUtil::PermissionDismissed( |
| @@ -240,6 +281,14 @@ void PermissionUmaUtil::PermissionDismissed( |
| Profile* profile) { |
| RecordPermissionAction(permission, DISMISSED, PermissionSourceUI::PROMPT, |
| gesture_type, requesting_origin, profile); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptDismissedPriorDismissCountPrefix, |
| + PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin, |
| + permission, profile)); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptDismissedPriorIgnoreCountPrefix, |
| + PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin, |
| + permission, profile)); |
| } |
| void PermissionUmaUtil::PermissionIgnored( |
| @@ -249,6 +298,14 @@ void PermissionUmaUtil::PermissionIgnored( |
| Profile* profile) { |
| RecordPermissionAction(permission, IGNORED, PermissionSourceUI::PROMPT, |
| gesture_type, requesting_origin, profile); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptIgnoredPriorDismissCountPrefix, |
| + PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin, |
| + permission, profile)); |
| + RecordPermissionPromptPriorCount( |
| + permission, kPermissionsPromptIgnoredPriorIgnoreCountPrefix, |
| + PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin, |
| + permission, profile)); |
| } |
| void PermissionUmaUtil::PermissionRevoked(PermissionType permission, |
| @@ -354,98 +411,19 @@ void PermissionUmaUtil::PermissionPromptDenied( |
| requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); |
| } |
| -void PermissionUmaUtil::PermissionPromptDismissed( |
| +void PermissionUmaUtil::RecordPermissionPromptPriorCount( |
| content::PermissionType permission, |
| + const char* prefix, |
| int count) { |
| - switch (permission) { |
| - case PermissionType::GEOLOCATION: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.Geolocation", |
| - count); |
| - break; |
| - case PermissionType::NOTIFICATIONS: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.Notifications", |
| - count); |
| - break; |
| - case PermissionType::MIDI_SYSEX: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.MidiSysEx", |
| - count); |
| - break; |
| - case PermissionType::PUSH_MESSAGING: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.PushMessaging", |
| - count); |
| - break; |
| - case PermissionType::PROTECTED_MEDIA_IDENTIFIER: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.ProtectedMedia", |
| - count); |
| - break; |
| - case PermissionType::DURABLE_STORAGE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.DurableStorage", |
| - count); |
| - break; |
| - case PermissionType::AUDIO_CAPTURE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.AudioCapture", |
| - count); |
| - break; |
| - case PermissionType::VIDEO_CAPTURE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.VideoCapture", |
| - count); |
| - break; |
| - // The user is not prompted for these permissions, thus there is no dismiss |
| - // recorded for them. |
| - case PermissionType::MIDI: |
| - case PermissionType::BACKGROUND_SYNC: |
| - case PermissionType::NUM: |
| - NOTREACHED() << "PERMISSION " |
| - << PermissionUtil::GetPermissionString(permission) |
| - << " not accounted for"; |
| - } |
| -} |
| - |
| -void PermissionUmaUtil::PermissionPromptIgnored( |
| - content::PermissionType permission, |
| - int count) { |
| - switch (permission) { |
| - case PermissionType::GEOLOCATION: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.Geolocation", |
| - count); |
| - break; |
| - case PermissionType::NOTIFICATIONS: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.Notifications", |
| - count); |
| - break; |
| - case PermissionType::MIDI_SYSEX: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.MidiSysEx", |
| - count); |
| - break; |
| - case PermissionType::PUSH_MESSAGING: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.PushMessaging", |
| - count); |
| - break; |
| - case PermissionType::PROTECTED_MEDIA_IDENTIFIER: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.ProtectedMedia", |
| - count); |
| - break; |
| - case PermissionType::DURABLE_STORAGE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.DurableStorage", |
| - count); |
| - break; |
| - case PermissionType::AUDIO_CAPTURE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.AudioCapture", |
| - count); |
| - break; |
| - case PermissionType::VIDEO_CAPTURE: |
| - UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.VideoCapture", |
| - count); |
| - break; |
| - // The user is not prompted for these permissions, thus there is no |
| - // ignore recorded for them. |
| - case PermissionType::MIDI: |
| - case PermissionType::BACKGROUND_SYNC: |
| - case PermissionType::NUM: |
| - NOTREACHED() << "PERMISSION " |
| - << PermissionUtil::GetPermissionString(permission) |
| - << " not accounted for"; |
| - } |
| + DCHECK(permission != PermissionType::MIDI && |
| + permission != PermissionType::BACKGROUND_SYNC && |
| + permission != PermissionType::NUM); |
|
Ilya Sherman
2016/08/18 00:59:00
nit: Please write this as three separate DCHECKs,
Ilya Sherman
2016/08/18 00:59:00
Please preserve the comment "The user is not promp
dominickn
2016/08/18 01:21:11
Done.
|
| + // Expand UMA_HISTOGRAM_COUNTS_100 so that we can use a dynamically suffixed |
| + // histogram name. |
| + base::Histogram::FactoryGet( |
| + prefix + PermissionUtil::GetPermissionString(permission), 1, 100, 50, |
| + base::HistogramBase::kUmaTargetedHistogramFlag) |
| + ->Add(count); |
| } |
| void PermissionUmaUtil::PermissionPromptAcceptedWithPersistenceToggle( |