| OLD | NEW |
| 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 13 matching lines...) Expand all Loading... |
| 24 #include "components/browser_sync/profile_sync_service.h" | 24 #include "components/browser_sync/profile_sync_service.h" |
| 25 #include "components/prefs/pref_service.h" | 25 #include "components/prefs/pref_service.h" |
| 26 #include "components/rappor/public/rappor_utils.h" | 26 #include "components/rappor/public/rappor_utils.h" |
| 27 #include "components/rappor/rappor_service_impl.h" | 27 #include "components/rappor/rappor_service_impl.h" |
| 28 #include "content/public/browser/permission_type.h" | 28 #include "content/public/browser/permission_type.h" |
| 29 #include "content/public/common/origin_util.h" | 29 #include "content/public/common/origin_util.h" |
| 30 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 31 | 31 |
| 32 // UMA keys need to be statically initialized so plain function would not | 32 // UMA keys need to be statically initialized so plain function would not |
| 33 // work. Use macros instead. | 33 // work. Use macros instead. |
| 34 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ | 34 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ |
| 35 permission_insecure, action) \ | 35 permission_insecure, action) \ |
| 36 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ | 36 UMA_HISTOGRAM_ENUMERATION(permission, static_cast<int>(action), \ |
| 37 if (secure_origin) { \ | 37 static_cast<int>(PermissionAction::NUM)); \ |
| 38 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ | 38 if (secure_origin) { \ |
| 39 PERMISSION_ACTION_NUM); \ | 39 UMA_HISTOGRAM_ENUMERATION(permission_secure, static_cast<int>(action), \ |
| 40 } else { \ | 40 static_cast<int>(PermissionAction::NUM)); \ |
| 41 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ | 41 } else { \ |
| 42 PERMISSION_ACTION_NUM); \ | 42 UMA_HISTOGRAM_ENUMERATION(permission_insecure, static_cast<int>(action), \ |
| 43 static_cast<int>(PermissionAction::NUM)); \ |
| 43 } | 44 } |
| 44 | 45 |
| 45 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ | 46 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ |
| 46 UMA_HISTOGRAM_ENUMERATION( \ | 47 UMA_HISTOGRAM_ENUMERATION( \ |
| 47 metric_name, \ | 48 metric_name, \ |
| 48 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ | 49 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ |
| 49 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM)) | 50 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM)) |
| 50 | 51 |
| 51 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \ | 52 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \ |
| 52 no_gesture_metric_name, \ | 53 no_gesture_metric_name, \ |
| 53 gesture_type, \ | 54 gesture_type, \ |
| 54 permission_bubble_type) \ | 55 permission_bubble_type) \ |
| 55 if (gesture_type == PermissionRequestGestureType::GESTURE) { \ | 56 if (gesture_type == PermissionRequestGestureType::GESTURE) { \ |
| 56 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \ | 57 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \ |
| 57 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \ | 58 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \ |
| 58 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \ | 59 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \ |
| 59 permission_bubble_type); \ | 60 permission_bubble_type); \ |
| 60 } | 61 } |
| 61 | 62 |
| 62 using content::PermissionType; | 63 using content::PermissionType; |
| 63 | 64 |
| 64 namespace { | 65 namespace { |
| 65 | 66 |
| 66 const std::string GetRapporMetric(ContentSettingsType permission, | 67 const std::string GetRapporMetric(ContentSettingsType permission, |
| 67 PermissionAction action) { | 68 PermissionAction action) { |
| 68 std::string action_str; | 69 std::string action_str; |
| 69 switch (action) { | 70 switch (action) { |
| 70 case GRANTED: | 71 case PermissionAction::GRANTED: |
| 71 action_str = "Granted"; | 72 action_str = "Granted"; |
| 72 break; | 73 break; |
| 73 case DENIED: | 74 case PermissionAction::DENIED: |
| 74 action_str = "Denied"; | 75 action_str = "Denied"; |
| 75 break; | 76 break; |
| 76 case DISMISSED: | 77 case PermissionAction::DISMISSED: |
| 77 action_str = "Dismissed"; | 78 action_str = "Dismissed"; |
| 78 break; | 79 break; |
| 79 case IGNORED: | 80 case PermissionAction::IGNORED: |
| 80 action_str = "Ignored"; | 81 action_str = "Ignored"; |
| 81 break; | 82 break; |
| 82 case REVOKED: | 83 case PermissionAction::REVOKED: |
| 83 action_str = "Revoked"; | 84 action_str = "Revoked"; |
| 84 break; | 85 break; |
| 85 default: | 86 default: |
| 86 NOTREACHED(); | 87 NOTREACHED(); |
| 87 break; | 88 break; |
| 88 } | 89 } |
| 89 | 90 |
| 90 std::string permission_str = PermissionUtil::GetPermissionString(permission); | 91 std::string permission_str = PermissionUtil::GetPermissionString(permission); |
| 91 if (permission_str.empty()) | 92 if (permission_str.empty()) |
| 92 return ""; | 93 return ""; |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 profile); | 273 profile); |
| 273 } | 274 } |
| 274 | 275 |
| 275 void PermissionUmaUtil::PermissionGranted( | 276 void PermissionUmaUtil::PermissionGranted( |
| 276 ContentSettingsType permission, | 277 ContentSettingsType permission, |
| 277 PermissionRequestGestureType gesture_type, | 278 PermissionRequestGestureType gesture_type, |
| 278 const GURL& requesting_origin, | 279 const GURL& requesting_origin, |
| 279 Profile* profile) { | 280 Profile* profile) { |
| 280 PermissionDecisionAutoBlocker* autoblocker = | 281 PermissionDecisionAutoBlocker* autoblocker = |
| 281 PermissionDecisionAutoBlocker::GetForProfile(profile); | 282 PermissionDecisionAutoBlocker::GetForProfile(profile); |
| 282 RecordPermissionAction(permission, GRANTED, PermissionSourceUI::PROMPT, | 283 RecordPermissionAction(permission, PermissionAction::GRANTED, |
| 283 gesture_type, requesting_origin, profile); | 284 PermissionSourceUI::PROMPT, gesture_type, |
| 285 requesting_origin, profile); |
| 284 RecordPermissionPromptPriorCount( | 286 RecordPermissionPromptPriorCount( |
| 285 permission, kPermissionsPromptAcceptedPriorDismissCountPrefix, | 287 permission, kPermissionsPromptAcceptedPriorDismissCountPrefix, |
| 286 autoblocker->GetDismissCount(requesting_origin, permission)); | 288 autoblocker->GetDismissCount(requesting_origin, permission)); |
| 287 RecordPermissionPromptPriorCount( | 289 RecordPermissionPromptPriorCount( |
| 288 permission, kPermissionsPromptAcceptedPriorIgnoreCountPrefix, | 290 permission, kPermissionsPromptAcceptedPriorIgnoreCountPrefix, |
| 289 autoblocker->GetIgnoreCount(requesting_origin, permission)); | 291 autoblocker->GetIgnoreCount(requesting_origin, permission)); |
| 290 } | 292 } |
| 291 | 293 |
| 292 void PermissionUmaUtil::PermissionDenied( | 294 void PermissionUmaUtil::PermissionDenied( |
| 293 ContentSettingsType permission, | 295 ContentSettingsType permission, |
| 294 PermissionRequestGestureType gesture_type, | 296 PermissionRequestGestureType gesture_type, |
| 295 const GURL& requesting_origin, | 297 const GURL& requesting_origin, |
| 296 Profile* profile) { | 298 Profile* profile) { |
| 297 PermissionDecisionAutoBlocker* autoblocker = | 299 PermissionDecisionAutoBlocker* autoblocker = |
| 298 PermissionDecisionAutoBlocker::GetForProfile(profile); | 300 PermissionDecisionAutoBlocker::GetForProfile(profile); |
| 299 RecordPermissionAction(permission, DENIED, PermissionSourceUI::PROMPT, | 301 RecordPermissionAction(permission, PermissionAction::DENIED, |
| 300 gesture_type, requesting_origin, profile); | 302 PermissionSourceUI::PROMPT, gesture_type, |
| 303 requesting_origin, profile); |
| 301 RecordPermissionPromptPriorCount( | 304 RecordPermissionPromptPriorCount( |
| 302 permission, kPermissionsPromptDeniedPriorDismissCountPrefix, | 305 permission, kPermissionsPromptDeniedPriorDismissCountPrefix, |
| 303 autoblocker->GetDismissCount(requesting_origin, permission)); | 306 autoblocker->GetDismissCount(requesting_origin, permission)); |
| 304 RecordPermissionPromptPriorCount( | 307 RecordPermissionPromptPriorCount( |
| 305 permission, kPermissionsPromptDeniedPriorIgnoreCountPrefix, | 308 permission, kPermissionsPromptDeniedPriorIgnoreCountPrefix, |
| 306 autoblocker->GetIgnoreCount(requesting_origin, permission)); | 309 autoblocker->GetIgnoreCount(requesting_origin, permission)); |
| 307 } | 310 } |
| 308 | 311 |
| 309 void PermissionUmaUtil::PermissionDismissed( | 312 void PermissionUmaUtil::PermissionDismissed( |
| 310 ContentSettingsType permission, | 313 ContentSettingsType permission, |
| 311 PermissionRequestGestureType gesture_type, | 314 PermissionRequestGestureType gesture_type, |
| 312 const GURL& requesting_origin, | 315 const GURL& requesting_origin, |
| 313 Profile* profile) { | 316 Profile* profile) { |
| 314 PermissionDecisionAutoBlocker* autoblocker = | 317 PermissionDecisionAutoBlocker* autoblocker = |
| 315 PermissionDecisionAutoBlocker::GetForProfile(profile); | 318 PermissionDecisionAutoBlocker::GetForProfile(profile); |
| 316 RecordPermissionAction(permission, DISMISSED, PermissionSourceUI::PROMPT, | 319 RecordPermissionAction(permission, PermissionAction::DISMISSED, |
| 317 gesture_type, requesting_origin, profile); | 320 PermissionSourceUI::PROMPT, gesture_type, |
| 321 requesting_origin, profile); |
| 318 RecordPermissionPromptPriorCount( | 322 RecordPermissionPromptPriorCount( |
| 319 permission, kPermissionsPromptDismissedPriorDismissCountPrefix, | 323 permission, kPermissionsPromptDismissedPriorDismissCountPrefix, |
| 320 autoblocker->GetDismissCount(requesting_origin, permission)); | 324 autoblocker->GetDismissCount(requesting_origin, permission)); |
| 321 RecordPermissionPromptPriorCount( | 325 RecordPermissionPromptPriorCount( |
| 322 permission, kPermissionsPromptDismissedPriorIgnoreCountPrefix, | 326 permission, kPermissionsPromptDismissedPriorIgnoreCountPrefix, |
| 323 autoblocker->GetIgnoreCount(requesting_origin, permission)); | 327 autoblocker->GetIgnoreCount(requesting_origin, permission)); |
| 324 } | 328 } |
| 325 | 329 |
| 326 void PermissionUmaUtil::PermissionIgnored( | 330 void PermissionUmaUtil::PermissionIgnored( |
| 327 ContentSettingsType permission, | 331 ContentSettingsType permission, |
| 328 PermissionRequestGestureType gesture_type, | 332 PermissionRequestGestureType gesture_type, |
| 329 const GURL& requesting_origin, | 333 const GURL& requesting_origin, |
| 330 Profile* profile) { | 334 Profile* profile) { |
| 331 PermissionDecisionAutoBlocker* autoblocker = | 335 PermissionDecisionAutoBlocker* autoblocker = |
| 332 PermissionDecisionAutoBlocker::GetForProfile(profile); | 336 PermissionDecisionAutoBlocker::GetForProfile(profile); |
| 333 RecordPermissionAction(permission, IGNORED, PermissionSourceUI::PROMPT, | 337 RecordPermissionAction(permission, PermissionAction::IGNORED, |
| 334 gesture_type, requesting_origin, profile); | 338 PermissionSourceUI::PROMPT, gesture_type, |
| 339 requesting_origin, profile); |
| 335 RecordPermissionPromptPriorCount( | 340 RecordPermissionPromptPriorCount( |
| 336 permission, kPermissionsPromptIgnoredPriorDismissCountPrefix, | 341 permission, kPermissionsPromptIgnoredPriorDismissCountPrefix, |
| 337 autoblocker->GetDismissCount(requesting_origin, permission)); | 342 autoblocker->GetDismissCount(requesting_origin, permission)); |
| 338 RecordPermissionPromptPriorCount( | 343 RecordPermissionPromptPriorCount( |
| 339 permission, kPermissionsPromptIgnoredPriorIgnoreCountPrefix, | 344 permission, kPermissionsPromptIgnoredPriorIgnoreCountPrefix, |
| 340 autoblocker->GetIgnoreCount(requesting_origin, permission)); | 345 autoblocker->GetIgnoreCount(requesting_origin, permission)); |
| 341 | 346 |
| 342 // RecordPermission* methods need to be called before RecordIgnore in the | 347 // RecordPermission* methods need to be called before RecordIgnore in the |
| 343 // blocker because they record the number of prior ignore and dismiss values, | 348 // blocker because they record the number of prior ignore and dismiss values, |
| 344 // and we don't want to include the current ignore. | 349 // and we don't want to include the current ignore. |
| 345 autoblocker->RecordIgnore(requesting_origin, permission); | 350 autoblocker->RecordIgnore(requesting_origin, permission); |
| 346 } | 351 } |
| 347 | 352 |
| 348 void PermissionUmaUtil::PermissionRevoked(ContentSettingsType permission, | 353 void PermissionUmaUtil::PermissionRevoked(ContentSettingsType permission, |
| 349 PermissionSourceUI source_ui, | 354 PermissionSourceUI source_ui, |
| 350 const GURL& revoked_origin, | 355 const GURL& revoked_origin, |
| 351 Profile* profile) { | 356 Profile* profile) { |
| 352 // TODO(tsergeant): Expand metrics definitions for revocation to include all | 357 // TODO(tsergeant): Expand metrics definitions for revocation to include all |
| 353 // permissions. | 358 // permissions. |
| 354 if (permission == CONTENT_SETTINGS_TYPE_NOTIFICATIONS || | 359 if (permission == CONTENT_SETTINGS_TYPE_NOTIFICATIONS || |
| 355 permission == CONTENT_SETTINGS_TYPE_GEOLOCATION || | 360 permission == CONTENT_SETTINGS_TYPE_GEOLOCATION || |
| 356 permission == CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC || | 361 permission == CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC || |
| 357 permission == CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) { | 362 permission == CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) { |
| 358 // An unknown gesture type is passed in since gesture type is only | 363 // An unknown gesture type is passed in since gesture type is only |
| 359 // applicable in prompt UIs where revocations are not possible. | 364 // applicable in prompt UIs where revocations are not possible. |
| 360 RecordPermissionAction(permission, REVOKED, source_ui, | 365 RecordPermissionAction(permission, PermissionAction::REVOKED, source_ui, |
| 361 PermissionRequestGestureType::UNKNOWN, | 366 PermissionRequestGestureType::UNKNOWN, |
| 362 revoked_origin, profile); | 367 revoked_origin, profile); |
| 363 } | 368 } |
| 364 } | 369 } |
| 365 | 370 |
| 366 void PermissionUmaUtil::RecordEmbargoPromptSuppression( | 371 void PermissionUmaUtil::RecordEmbargoPromptSuppression( |
| 367 PermissionEmbargoStatus embargo_status) { | 372 PermissionEmbargoStatus embargo_status) { |
| 368 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoPromptSuppression", | 373 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoPromptSuppression", |
| 369 embargo_status, | 374 static_cast<int>(embargo_status), |
| 370 PermissionEmbargoStatus::STATUS_NUM); | 375 static_cast<int>(PermissionEmbargoStatus::NUM)); |
| 371 } | 376 } |
| 372 | 377 |
| 373 void PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource( | 378 void PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource( |
| 374 PermissionStatusSource source) { | 379 PermissionStatusSource source) { |
| 375 // Explicitly switch to ensure that any new PermissionStatusSource values are | 380 // Explicitly switch to ensure that any new PermissionStatusSource values are |
| 376 // dealt with appropriately. | 381 // dealt with appropriately. |
| 377 switch (source) { | 382 switch (source) { |
| 378 case PermissionStatusSource::MULTIPLE_DISMISSALS: | 383 case PermissionStatusSource::MULTIPLE_DISMISSALS: |
| 379 PermissionUmaUtil::RecordEmbargoPromptSuppression( | 384 PermissionUmaUtil::RecordEmbargoPromptSuppression( |
| 380 PermissionEmbargoStatus::REPEATED_DISMISSALS); | 385 PermissionEmbargoStatus::REPEATED_DISMISSALS); |
| 381 break; | 386 break; |
| 382 case PermissionStatusSource::SAFE_BROWSING_BLACKLIST: | 387 case PermissionStatusSource::SAFE_BROWSING_BLACKLIST: |
| 383 PermissionUmaUtil::RecordEmbargoPromptSuppression( | 388 PermissionUmaUtil::RecordEmbargoPromptSuppression( |
| 384 PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING); | 389 PermissionEmbargoStatus::PERMISSIONS_BLACKLISTING); |
| 385 break; | 390 break; |
| 386 case PermissionStatusSource::UNSPECIFIED: | 391 case PermissionStatusSource::UNSPECIFIED: |
| 387 case PermissionStatusSource::KILL_SWITCH: | 392 case PermissionStatusSource::KILL_SWITCH: |
| 388 // The permission wasn't under embargo, so don't record anything. We may | 393 // The permission wasn't under embargo, so don't record anything. We may |
| 389 // embargo it later. | 394 // embargo it later. |
| 390 break; | 395 break; |
| 391 } | 396 } |
| 392 } | 397 } |
| 393 | 398 |
| 394 void PermissionUmaUtil::RecordEmbargoStatus( | 399 void PermissionUmaUtil::RecordEmbargoStatus( |
| 395 PermissionEmbargoStatus embargo_status) { | 400 PermissionEmbargoStatus embargo_status) { |
| 396 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoStatus", | 401 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.EmbargoStatus", |
| 397 embargo_status, | 402 static_cast<int>(embargo_status), |
| 398 PermissionEmbargoStatus::STATUS_NUM); | 403 static_cast<int>(PermissionEmbargoStatus::NUM)); |
| 399 } | 404 } |
| 400 | 405 |
| 401 void PermissionUmaUtil::RecordSafeBrowsingResponse( | 406 void PermissionUmaUtil::RecordSafeBrowsingResponse( |
| 402 base::TimeDelta response_time, | 407 base::TimeDelta response_time, |
| 403 SafeBrowsingResponse response) { | 408 SafeBrowsingResponse response) { |
| 404 UMA_HISTOGRAM_TIMES("Permissions.AutoBlocker.SafeBrowsingResponseTime", | 409 UMA_HISTOGRAM_TIMES("Permissions.AutoBlocker.SafeBrowsingResponseTime", |
| 405 response_time); | 410 response_time); |
| 406 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.SafeBrowsingResponse", | 411 UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.SafeBrowsingResponse", |
| 407 response, SafeBrowsingResponse::RESPONSE_NUM); | 412 static_cast<int>(response), |
| 413 static_cast<int>(SafeBrowsingResponse::NUM)); |
| 408 } | 414 } |
| 409 | 415 |
| 410 void PermissionUmaUtil::PermissionPromptShown( | 416 void PermissionUmaUtil::PermissionPromptShown( |
| 411 const std::vector<PermissionRequest*>& requests) { | 417 const std::vector<PermissionRequest*>& requests) { |
| 412 DCHECK(!requests.empty()); | 418 DCHECK(!requests.empty()); |
| 413 | 419 |
| 414 PermissionRequestType permission_prompt_type = | 420 PermissionRequestType permission_prompt_type = |
| 415 PermissionRequestType::MULTIPLE; | 421 PermissionRequestType::MULTIPLE; |
| 416 PermissionRequestGestureType permission_gesture_type = | 422 PermissionRequestGestureType permission_gesture_type = |
| 417 PermissionRequestGestureType::UNKNOWN; | 423 PermissionRequestGestureType::UNKNOWN; |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 break; | 725 break; |
| 720 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: | 726 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: |
| 721 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.DurableStorage", | 727 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.DurableStorage", |
| 722 "Permissions.Action.SecureOrigin.DurableStorage", | 728 "Permissions.Action.SecureOrigin.DurableStorage", |
| 723 "Permissions.Action.InsecureOrigin.DurableStorage", | 729 "Permissions.Action.InsecureOrigin.DurableStorage", |
| 724 action); | 730 action); |
| 725 break; | 731 break; |
| 726 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: | 732 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: |
| 727 // Media permissions are disabled on insecure origins, so there's no | 733 // Media permissions are disabled on insecure origins, so there's no |
| 728 // need to record metrics for secure/insecue. | 734 // need to record metrics for secure/insecue. |
| 729 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", action, | 735 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.AudioCapture", |
| 730 PERMISSION_ACTION_NUM); | 736 static_cast<int>(action), |
| 737 static_cast<int>(PermissionAction::NUM)); |
| 731 break; | 738 break; |
| 732 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: | 739 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: |
| 733 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", action, | 740 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.VideoCapture", |
| 734 PERMISSION_ACTION_NUM); | 741 static_cast<int>(action), |
| 742 static_cast<int>(PermissionAction::NUM)); |
| 735 break; | 743 break; |
| 736 case CONTENT_SETTINGS_TYPE_PLUGINS: | 744 case CONTENT_SETTINGS_TYPE_PLUGINS: |
| 737 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash", | 745 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash", |
| 738 "Permissions.Action.SecureOrigin.Flash", | 746 "Permissions.Action.SecureOrigin.Flash", |
| 739 "Permissions.Action.InsecureOrigin.Flash", action); | 747 "Permissions.Action.InsecureOrigin.Flash", action); |
| 740 break; | 748 break; |
| 741 // The user is not prompted for these permissions, thus there is no | 749 // The user is not prompted for these permissions, thus there is no |
| 742 // permission action recorded for them. | 750 // permission action recorded for them. |
| 743 default: | 751 default: |
| 744 NOTREACHED() << "PERMISSION " | 752 NOTREACHED() << "PERMISSION " |
| (...skipping 13 matching lines...) Expand all Loading... |
| 758 if (!deprecated_metric.empty() && rappor_service) { | 766 if (!deprecated_metric.empty() && rappor_service) { |
| 759 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, | 767 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, |
| 760 requesting_origin); | 768 requesting_origin); |
| 761 | 769 |
| 762 std::string rappor_metric = deprecated_metric + "2"; | 770 std::string rappor_metric = deprecated_metric + "2"; |
| 763 rappor_service->RecordSampleString( | 771 rappor_service->RecordSampleString( |
| 764 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 772 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 765 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 773 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 766 } | 774 } |
| 767 } | 775 } |
| OLD | NEW |