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

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

Issue 2791123002: Remove static_casts from PermissionUmaUtil histogram calls. (Closed)
Patch Set: Created 3 years, 8 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 | no next file » | 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 "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 12 matching lines...) Expand all
23 #include "components/browser_sync/profile_sync_service.h" 23 #include "components/browser_sync/profile_sync_service.h"
24 #include "components/prefs/pref_service.h" 24 #include "components/prefs/pref_service.h"
25 #include "components/rappor/public/rappor_utils.h" 25 #include "components/rappor/public/rappor_utils.h"
26 #include "components/rappor/rappor_service_impl.h" 26 #include "components/rappor/rappor_service_impl.h"
27 #include "content/public/browser/permission_type.h" 27 #include "content/public/browser/permission_type.h"
28 #include "content/public/common/origin_util.h" 28 #include "content/public/common/origin_util.h"
29 #include "url/gurl.h" 29 #include "url/gurl.h"
30 30
31 // UMA keys need to be statically initialized so plain function would not 31 // UMA keys need to be statically initialized so plain function would not
32 // work. Use macros instead. 32 // work. Use macros instead.
33 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ 33 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
34 permission_insecure, action) \ 34 permission_insecure, action) \
35 UMA_HISTOGRAM_ENUMERATION(permission, static_cast<int>(action), \ 35 UMA_HISTOGRAM_ENUMERATION(permission, action, PermissionAction::NUM); \
36 static_cast<int>(PermissionAction::NUM)); \ 36 if (secure_origin) { \
37 if (secure_origin) { \ 37 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
38 UMA_HISTOGRAM_ENUMERATION(permission_secure, static_cast<int>(action), \ 38 PermissionAction::NUM); \
39 static_cast<int>(PermissionAction::NUM)); \ 39 } else { \
40 } else { \ 40 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
41 UMA_HISTOGRAM_ENUMERATION(permission_insecure, static_cast<int>(action), \ 41 PermissionAction::NUM); \
42 static_cast<int>(PermissionAction::NUM)); \
43 } 42 }
44 43
45 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ 44 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \
46 UMA_HISTOGRAM_ENUMERATION( \ 45 UMA_HISTOGRAM_ENUMERATION(metric_name, permission_bubble_type, \
47 metric_name, \ 46 PermissionRequestType::NUM)
48 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \
49 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM))
50 47
51 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \ 48 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \
52 no_gesture_metric_name, \ 49 no_gesture_metric_name, \
53 gesture_type, \ 50 gesture_type, \
54 permission_bubble_type) \ 51 permission_bubble_type) \
55 if (gesture_type == PermissionRequestGestureType::GESTURE) { \ 52 if (gesture_type == PermissionRequestGestureType::GESTURE) { \
56 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \ 53 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \
57 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \ 54 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \
58 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \ 55 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \
59 permission_bubble_type); \ 56 permission_bubble_type); \
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 121 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
125 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 122 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
126 } 123 }
127 } 124 }
128 125
129 PermissionType permission; 126 PermissionType permission;
130 bool success = PermissionUtil::GetPermissionType(content_type, &permission); 127 bool success = PermissionUtil::GetPermissionType(content_type, &permission);
131 DCHECK(success); 128 DCHECK(success);
132 129
133 bool secure_origin = content::IsOriginSecure(requesting_origin); 130 bool secure_origin = content::IsOriginSecure(requesting_origin);
134 UMA_HISTOGRAM_ENUMERATION( 131 UMA_HISTOGRAM_ENUMERATION("ContentSettings.PermissionRequested", permission,
135 "ContentSettings.PermissionRequested", 132 PermissionType::NUM);
136 static_cast<base::HistogramBase::Sample>(permission),
137 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
138 if (secure_origin) { 133 if (secure_origin) {
139 UMA_HISTOGRAM_ENUMERATION( 134 UMA_HISTOGRAM_ENUMERATION(
140 "ContentSettings.PermissionRequested_SecureOrigin", 135 "ContentSettings.PermissionRequested_SecureOrigin", permission,
141 static_cast<base::HistogramBase::Sample>(permission), 136 PermissionType::NUM);
142 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
143 } else { 137 } else {
144 UMA_HISTOGRAM_ENUMERATION( 138 UMA_HISTOGRAM_ENUMERATION(
145 "ContentSettings.PermissionRequested_InsecureOrigin", 139 "ContentSettings.PermissionRequested_InsecureOrigin", permission,
146 static_cast<base::HistogramBase::Sample>(permission), 140 PermissionType::NUM);
147 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
148 } 141 }
149 } 142 }
150 143
151 } // anonymous namespace 144 } // anonymous namespace
152 145
153 // PermissionReportInfo ------------------------------------------------------- 146 // PermissionReportInfo -------------------------------------------------------
154 PermissionReportInfo::PermissionReportInfo( 147 PermissionReportInfo::PermissionReportInfo(
155 const GURL& origin, 148 const GURL& origin,
156 ContentSettingsType permission, 149 ContentSettingsType permission,
157 PermissionAction action, 150 PermissionAction action,
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 // applicable in prompt UIs where revocations are not possible. 316 // applicable in prompt UIs where revocations are not possible.
324 RecordPermissionAction(permission, PermissionAction::REVOKED, source_ui, 317 RecordPermissionAction(permission, PermissionAction::REVOKED, source_ui,
325 PermissionRequestGestureType::UNKNOWN, 318 PermissionRequestGestureType::UNKNOWN,
326 revoked_origin, profile); 319 revoked_origin, profile);
327 } 320 }
328 } 321 }
329 322
330 void PermissionUmaUtil::RecordEmbargoPromptSuppression( 323 void PermissionUmaUtil::RecordEmbargoPromptSuppression(
331 PermissionEmbargoStatus embargo_status) { 324 PermissionEmbargoStatus embargo_status) {
332 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoPromptSuppression", 325 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoPromptSuppression",
333 static_cast<int>(embargo_status), 326 embargo_status, PermissionEmbargoStatus::NUM);
334 static_cast<int>(PermissionEmbargoStatus::NUM));
335 } 327 }
336 328
337 void PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource( 329 void PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource(
338 PermissionStatusSource source) { 330 PermissionStatusSource source) {
339 // Explicitly switch to ensure that any new PermissionStatusSource values are 331 // Explicitly switch to ensure that any new PermissionStatusSource values are
340 // dealt with appropriately. 332 // dealt with appropriately.
341 switch (source) { 333 switch (source) {
342 case PermissionStatusSource::MULTIPLE_DISMISSALS: 334 case PermissionStatusSource::MULTIPLE_DISMISSALS:
343 PermissionUmaUtil::RecordEmbargoPromptSuppression( 335 PermissionUmaUtil::RecordEmbargoPromptSuppression(
344 PermissionEmbargoStatus::REPEATED_DISMISSALS); 336 PermissionEmbargoStatus::REPEATED_DISMISSALS);
345 break; 337 break;
346 case PermissionStatusSource::SAFE_BROWSING_BLACKLIST: 338 case PermissionStatusSource::SAFE_BROWSING_BLACKLIST:
347 PermissionUmaUtil::RecordEmbargoPromptSuppression( 339 PermissionUmaUtil::RecordEmbargoPromptSuppression(
348 PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING); 340 PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING);
349 break; 341 break;
350 case PermissionStatusSource::UNSPECIFIED: 342 case PermissionStatusSource::UNSPECIFIED:
351 case PermissionStatusSource::KILL_SWITCH: 343 case PermissionStatusSource::KILL_SWITCH:
352 // The permission wasn't under embargo, so don't record anything. We may 344 // The permission wasn't under embargo, so don't record anything. We may
353 // embargo it later. 345 // embargo it later.
354 break; 346 break;
355 } 347 }
356 } 348 }
357 349
358 void PermissionUmaUtil::RecordEmbargoStatus( 350 void PermissionUmaUtil::RecordEmbargoStatus(
359 PermissionEmbargoStatus embargo_status) { 351 PermissionEmbargoStatus embargo_status) {
360 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoStatus", 352 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoStatus",
361 static_cast<int>(embargo_status), 353 embargo_status, PermissionEmbargoStatus::NUM);
362 static_cast<int>(PermissionEmbargoStatus::NUM));
363 } 354 }
364 355
365 void PermissionUmaUtil::RecordSafeBrowsingResponse( 356 void PermissionUmaUtil::RecordSafeBrowsingResponse(
366 base::TimeDelta response_time, 357 base::TimeDelta response_time,
367 SafeBrowsingResponse response) { 358 SafeBrowsingResponse response) {
368 UMA_HISTOGRAM_TIMES("Permissions.AutoBlocker.SafeBrowsingResponseTime", 359 UMA_HISTOGRAM_TIMES("Permissions.AutoBlocker.SafeBrowsingResponseTime",
369 response_time); 360 response_time);
370 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.SafeBrowsingResponse", 361 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.SafeBrowsingResponse",
371 static_cast<int>(response), 362 response, SafeBrowsingResponse::NUM);
372 static_cast<int>(SafeBrowsingResponse::NUM));
373 } 363 }
374 364
375 void PermissionUmaUtil::PermissionPromptShown( 365 void PermissionUmaUtil::PermissionPromptShown(
376 const std::vector<PermissionRequest*>& requests) { 366 const std::vector<PermissionRequest*>& requests) {
377 DCHECK(!requests.empty()); 367 DCHECK(!requests.empty());
378 368
379 PermissionRequestType permission_prompt_type = 369 PermissionRequestType permission_prompt_type =
380 PermissionRequestType::MULTIPLE; 370 PermissionRequestType::MULTIPLE;
381 PermissionRequestGestureType permission_gesture_type = 371 PermissionRequestGestureType permission_gesture_type =
382 PermissionRequestGestureType::UNKNOWN; 372 PermissionRequestGestureType::UNKNOWN;
383 if (requests.size() == 1) { 373 if (requests.size() == 1) {
384 permission_prompt_type = requests[0]->GetPermissionRequestType(); 374 permission_prompt_type = requests[0]->GetPermissionRequestType();
385 permission_gesture_type = requests[0]->GetGestureType(); 375 permission_gesture_type = requests[0]->GetGestureType();
386 } 376 }
387 377
388 RecordPermissionPromptShown(permission_prompt_type, permission_gesture_type); 378 RecordPermissionPromptShown(permission_prompt_type, permission_gesture_type);
389 379
390 UMA_HISTOGRAM_ENUMERATION( 380 UMA_HISTOGRAM_ENUMERATION(kPermissionsPromptRequestsPerPrompt,
391 kPermissionsPromptRequestsPerPrompt, 381 requests.size(), 10);
392 static_cast<base::HistogramBase::Sample>(requests.size()),
393 static_cast<base::HistogramBase::Sample>(10));
394 382
395 if (requests.size() > 1) { 383 if (requests.size() > 1) {
396 for (const auto* request : requests) { 384 for (const auto* request : requests) {
397 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes, 385 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes,
398 request->GetPermissionRequestType()); 386 request->GetPermissionRequestType());
399 } 387 }
400 } 388 }
401 } 389 }
402 390
403 void PermissionUmaUtil::PermissionPromptAccepted( 391 void PermissionUmaUtil::PermissionPromptAccepted(
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 ->ui_manager()->ReportPermissionAction(report_info); 637 ->ui_manager()->ReportPermissionAction(report_info);
650 } 638 }
651 639
652 bool secure_origin = content::IsOriginSecure(requesting_origin); 640 bool secure_origin = content::IsOriginSecure(requesting_origin);
653 641
654 switch (permission) { 642 switch (permission) {
655 // Geolocation, MidiSysEx, Push, Durable Storage, and Media permissions are 643 // Geolocation, MidiSysEx, Push, Durable Storage, and Media permissions are
656 // disabled on insecure origins, so there's no need to record metrics for 644 // disabled on insecure origins, so there's no need to record metrics for
657 // secure/insecue. 645 // secure/insecue.
658 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 646 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
659 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.Geolocation", 647 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.Geolocation", action,
660 static_cast<int>(action), 648 PermissionAction::NUM);
661 static_cast<int>(PermissionAction::NUM));
662 break; 649 break;
663 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 650 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
664 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications", 651 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications",
665 "Permissions.Action.SecureOrigin.Notifications", 652 "Permissions.Action.SecureOrigin.Notifications",
666 "Permissions.Action.InsecureOrigin.Notifications", 653 "Permissions.Action.InsecureOrigin.Notifications",
667 action); 654 action);
668 break; 655 break;
669 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: 656 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
670 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.MidiSysEx", 657 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.MidiSysEx", action,
671 static_cast<int>(action), 658 PermissionAction::NUM);
672 static_cast<int>(PermissionAction::NUM));
673 break; 659 break;
674 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: 660 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
675 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.PushMessaging", 661 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.PushMessaging", action,
676 static_cast<int>(action), 662 PermissionAction::NUM);
677 static_cast<int>(PermissionAction::NUM));
678 break; 663 break;
679 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: 664 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER:
680 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia", 665 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia",
681 "Permissions.Action.SecureOrigin.ProtectedMedia", 666 "Permissions.Action.SecureOrigin.ProtectedMedia",
682 "Permissions.Action.InsecureOrigin.ProtectedMedia", 667 "Permissions.Action.InsecureOrigin.ProtectedMedia",
683 action); 668 action);
684 break; 669 break;
685 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: 670 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE:
686 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.DurableStorage", 671 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.DurableStorage", action,
687 static_cast<int>(action), 672 PermissionAction::NUM);
688 static_cast<int>(PermissionAction::NUM));
689 break; 673 break;
690 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: 674 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
691 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", 675 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", action,
692 static_cast<int>(action), 676 PermissionAction::NUM);
693 static_cast<int>(PermissionAction::NUM));
694 break; 677 break;
695 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: 678 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
696 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", 679 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", action,
697 static_cast<int>(action), 680 PermissionAction::NUM);
698 static_cast<int>(PermissionAction::NUM));
699 break; 681 break;
700 case CONTENT_SETTINGS_TYPE_PLUGINS: 682 case CONTENT_SETTINGS_TYPE_PLUGINS:
701 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash", 683 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash",
702 "Permissions.Action.SecureOrigin.Flash", 684 "Permissions.Action.SecureOrigin.Flash",
703 "Permissions.Action.InsecureOrigin.Flash", action); 685 "Permissions.Action.InsecureOrigin.Flash", action);
704 break; 686 break;
705 // The user is not prompted for these permissions, thus there is no 687 // The user is not prompted for these permissions, thus there is no
706 // permission action recorded for them. 688 // permission action recorded for them.
707 default: 689 default:
708 NOTREACHED() << "PERMISSION " 690 NOTREACHED() << "PERMISSION "
709 << PermissionUtil::GetPermissionString(permission) 691 << PermissionUtil::GetPermissionString(permission)
710 << " not accounted for"; 692 << " not accounted for";
711 } 693 }
712 694
713 const std::string rappor_metric = GetRapporMetric(permission, action); 695 const std::string rappor_metric = GetRapporMetric(permission, action);
714 rappor::RapporServiceImpl* rappor_service = 696 rappor::RapporServiceImpl* rappor_service =
715 g_browser_process->rappor_service(); 697 g_browser_process->rappor_service();
716 if (!rappor_metric.empty() && rappor_service) { 698 if (!rappor_metric.empty() && rappor_service) {
717 rappor_service->RecordSampleString( 699 rappor_service->RecordSampleString(
718 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 700 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
719 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 701 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
720 } 702 }
721 } 703 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698