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