| 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 abf5fb45f7d84857a9c82f94014620deac6257fb..45dac64b0977455d4b571a42b99b6083df98f4d0 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" | 
| @@ -225,6 +226,30 @@ const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = | 
| "Permissions.Prompt.MergedBubbleAccepted"; | 
| const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = | 
| "Permissions.Prompt.MergedBubbleDenied"; | 
| +const char | 
| +    PermissionUmaUtil::kPermissionsPromptAcceptedPriorDismissCountPrefix[] = | 
| +        "Permissions.Prompt.Accepted.PriorDismissCount."; | 
| +const char | 
| +    PermissionUmaUtil::kPermissionsPromptAcceptedPriorIgnoreCountPrefix[] = | 
| +        "Permissions.Prompt.Accepted.PriorIgnoreCount."; | 
| +const char | 
| +    PermissionUmaUtil::kPermissionsPromptDeniedPriorDismissCountPrefix[] = | 
| +        "Permissions.Prompt.Denied.PriorDismissCount."; | 
| +const char | 
| +    PermissionUmaUtil::kPermissionsPromptDeniedPriorIgnoreCountPrefix[] = | 
| +        "Permissions.Prompt.Denied.PriorIgnoreCount."; | 
| +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."; | 
|  | 
| // Make sure you update histograms.xml permission histogram_suffix if you | 
| // add new permission | 
| @@ -243,6 +268,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( | 
| @@ -252,6 +285,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( | 
| @@ -261,6 +302,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( | 
| @@ -270,6 +319,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, | 
| @@ -375,98 +432,22 @@ void PermissionUmaUtil::PermissionPromptDenied( | 
| requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); | 
| } | 
|  | 
| -void PermissionUmaUtil::PermissionPromptDismissed( | 
| +void PermissionUmaUtil::RecordPermissionPromptPriorCount( | 
| content::PermissionType permission, | 
| +    const std::string& 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"; | 
| -  } | 
| +  // The user is not prompted for these permissions, thus there is no prompt | 
| +  // event to record a prior count for. | 
| +  DCHECK_NE(PermissionType::MIDI, permission); | 
| +  DCHECK_NE(PermissionType::BACKGROUND_SYNC, permission); | 
| +  DCHECK_NE(PermissionType::NUM, permission); | 
| + | 
| +  // 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( | 
|  |