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

Side by Side Diff: chrome/browser/content_settings/permission_context_uma_util.cc

Issue 1019543002: Add rappor metrics for infobar/bubble operations for Geolocation and Notifications (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | tools/metrics/rappor/rappor.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/metrics/histogram.h" 5 #include "base/metrics/histogram_macros.h"
6 #include "base/strings/stringprintf.h"
7 #include "chrome/browser/browser_process.h"
6 #include "chrome/browser/content_settings/permission_context_uma_util.h" 8 #include "chrome/browser/content_settings/permission_context_uma_util.h"
9 #include "components/rappor/rappor_utils.h"
7 #include "content/public/browser/permission_type.h" 10 #include "content/public/browser/permission_type.h"
8 #include "url/gurl.h" 11 #include "url/gurl.h"
9 12
10 // UMA keys need to be statically initialized so plain function would not 13 // UMA keys need to be statically initialized so plain function would not
11 // work. Use a Macro instead. 14 // work. Use a Macro instead.
12 #define PERMISSION_ACTION_UMA(secure_origin, \ 15 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
13 permission, permission_secure, permission_insecure, action) \ 16 permission_insecure, action) \
14 UMA_HISTOGRAM_ENUMERATION( \ 17 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
15 permission, \ 18 if (secure_origin) { \
16 action, \ 19 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
17 PERMISSION_ACTION_NUM); \ 20 PERMISSION_ACTION_NUM); \
18 if (secure_origin) { \ 21 } else { \
19 UMA_HISTOGRAM_ENUMERATION(permission_secure, \ 22 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
20 action, \ 23 PERMISSION_ACTION_NUM); \
21 PERMISSION_ACTION_NUM); \ 24 }
22 } else { \
23 UMA_HISTOGRAM_ENUMERATION(permission_insecure, \
24 action, \
25 PERMISSION_ACTION_NUM); \
26 }
27
28 25
29 namespace { 26 namespace {
30 27
31 // Enum for UMA purposes, make sure you update histograms.xml if you add new 28 // Enum for UMA purposes, make sure you update histograms.xml if you add new
32 // permission actions. Never delete or reorder an entry; only add new entries 29 // permission actions. Never delete or reorder an entry; only add new entries
33 // immediately before PERMISSION_NUM 30 // immediately before PERMISSION_NUM
34 enum PermissionAction { 31 enum PermissionAction {
35 GRANTED = 0, 32 GRANTED = 0,
36 DENIED = 1, 33 DENIED = 1,
37 DISMISSED = 2, 34 DISMISSED = 2,
38 IGNORED = 3, 35 IGNORED = 3,
39 36
40 // Always keep this at the end. 37 // Always keep this at the end.
41 PERMISSION_ACTION_NUM, 38 PERMISSION_ACTION_NUM,
42 }; 39 };
43 40
44 void RecordPermissionAction( 41 const std::string GetRapporMetric(ContentSettingsType permission,
45 ContentSettingsType permission, 42 PermissionAction action) {
46 PermissionAction action, 43 std::string action_str;
47 bool secure_origin) { 44 switch (action) {
45 case GRANTED:
46 action_str = "Granted";
47 break;
48 case DENIED:
49 action_str = "Denied";
50 break;
51 case DISMISSED:
52 action_str = "Dismissed";
53 break;
54 case IGNORED:
55 action_str = "Ignored";
56 break;
57 case PERMISSION_ACTION_NUM:
58 NOTREACHED();
59 break;
60 }
61 std::string permission_str;
62 switch (permission) {
63 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
64 permission_str = "Geolocation";
65 break;
66 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
67 permission_str = "Notifications";
68 break;
69 default:
70 permission_str = "";
71 break;
72 }
73
74 if (permission_str.empty())
75 return "";
76 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url",
77 permission_str.c_str(), action_str.c_str());
78 }
79
80 void RecordPermissionAction(ContentSettingsType permission,
81 PermissionAction action,
82 const GURL& requesting_origin) {
83 bool secure_origin = requesting_origin.SchemeIsSecure();
84
48 switch (permission) { 85 switch (permission) {
49 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 86 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
50 PERMISSION_ACTION_UMA( 87 PERMISSION_ACTION_UMA(
51 secure_origin, 88 secure_origin,
52 "ContentSettings.PermissionActions_Geolocation", 89 "ContentSettings.PermissionActions_Geolocation",
53 "ContentSettings.PermissionActionsSecureOrigin_Geolocation", 90 "ContentSettings.PermissionActionsSecureOrigin_Geolocation",
54 "ContentSettings.PermissionActionsInsecureOrigin_Geolocation", 91 "ContentSettings.PermissionActionsInsecureOrigin_Geolocation",
55 action); 92 action);
56 break; 93 break;
57 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 94 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
(...skipping 26 matching lines...) Expand all
84 secure_origin, 121 secure_origin,
85 "ContentSettings.PermissionActions_ProtectedMedia", 122 "ContentSettings.PermissionActions_ProtectedMedia",
86 "ContentSettings.PermissionActionsSecureOrigin_ProtectedMedia", 123 "ContentSettings.PermissionActionsSecureOrigin_ProtectedMedia",
87 "ContentSettings.PermissionActionsInsecureOrigin_ProtectedMedia", 124 "ContentSettings.PermissionActionsInsecureOrigin_ProtectedMedia",
88 action); 125 action);
89 break; 126 break;
90 #endif 127 #endif
91 default: 128 default:
92 NOTREACHED() << "PERMISSION " << permission << " not accounted for"; 129 NOTREACHED() << "PERMISSION " << permission << " not accounted for";
93 } 130 }
131
132 const std::string& rappor_metric = GetRapporMetric(permission, action);
133 if (!rappor_metric.empty())
134 rappor::SampleDomainAndRegistryFromGURL(
135 g_browser_process->rappor_service(), rappor_metric,
136 requesting_origin);
94 } 137 }
95 138
96 void RecordPermissionRequest( 139 void RecordPermissionRequest(ContentSettingsType permission,
97 ContentSettingsType permission, bool secure_origin) { 140 const GURL& requesting_origin) {
141 bool secure_origin = requesting_origin.SchemeIsSecure();
98 content::PermissionType type; 142 content::PermissionType type;
99 switch (permission) { 143 switch (permission) {
100 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 144 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
101 type = content::PermissionType::GEOLOCATION; 145 type = content::PermissionType::GEOLOCATION;
146 rappor::SampleDomainAndRegistryFromGURL(
147 g_browser_process->rappor_service(),
148 "ContentSettings.PermissionRequested.Geolocation.Url",
149 requesting_origin);
102 break; 150 break;
103 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 151 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
104 type = content::PermissionType::NOTIFICATIONS; 152 type = content::PermissionType::NOTIFICATIONS;
153 rappor::SampleDomainAndRegistryFromGURL(
154 g_browser_process->rappor_service(),
155 "ContentSettings.PermissionRequested.Notifications.Url",
156 requesting_origin);
105 break; 157 break;
106 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 158 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
107 type = content::PermissionType::MIDI_SYSEX; 159 type = content::PermissionType::MIDI_SYSEX;
108 break; 160 break;
109 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: 161 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
110 type = content::PermissionType::PUSH_MESSAGING; 162 type = content::PermissionType::PUSH_MESSAGING;
111 break; 163 break;
112 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) 164 #if defined(OS_ANDROID) || defined(OS_CHROMEOS)
113 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: 165 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER:
114 type = content::PermissionType::PROTECTED_MEDIA_IDENTIFIER; 166 type = content::PermissionType::PROTECTED_MEDIA_IDENTIFIER;
(...skipping 19 matching lines...) Expand all
134 static_cast<base::HistogramBase::Sample>(content::PermissionType::NUM)); 186 static_cast<base::HistogramBase::Sample>(content::PermissionType::NUM));
135 } 187 }
136 } 188 }
137 189
138 } // namespace 190 } // namespace
139 191
140 // Make sure you update histograms.xml permission histogram_suffix if you 192 // Make sure you update histograms.xml permission histogram_suffix if you
141 // add new permission 193 // add new permission
142 void PermissionContextUmaUtil::PermissionRequested( 194 void PermissionContextUmaUtil::PermissionRequested(
143 ContentSettingsType permission, const GURL& requesting_origin) { 195 ContentSettingsType permission, const GURL& requesting_origin) {
144 RecordPermissionRequest(permission, requesting_origin.SchemeIsSecure()); 196 RecordPermissionRequest(permission, requesting_origin);
145 } 197 }
146 198
147 void PermissionContextUmaUtil::PermissionGranted( 199 void PermissionContextUmaUtil::PermissionGranted(
148 ContentSettingsType permission, const GURL& requesting_origin) { 200 ContentSettingsType permission, const GURL& requesting_origin) {
149 RecordPermissionAction(permission, GRANTED, 201 RecordPermissionAction(permission, GRANTED, requesting_origin);
150 requesting_origin.SchemeIsSecure());
151 } 202 }
152 203
153 void PermissionContextUmaUtil::PermissionDenied( 204 void PermissionContextUmaUtil::PermissionDenied(
154 ContentSettingsType permission, const GURL& requesting_origin) { 205 ContentSettingsType permission, const GURL& requesting_origin) {
155 RecordPermissionAction(permission, DENIED, 206 RecordPermissionAction(permission, DENIED, requesting_origin);
156 requesting_origin.SchemeIsSecure());
157 } 207 }
158 208
159 void PermissionContextUmaUtil::PermissionDismissed( 209 void PermissionContextUmaUtil::PermissionDismissed(
160 ContentSettingsType permission, const GURL& requesting_origin) { 210 ContentSettingsType permission, const GURL& requesting_origin) {
161 RecordPermissionAction(permission, DISMISSED, 211 RecordPermissionAction(permission, DISMISSED, requesting_origin);
162 requesting_origin.SchemeIsSecure());
163 } 212 }
164 213
165 void PermissionContextUmaUtil::PermissionIgnored( 214 void PermissionContextUmaUtil::PermissionIgnored(
166 ContentSettingsType permission, const GURL& requesting_origin) { 215 ContentSettingsType permission, const GURL& requesting_origin) {
167 RecordPermissionAction(permission, IGNORED, 216 RecordPermissionAction(permission, IGNORED, requesting_origin);
168 requesting_origin.SchemeIsSecure());
169 } 217 }
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/rappor/rappor.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698