Chromium Code Reviews| 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 78 action_str = "Ignored"; | 78 action_str = "Ignored"; |
| 79 break; | 79 break; |
| 80 case REVOKED: | 80 case REVOKED: |
| 81 action_str = "Revoked"; | 81 action_str = "Revoked"; |
| 82 break; | 82 break; |
| 83 default: | 83 default: |
| 84 NOTREACHED(); | 84 NOTREACHED(); |
| 85 break; | 85 break; |
| 86 } | 86 } |
| 87 | 87 |
| 88 std::string permission_str = | 88 std::string permission_str = PermissionUtil::GetPermissionString(permission); |
| 89 PermissionUtil::GetPermissionString(permission); | |
| 90 if (permission_str.empty()) | 89 if (permission_str.empty()) |
| 91 return ""; | 90 return ""; |
| 92 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", | 91 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", |
| 93 permission_str.c_str(), action_str.c_str()); | 92 permission_str.c_str(), action_str.c_str()); |
| 94 } | 93 } |
| 95 | 94 |
| 96 void RecordPermissionRequest(PermissionType permission, | 95 void RecordPermissionRequest(PermissionType permission, |
| 97 const GURL& requesting_origin, | 96 const GURL& requesting_origin, |
| 98 const GURL& embedding_origin, | 97 const GURL& embedding_origin, |
| 99 Profile* profile) { | 98 Profile* profile) { |
| 100 rappor::RapporService* rappor_service = g_browser_process->rappor_service(); | 99 rappor::RapporService* rappor_service = g_browser_process->rappor_service(); |
| 101 if (rappor_service) { | 100 if (rappor_service) { |
| 102 if (permission == PermissionType::GEOLOCATION) { | 101 if (permission == PermissionType::GEOLOCATION) { |
| 103 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 102 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 104 rappor::SampleDomainAndRegistryFromGURL( | 103 rappor::SampleDomainAndRegistryFromGURL( |
| 105 rappor_service, | 104 rappor_service, "ContentSettings.PermissionRequested.Geolocation.Url", |
| 106 "ContentSettings.PermissionRequested.Geolocation.Url", | |
| 107 requesting_origin); | 105 requesting_origin); |
| 108 rappor_service->RecordSample( | 106 rappor_service->RecordSample( |
| 109 "ContentSettings.PermissionRequested.Geolocation.Url2", | 107 "ContentSettings.PermissionRequested.Geolocation.Url2", |
| 110 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 108 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 111 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 109 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 112 } else if (permission == PermissionType::NOTIFICATIONS) { | 110 } else if (permission == PermissionType::NOTIFICATIONS) { |
| 113 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 111 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 114 rappor::SampleDomainAndRegistryFromGURL( | 112 rappor::SampleDomainAndRegistryFromGURL( |
| 115 rappor_service, | 113 rappor_service, |
| 116 "ContentSettings.PermissionRequested.Notifications.Url", | 114 "ContentSettings.PermissionRequested.Notifications.Url", |
| 117 requesting_origin); | 115 requesting_origin); |
| 118 rappor_service->RecordSample( | 116 rappor_service->RecordSample( |
| 119 "ContentSettings.PermissionRequested.Notifications.Url2", | 117 "ContentSettings.PermissionRequested.Notifications.Url2", |
| 120 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 118 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 121 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 119 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 122 } else if (permission == PermissionType::MIDI || | 120 } else if (permission == PermissionType::MIDI || |
| 123 permission == PermissionType::MIDI_SYSEX) { | 121 permission == PermissionType::MIDI_SYSEX) { |
| 124 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 122 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 125 rappor::SampleDomainAndRegistryFromGURL( | 123 rappor::SampleDomainAndRegistryFromGURL( |
| 126 rappor_service, | 124 rappor_service, "ContentSettings.PermissionRequested.Midi.Url", |
| 127 "ContentSettings.PermissionRequested.Midi.Url", | |
| 128 requesting_origin); | 125 requesting_origin); |
| 129 rappor_service->RecordSample( | 126 rappor_service->RecordSample( |
| 130 "ContentSettings.PermissionRequested.Midi.Url2", | 127 "ContentSettings.PermissionRequested.Midi.Url2", |
| 131 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 128 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 132 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 129 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 133 } | 130 } |
| 134 } | 131 } |
| 135 | 132 |
| 136 bool secure_origin = content::IsOriginSecure(requesting_origin); | 133 bool secure_origin = content::IsOriginSecure(requesting_origin); |
| 137 UMA_HISTOGRAM_ENUMERATION( | 134 UMA_HISTOGRAM_ENUMERATION( |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 349 DCHECK(!requests.empty()); | 346 DCHECK(!requests.empty()); |
| 350 DCHECK(requests.size() == 1); | 347 DCHECK(requests.size() == 1); |
| 351 | 348 |
| 352 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, | 349 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, |
| 353 requests[0]->GetPermissionRequestType()); | 350 requests[0]->GetPermissionRequestType()); |
| 354 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( | 351 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( |
| 355 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture, | 352 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture, |
| 356 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); | 353 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); |
| 357 } | 354 } |
| 358 | 355 |
| 356 void PermissionUmaUtil::PermissionPromptGrantedWithPersistenceToggle( | |
| 357 content::PermissionType permission, | |
| 358 bool toggle_enabled) { | |
| 359 switch (permission) { | |
| 360 case PermissionType::GEOLOCATION: | |
| 361 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Granted.Persisted.Geolocation", | |
|
tsergeant
2016/08/11 00:21:50
Maybe change the histogram names to
Permissions.P
dominickn
2016/08/11 04:43:49
Done.
| |
| 362 toggle_enabled); | |
| 363 break; | |
| 364 case PermissionType::NOTIFICATIONS: | |
| 365 UMA_HISTOGRAM_BOOLEAN( | |
| 366 "Permissions.Prompt.Granted.Persisted.Notifications", toggle_enabled); | |
| 367 break; | |
| 368 case PermissionType::MIDI_SYSEX: | |
| 369 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Granted.Persisted.MidiSysEx", | |
| 370 toggle_enabled); | |
| 371 break; | |
| 372 case PermissionType::PUSH_MESSAGING: | |
| 373 UMA_HISTOGRAM_BOOLEAN( | |
| 374 "Permissions.Prompt.Granted.Persisted.PushMessaging", toggle_enabled); | |
| 375 break; | |
| 376 case PermissionType::PROTECTED_MEDIA_IDENTIFIER: | |
| 377 UMA_HISTOGRAM_BOOLEAN( | |
| 378 "Permissions.Prompt.Granted.Persisted.ProtectedMedia", | |
| 379 toggle_enabled); | |
| 380 break; | |
| 381 case PermissionType::DURABLE_STORAGE: | |
| 382 UMA_HISTOGRAM_BOOLEAN( | |
| 383 "Permissions.Prompt.Granted.Persisted.DurableStorage", | |
| 384 toggle_enabled); | |
| 385 break; | |
| 386 case PermissionType::AUDIO_CAPTURE: | |
| 387 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Granted.Persisted.AudioCapture", | |
| 388 toggle_enabled); | |
| 389 break; | |
| 390 case PermissionType::VIDEO_CAPTURE: | |
| 391 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Granted.Persisted.VideoCapture", | |
| 392 toggle_enabled); | |
| 393 break; | |
| 394 // The user is not prompted for these permissions, thus there is no | |
| 395 // grant recorded for them. | |
| 396 case PermissionType::MIDI: | |
| 397 case PermissionType::BACKGROUND_SYNC: | |
| 398 case PermissionType::NUM: | |
| 399 NOTREACHED() << "PERMISSION " | |
| 400 << PermissionUtil::GetPermissionString(permission) | |
| 401 << " not accounted for"; | |
| 402 } | |
| 403 } | |
| 404 | |
| 405 void PermissionUmaUtil::PermissionPromptDeniedWithPersistenceToggle( | |
| 406 content::PermissionType permission, | |
| 407 bool toggle_enabled) { | |
| 408 switch (permission) { | |
| 409 case PermissionType::GEOLOCATION: | |
| 410 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.Geolocation", | |
| 411 toggle_enabled); | |
| 412 break; | |
| 413 case PermissionType::NOTIFICATIONS: | |
| 414 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.Notifications", | |
| 415 toggle_enabled); | |
| 416 break; | |
| 417 case PermissionType::MIDI_SYSEX: | |
| 418 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.MidiSysEx", | |
| 419 toggle_enabled); | |
| 420 break; | |
| 421 case PermissionType::PUSH_MESSAGING: | |
| 422 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.PushMessaging", | |
| 423 toggle_enabled); | |
| 424 break; | |
| 425 case PermissionType::PROTECTED_MEDIA_IDENTIFIER: | |
| 426 UMA_HISTOGRAM_BOOLEAN( | |
| 427 "Permissions.Prompt.Denied.Persisted.ProtectedMedia", toggle_enabled); | |
| 428 break; | |
| 429 case PermissionType::DURABLE_STORAGE: | |
| 430 UMA_HISTOGRAM_BOOLEAN( | |
| 431 "Permissions.Prompt.Denied.Persisted.DurableStorage", toggle_enabled); | |
| 432 break; | |
| 433 case PermissionType::AUDIO_CAPTURE: | |
| 434 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.AudioCapture", | |
| 435 toggle_enabled); | |
| 436 break; | |
| 437 case PermissionType::VIDEO_CAPTURE: | |
| 438 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Denied.Persisted.VideoCapture", | |
| 439 toggle_enabled); | |
| 440 break; | |
| 441 // The user is not prompted for these permissions, thus there is no | |
| 442 // deny recorded for them. | |
| 443 case PermissionType::MIDI: | |
| 444 case PermissionType::BACKGROUND_SYNC: | |
| 445 case PermissionType::NUM: | |
| 446 NOTREACHED() << "PERMISSION " | |
| 447 << PermissionUtil::GetPermissionString(permission) | |
| 448 << " not accounted for"; | |
| 449 } | |
| 450 } | |
| 451 | |
| 359 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) { | 452 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) { |
| 360 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 453 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 361 switches::kEnablePermissionActionReporting)) | 454 switches::kEnablePermissionActionReporting)) |
| 362 return false; | 455 return false; |
| 363 | 456 |
| 364 DCHECK(profile); | 457 DCHECK(profile); |
| 365 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) | 458 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) |
| 366 return false; | 459 return false; |
| 367 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) | 460 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) |
| 368 return false; | 461 return false; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 472 if (!deprecated_metric.empty() && rappor_service) { | 565 if (!deprecated_metric.empty() && rappor_service) { |
| 473 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, | 566 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, |
| 474 requesting_origin); | 567 requesting_origin); |
| 475 | 568 |
| 476 std::string rappor_metric = deprecated_metric + "2"; | 569 std::string rappor_metric = deprecated_metric + "2"; |
| 477 rappor_service->RecordSample( | 570 rappor_service->RecordSample( |
| 478 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 571 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 479 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 572 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 480 } | 573 } |
| 481 } | 574 } |
| OLD | NEW |