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

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: Add histograms 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/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 14 matching lines...) Expand all
25 permission_insecure, action) \ 25 permission_insecure, action) \
26 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ 26 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
27 if (secure_origin) { \ 27 if (secure_origin) { \
28 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ 28 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
29 PERMISSION_ACTION_NUM); \ 29 PERMISSION_ACTION_NUM); \
30 } else { \ 30 } else { \
31 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ 31 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
32 PERMISSION_ACTION_NUM); \ 32 PERMISSION_ACTION_NUM); \
33 } 33 }
34 34
35 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ 35 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \
36 UMA_HISTOGRAM_ENUMERATION( \ 36 UMA_HISTOGRAM_ENUMERATION( \
37 metric_name, \ 37 metric_name, \
38 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ 38 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \
39 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::NUM)) 39 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::NUM))
40
41 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \
42 no_gesture_metric_name, \
43 gesture_type, \
44 permission_bubble_type) \
45 if (gesture_type == PermissionBubbleGestureType::GESTURE) { \
46 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \
47 } else if (gesture_type == PermissionBubbleGestureType::NO_GESTURE) { \
48 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \
49 permission_bubble_type); \
50 }
40 51
41 using content::PermissionType; 52 using content::PermissionType;
42 53
43 namespace { 54 namespace {
44 55
45 const std::string GetRapporMetric(PermissionType permission, 56 const std::string GetRapporMetric(PermissionType permission,
46 PermissionAction action) { 57 PermissionAction action) {
47 std::string action_str; 58 std::string action_str;
48 switch (action) { 59 switch (action) {
49 case GRANTED: 60 case GRANTED:
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 } 264 }
254 265
255 } // anonymous namespace 266 } // anonymous namespace
256 267
257 const char PermissionUmaUtil::kPermissionsPromptShown[] = 268 const char PermissionUmaUtil::kPermissionsPromptShown[] =
258 "Permissions.Prompt.Shown"; 269 "Permissions.Prompt.Shown";
259 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = 270 const char PermissionUmaUtil::kPermissionsPromptAccepted[] =
260 "Permissions.Prompt.Accepted"; 271 "Permissions.Prompt.Accepted";
261 const char PermissionUmaUtil::kPermissionsPromptDenied[] = 272 const char PermissionUmaUtil::kPermissionsPromptDenied[] =
262 "Permissions.Prompt.Denied"; 273 "Permissions.Prompt.Denied";
274 const char PermissionUmaUtil::kPermissionsPromptGestureShown[] =
275 "Permissions.Prompt.Gesture.Shown";
276 const char PermissionUmaUtil::kPermissionsPromptGestureAccepted[] =
277 "Permissions.Prompt.Gesture.Accepted";
278 const char PermissionUmaUtil::kPermissionsPromptGestureDenied[] =
279 "Permissions.Prompt.Gesture.Denied";
280 const char PermissionUmaUtil::kPermissionsPromptNoGestureShown[] =
281 "Permissions.Prompt.NoGesture.Shown";
282 const char PermissionUmaUtil::kPermissionsPromptNoGestureAccepted[] =
283 "Permissions.Prompt.NoGesture.Accepted";
284 const char PermissionUmaUtil::kPermissionsPromptNoGestureDenied[] =
285 "Permissions.Prompt.NoGesture.Denied";
263 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = 286 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
264 "Permissions.Prompt.RequestsPerPrompt"; 287 "Permissions.Prompt.RequestsPerPrompt";
265 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = 288 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] =
266 "Permissions.Prompt.MergedBubbleTypes"; 289 "Permissions.Prompt.MergedBubbleTypes";
267 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = 290 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] =
268 "Permissions.Prompt.MergedBubbleAccepted"; 291 "Permissions.Prompt.MergedBubbleAccepted";
269 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = 292 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] =
270 "Permissions.Prompt.MergedBubbleDenied"; 293 "Permissions.Prompt.MergedBubbleDenied";
271 294
272 // Make sure you update histograms.xml permission histogram_suffix if you 295 // Make sure you update histograms.xml permission histogram_suffix if you
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 permission == PermissionType::VIDEO_CAPTURE) { 332 permission == PermissionType::VIDEO_CAPTURE) {
310 RecordPermissionAction(permission, REVOKED, revoked_origin); 333 RecordPermissionAction(permission, REVOKED, revoked_origin);
311 } 334 }
312 } 335 }
313 336
314 void PermissionUmaUtil::PermissionPromptShown( 337 void PermissionUmaUtil::PermissionPromptShown(
315 const std::vector<PermissionBubbleRequest*>& requests) { 338 const std::vector<PermissionBubbleRequest*>& requests) {
316 DCHECK(!requests.empty()); 339 DCHECK(!requests.empty());
317 340
318 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE; 341 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE;
319 if (requests.size() == 1) 342 PermissionBubbleGestureType permission_gesture_type =
343 PermissionBubbleGestureType::UNKNOWN;
344 if (requests.size() == 1) {
320 permission_prompt_type = requests[0]->GetPermissionBubbleType(); 345 permission_prompt_type = requests[0]->GetPermissionBubbleType();
346 permission_gesture_type = requests[0]->GetGestureType();
347 }
348
321 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type); 349 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type);
350 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
351 kPermissionsPromptGestureShown, kPermissionsPromptNoGestureShown,
352 permission_gesture_type, permission_prompt_type);
322 353
323 UMA_HISTOGRAM_ENUMERATION( 354 UMA_HISTOGRAM_ENUMERATION(
324 kPermissionsPromptRequestsPerPrompt, 355 kPermissionsPromptRequestsPerPrompt,
325 static_cast<base::HistogramBase::Sample>(requests.size()), 356 static_cast<base::HistogramBase::Sample>(requests.size()),
326 static_cast<base::HistogramBase::Sample>(10)); 357 static_cast<base::HistogramBase::Sample>(10));
327 358
328 if (requests.size() > 1) { 359 if (requests.size() > 1) {
329 for (const auto* request : requests) { 360 for (const auto* request : requests) {
330 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes, 361 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes,
331 request->GetPermissionBubbleType()); 362 request->GetPermissionBubbleType());
332 } 363 }
333 } 364 }
334 } 365 }
335 366
336 void PermissionUmaUtil::PermissionPromptAccepted( 367 void PermissionUmaUtil::PermissionPromptAccepted(
337 const std::vector<PermissionBubbleRequest*>& requests, 368 const std::vector<PermissionBubbleRequest*>& requests,
338 const std::vector<bool>& accept_states) { 369 const std::vector<bool>& accept_states) {
339 DCHECK(!requests.empty()); 370 DCHECK(!requests.empty());
340 DCHECK(requests.size() == accept_states.size()); 371 DCHECK(requests.size() == accept_states.size());
341 372
342 bool all_accepted = accept_states[0]; 373 bool all_accepted = accept_states[0];
343 PermissionBubbleType permission_prompt_type = 374 PermissionBubbleType permission_prompt_type =
344 requests[0]->GetPermissionBubbleType(); 375 requests[0]->GetPermissionBubbleType();
376 PermissionBubbleGestureType permission_gesture_type =
377 requests[0]->GetGestureType();
345 if (requests.size() > 1) { 378 if (requests.size() > 1) {
346 permission_prompt_type = PermissionBubbleType::MULTIPLE; 379 permission_prompt_type = PermissionBubbleType::MULTIPLE;
380 permission_gesture_type = PermissionBubbleGestureType::UNKNOWN;
347 for (size_t i = 0; i < requests.size(); ++i) { 381 for (size_t i = 0; i < requests.size(); ++i) {
348 const auto* request = requests[i]; 382 const auto* request = requests[i];
349 if (accept_states[i]) { 383 if (accept_states[i]) {
350 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted, 384 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted,
351 request->GetPermissionBubbleType()); 385 request->GetPermissionBubbleType());
352 } else { 386 } else {
353 all_accepted = false; 387 all_accepted = false;
354 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied, 388 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied,
355 request->GetPermissionBubbleType()); 389 request->GetPermissionBubbleType());
356 } 390 }
357 } 391 }
358 } 392 }
359 393
360 if (all_accepted) { 394 if (all_accepted) {
361 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, 395 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted,
362 permission_prompt_type); 396 permission_prompt_type);
397 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
398 kPermissionsPromptGestureAccepted, kPermissionsPromptNoGestureAccepted,
399 permission_gesture_type, permission_prompt_type);
363 } else { 400 } else {
364 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 401 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
365 permission_prompt_type); 402 permission_prompt_type);
403 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
404 kPermissionsPromptGestureDenied, kPermissionsPromptNoGestureDenied,
405 permission_gesture_type, permission_prompt_type);
366 } 406 }
367 } 407 }
368 408
369 void PermissionUmaUtil::PermissionPromptDenied( 409 void PermissionUmaUtil::PermissionPromptDenied(
370 const std::vector<PermissionBubbleRequest*>& requests) { 410 const std::vector<PermissionBubbleRequest*>& requests) {
371 DCHECK(!requests.empty()); 411 DCHECK(!requests.empty());
372 DCHECK(requests.size() == 1); 412 DCHECK(requests.size() == 1);
373 413
374 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 414 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
375 requests[0]->GetPermissionBubbleType()); 415 requests[0]->GetPermissionBubbleType());
416 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
417 kPermissionsPromptGestureDenied, kPermissionsPromptNoGestureDenied,
418 requests[0]->GetGestureType(), requests[0]->GetPermissionBubbleType());
376 } 419 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698