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

Side by Side Diff: chrome/browser/permissions/permission_uma_util.cc

Issue 2124703002: Record metrics for permission prompt acceptance vs. user gesture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wups Created 4 years, 5 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
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 "chrome/browser/permissions/permission_uma_util.h" 5 #include "chrome/browser/permissions/permission_uma_util.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 22 matching lines...) Expand all
33 permission_insecure, action) \ 33 permission_insecure, action) \
34 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ 34 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
35 if (secure_origin) { \ 35 if (secure_origin) { \
36 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ 36 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
37 PERMISSION_ACTION_NUM); \ 37 PERMISSION_ACTION_NUM); \
38 } else { \ 38 } else { \
39 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ 39 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
40 PERMISSION_ACTION_NUM); \ 40 PERMISSION_ACTION_NUM); \
41 } 41 }
42 42
43 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ 43 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \
44 UMA_HISTOGRAM_ENUMERATION( \ 44 UMA_HISTOGRAM_ENUMERATION( \
45 metric_name, \ 45 metric_name, \
46 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ 46 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \
47 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM)) 47 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM))
48
49 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \
50 no_gesture_metric_name, \
51 gesture_type, \
52 permission_bubble_type) \
53 if (gesture_type == PermissionRequestGestureType::GESTURE) { \
54 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \
55 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \
56 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \
57 permission_bubble_type); \
58 }
48 59
49 using content::PermissionType; 60 using content::PermissionType;
50 61
51 namespace { 62 namespace {
52 63
53 const std::string GetRapporMetric(PermissionType permission, 64 const std::string GetRapporMetric(PermissionType permission,
54 PermissionAction action) { 65 PermissionAction action) {
55 std::string action_str; 66 std::string action_str;
56 switch (action) { 67 switch (action) {
57 case GRANTED: 68 case GRANTED:
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 "Permissions.Requested.SameOrigin", 175 "Permissions.Requested.SameOrigin",
165 static_cast<base::HistogramBase::Sample>(permission), 176 static_cast<base::HistogramBase::Sample>(permission),
166 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 177 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
167 } 178 }
168 } 179 }
169 180
170 } // anonymous namespace 181 } // anonymous namespace
171 182
172 const char PermissionUmaUtil::kPermissionsPromptShown[] = 183 const char PermissionUmaUtil::kPermissionsPromptShown[] =
173 "Permissions.Prompt.Shown"; 184 "Permissions.Prompt.Shown";
185 const char PermissionUmaUtil::kPermissionsPromptShownGesture[] =
186 "Permissions.Prompt.Shown.Gesture";
187 const char PermissionUmaUtil::kPermissionsPromptShownNoGesture[] =
188 "Permissions.Prompt.Shown.NoGesture";
174 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = 189 const char PermissionUmaUtil::kPermissionsPromptAccepted[] =
175 "Permissions.Prompt.Accepted"; 190 "Permissions.Prompt.Accepted";
191 const char PermissionUmaUtil::kPermissionsPromptAcceptedGesture[] =
192 "Permissions.Prompt.Accepted.Gesture";
193 const char PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture[] =
194 "Permissions.Prompt.Accepted.NoGesture";
176 const char PermissionUmaUtil::kPermissionsPromptDenied[] = 195 const char PermissionUmaUtil::kPermissionsPromptDenied[] =
177 "Permissions.Prompt.Denied"; 196 "Permissions.Prompt.Denied";
197 const char PermissionUmaUtil::kPermissionsPromptDeniedGesture[] =
198 "Permissions.Prompt.Denied.Gesture";
199 const char PermissionUmaUtil::kPermissionsPromptDeniedNoGesture[] =
200 "Permissions.Prompt.Denied.NoGesture";
178 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = 201 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
179 "Permissions.Prompt.RequestsPerPrompt"; 202 "Permissions.Prompt.RequestsPerPrompt";
180 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = 203 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] =
181 "Permissions.Prompt.MergedBubbleTypes"; 204 "Permissions.Prompt.MergedBubbleTypes";
182 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = 205 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] =
183 "Permissions.Prompt.MergedBubbleAccepted"; 206 "Permissions.Prompt.MergedBubbleAccepted";
184 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = 207 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] =
185 "Permissions.Prompt.MergedBubbleDenied"; 208 "Permissions.Prompt.MergedBubbleDenied";
186 209
187 // Make sure you update histograms.xml permission histogram_suffix if you 210 // Make sure you update histograms.xml permission histogram_suffix if you
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 profile); 259 profile);
237 } 260 }
238 } 261 }
239 262
240 void PermissionUmaUtil::PermissionPromptShown( 263 void PermissionUmaUtil::PermissionPromptShown(
241 const std::vector<PermissionRequest*>& requests) { 264 const std::vector<PermissionRequest*>& requests) {
242 DCHECK(!requests.empty()); 265 DCHECK(!requests.empty());
243 266
244 PermissionRequestType permission_prompt_type = 267 PermissionRequestType permission_prompt_type =
245 PermissionRequestType::MULTIPLE; 268 PermissionRequestType::MULTIPLE;
246 if (requests.size() == 1) 269 PermissionRequestGestureType permission_gesture_type =
270 PermissionRequestGestureType::UNKNOWN;
271 if (requests.size() == 1) {
247 permission_prompt_type = requests[0]->GetPermissionRequestType(); 272 permission_prompt_type = requests[0]->GetPermissionRequestType();
273 permission_gesture_type = requests[0]->GetGestureType();
274 }
275
248 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type); 276 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type);
277 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
278 kPermissionsPromptShownGesture, kPermissionsPromptShownNoGesture,
279 permission_gesture_type, permission_prompt_type);
249 280
250 UMA_HISTOGRAM_ENUMERATION( 281 UMA_HISTOGRAM_ENUMERATION(
251 kPermissionsPromptRequestsPerPrompt, 282 kPermissionsPromptRequestsPerPrompt,
252 static_cast<base::HistogramBase::Sample>(requests.size()), 283 static_cast<base::HistogramBase::Sample>(requests.size()),
253 static_cast<base::HistogramBase::Sample>(10)); 284 static_cast<base::HistogramBase::Sample>(10));
254 285
255 if (requests.size() > 1) { 286 if (requests.size() > 1) {
256 for (const auto* request : requests) { 287 for (const auto* request : requests) {
257 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes, 288 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes,
258 request->GetPermissionRequestType()); 289 request->GetPermissionRequestType());
259 } 290 }
260 } 291 }
261 } 292 }
262 293
263 void PermissionUmaUtil::PermissionPromptAccepted( 294 void PermissionUmaUtil::PermissionPromptAccepted(
264 const std::vector<PermissionRequest*>& requests, 295 const std::vector<PermissionRequest*>& requests,
265 const std::vector<bool>& accept_states) { 296 const std::vector<bool>& accept_states) {
266 DCHECK(!requests.empty()); 297 DCHECK(!requests.empty());
267 DCHECK(requests.size() == accept_states.size()); 298 DCHECK(requests.size() == accept_states.size());
268 299
269 bool all_accepted = accept_states[0]; 300 bool all_accepted = accept_states[0];
270 PermissionRequestType permission_prompt_type = 301 PermissionRequestType permission_prompt_type =
271 requests[0]->GetPermissionRequestType(); 302 requests[0]->GetPermissionRequestType();
303 PermissionRequestGestureType permission_gesture_type =
304 requests[0]->GetGestureType();
272 if (requests.size() > 1) { 305 if (requests.size() > 1) {
273 permission_prompt_type = PermissionRequestType::MULTIPLE; 306 permission_prompt_type = PermissionRequestType::MULTIPLE;
307 permission_gesture_type = PermissionRequestGestureType::UNKNOWN;
274 for (size_t i = 0; i < requests.size(); ++i) { 308 for (size_t i = 0; i < requests.size(); ++i) {
275 const auto* request = requests[i]; 309 const auto* request = requests[i];
276 if (accept_states[i]) { 310 if (accept_states[i]) {
277 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted, 311 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted,
278 request->GetPermissionRequestType()); 312 request->GetPermissionRequestType());
279 } else { 313 } else {
280 all_accepted = false; 314 all_accepted = false;
281 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied, 315 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied,
282 request->GetPermissionRequestType()); 316 request->GetPermissionRequestType());
283 } 317 }
284 } 318 }
285 } 319 }
286 320
287 if (all_accepted) { 321 if (all_accepted) {
288 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, 322 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted,
289 permission_prompt_type); 323 permission_prompt_type);
324 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
325 kPermissionsPromptAcceptedGesture, kPermissionsPromptAcceptedNoGesture,
326 permission_gesture_type, permission_prompt_type);
290 } else { 327 } else {
291 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 328 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
292 permission_prompt_type); 329 permission_prompt_type);
330 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
331 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture,
332 permission_gesture_type, permission_prompt_type);
293 } 333 }
294 } 334 }
295 335
296 void PermissionUmaUtil::PermissionPromptDenied( 336 void PermissionUmaUtil::PermissionPromptDenied(
297 const std::vector<PermissionRequest*>& requests) { 337 const std::vector<PermissionRequest*>& requests) {
298 DCHECK(!requests.empty()); 338 DCHECK(!requests.empty());
299 DCHECK(requests.size() == 1); 339 DCHECK(requests.size() == 1);
300 340
301 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 341 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
302 requests[0]->GetPermissionRequestType()); 342 requests[0]->GetPermissionRequestType());
343 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
344 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture,
345 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType());
303 } 346 }
304 347
305 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) { 348 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) {
306 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 349 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
307 switches::kEnablePermissionActionReporting)) 350 switches::kEnablePermissionActionReporting))
308 return false; 351 return false;
309 352
310 DCHECK(profile); 353 DCHECK(profile);
311 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) 354 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE)
312 return false; 355 return false;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 if (!deprecated_metric.empty() && rappor_service) { 462 if (!deprecated_metric.empty() && rappor_service) {
420 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, 463 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric,
421 requesting_origin); 464 requesting_origin);
422 465
423 std::string rappor_metric = deprecated_metric + "2"; 466 std::string rappor_metric = deprecated_metric + "2";
424 rappor_service->RecordSample( 467 rappor_service->RecordSample(
425 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 468 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
426 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 469 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
427 } 470 }
428 } 471 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/permission_uma_util.h ('k') | chrome/browser/ui/website_settings/permission_bubble_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698