Home | History | Annotate | Download | only in content_settings
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/metrics/histogram.h"
      6 #include "chrome/browser/content_settings/permission_context_uma_util.h"
      7 
      8 namespace {
      9 
     10 // Enum for UMA purposes, make sure you update histograms.xml if you add new
     11 // permission actions. Never delete or reorder an entry; only add new entries
     12 // immediately before PERMISSION_NUM
     13 enum PermissionAction {
     14   GRANTED = 0,
     15   DENIED = 1,
     16   DISMISSED = 2,
     17   IGNORED = 3,
     18 
     19   // Always keep this at the end.
     20   PERMISSION_ACTION_NUM,
     21 };
     22 
     23 // Enum for UMA purposes, make sure you update histograms.xml if you add new
     24 // permission actions. Never delete or reorder an entry; only add new entries
     25 // immediately before PERMISSION_NUM
     26 enum PermissionType {
     27   PERMISSION_UNKNOWN = 0,
     28   PERMISSION_MIDI_SYSEX = 1,
     29   PERMISSION_PUSH_MESSAGING = 2,
     30   PERMISSION_NOTIFICATIONS = 3,
     31 
     32   // Always keep this at the end.
     33   PERMISSION_NUM,
     34 };
     35 
     36 void RecordPermissionAction(
     37       ContentSettingsType permission, PermissionAction action) {
     38   switch (permission) {
     39       case CONTENT_SETTINGS_TYPE_GEOLOCATION:
     40         // TODO(miguelg): support geolocation through
     41         // the generic permission class.
     42         break;
     43       case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
     44         UMA_HISTOGRAM_ENUMERATION(
     45             "ContentSettings.PermissionActions_Notifications",
     46             action,
     47             PERMISSION_ACTION_NUM);
     48         break;
     49       case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
     50         UMA_HISTOGRAM_ENUMERATION("ContentSettings.PermissionActions_MidiSysEx",
     51                                   action,
     52                                   PERMISSION_ACTION_NUM);
     53         break;
     54       case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
     55         UMA_HISTOGRAM_ENUMERATION(
     56             "ContentSettings.PermissionActions_PushMessaging",
     57             action,
     58             PERMISSION_ACTION_NUM);
     59         break;
     60 #if defined(OS_ANDROID)
     61       case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER:
     62         // TODO(miguelg): support protected media through
     63         // the generic permission class.
     64         break;
     65 #endif
     66       default:
     67         NOTREACHED() << "PERMISSION " << permission << " not accounted for";
     68     }
     69 }
     70 
     71 void RecordPermissionRequest(
     72     ContentSettingsType permission) {
     73   PermissionType type;
     74   switch (permission) {
     75     case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
     76       type = PERMISSION_NOTIFICATIONS;
     77       break;
     78     case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
     79       type = PERMISSION_MIDI_SYSEX;
     80       break;
     81     case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
     82       type = PERMISSION_PUSH_MESSAGING;
     83       break;
     84     default:
     85       NOTREACHED() << "PERMISSION " << permission << " not accounted for";
     86       type = PERMISSION_UNKNOWN;
     87   }
     88   UMA_HISTOGRAM_ENUMERATION("ContentSettings.PermissionRequested", type,
     89                             PERMISSION_NUM);
     90 }
     91 
     92 } // namespace
     93 
     94 // Make sure you update histograms.xml permission histogram_suffix if you
     95 // add new permission
     96 void PermissionContextUmaUtil::PermissionRequested(
     97     ContentSettingsType permission) {
     98   RecordPermissionRequest(permission);
     99 }
    100 
    101 void PermissionContextUmaUtil::PermissionGranted(
    102     ContentSettingsType permission) {
    103   RecordPermissionAction(permission, GRANTED);
    104 }
    105 
    106 void PermissionContextUmaUtil::PermissionDenied(
    107     ContentSettingsType permission) {
    108   RecordPermissionAction(permission, DENIED);
    109 }
    110 
    111 void PermissionContextUmaUtil::PermissionDismissed(
    112     ContentSettingsType permission) {
    113   RecordPermissionAction(permission, DISMISSED);
    114 }
    115 
    116 void PermissionContextUmaUtil::PermissionIgnored(
    117     ContentSettingsType permission) {
    118   RecordPermissionAction(permission, IGNORED);
    119 }
    120