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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 84 action_str = "Revoked"; | 84 action_str = "Revoked"; |
| 85 break; | 85 break; |
| 86 default: | 86 default: |
| 87 NOTREACHED(); | 87 NOTREACHED(); |
| 88 break; | 88 break; |
| 89 } | 89 } |
| 90 | 90 |
| 91 std::string permission_str = PermissionUtil::GetPermissionString(permission); | 91 std::string permission_str = PermissionUtil::GetPermissionString(permission); |
| 92 if (permission_str.empty()) | 92 if (permission_str.empty()) |
| 93 return ""; | 93 return ""; |
| 94 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", | 94 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url2", |
| 95 permission_str.c_str(), action_str.c_str()); | 95 permission_str.c_str(), action_str.c_str()); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void RecordPermissionRequest(PermissionType permission, | 98 void RecordPermissionRequest(PermissionType permission, |
| 99 const GURL& requesting_origin, | 99 const GURL& requesting_origin, |
| 100 const GURL& embedding_origin, | 100 const GURL& embedding_origin, |
| 101 Profile* profile) { | 101 Profile* profile) { |
| 102 rappor::RapporServiceImpl* rappor_service = | 102 rappor::RapporServiceImpl* rappor_service = |
| 103 g_browser_process->rappor_service(); | 103 g_browser_process->rappor_service(); |
| 104 if (rappor_service) { | 104 if (rappor_service) { |
| 105 if (permission == PermissionType::GEOLOCATION) { | 105 if (permission == PermissionType::GEOLOCATION) { |
| 106 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | |
| 107 rappor::SampleDomainAndRegistryFromGURL( | |
| 108 rappor_service, "ContentSettings.PermissionRequested.Geolocation.Url", | |
| 109 requesting_origin); | |
| 110 rappor_service->RecordSampleString( | 106 rappor_service->RecordSampleString( |
| 111 "ContentSettings.PermissionRequested.Geolocation.Url2", | 107 "ContentSettings.PermissionRequested.Geolocation.Url2", |
| 112 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 108 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 113 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 109 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 114 } else if (permission == PermissionType::NOTIFICATIONS) { | 110 } else if (permission == PermissionType::NOTIFICATIONS) { |
| 115 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | |
| 116 rappor::SampleDomainAndRegistryFromGURL( | |
| 117 rappor_service, | |
| 118 "ContentSettings.PermissionRequested.Notifications.Url", | |
| 119 requesting_origin); | |
| 120 rappor_service->RecordSampleString( | 111 rappor_service->RecordSampleString( |
| 121 "ContentSettings.PermissionRequested.Notifications.Url2", | 112 "ContentSettings.PermissionRequested.Notifications.Url2", |
| 122 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 113 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 123 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 114 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 124 } else if (permission == PermissionType::MIDI || | 115 } else if (permission == PermissionType::MIDI || |
| 125 permission == PermissionType::MIDI_SYSEX) { | 116 permission == PermissionType::MIDI_SYSEX) { |
| 126 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | |
| 127 rappor::SampleDomainAndRegistryFromGURL( | |
| 128 rappor_service, "ContentSettings.PermissionRequested.Midi.Url", | |
| 129 requesting_origin); | |
| 130 rappor_service->RecordSampleString( | 117 rappor_service->RecordSampleString( |
| 131 "ContentSettings.PermissionRequested.Midi.Url2", | 118 "ContentSettings.PermissionRequested.Midi.Url2", |
| 132 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 119 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 133 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 120 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 134 } else if (permission == PermissionType::PROTECTED_MEDIA_IDENTIFIER) { | 121 } else if (permission == PermissionType::PROTECTED_MEDIA_IDENTIFIER) { |
| 135 rappor_service->RecordSampleString( | 122 rappor_service->RecordSampleString( |
| 136 "ContentSettings.PermissionRequested.ProtectedMedia.Url2", | 123 "ContentSettings.PermissionRequested.ProtectedMedia.Url2", |
| 137 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 124 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 138 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 125 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 139 } | 126 } |
| 140 } | 127 } |
| 141 | 128 |
| 142 bool secure_origin = content::IsOriginSecure(requesting_origin); | 129 bool secure_origin = content::IsOriginSecure(requesting_origin); |
| 143 UMA_HISTOGRAM_ENUMERATION( | 130 UMA_HISTOGRAM_ENUMERATION( |
| 144 "ContentSettings.PermissionRequested", | 131 "ContentSettings.PermissionRequested", |
| 145 static_cast<base::HistogramBase::Sample>(permission), | 132 static_cast<base::HistogramBase::Sample>(permission), |
| 146 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 133 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 147 if (secure_origin) { | 134 if (secure_origin) { |
| 148 UMA_HISTOGRAM_ENUMERATION( | 135 UMA_HISTOGRAM_ENUMERATION( |
| 149 "ContentSettings.PermissionRequested_SecureOrigin", | 136 "ContentSettings.PermissionRequested_SecureOrigin", |
| 150 static_cast<base::HistogramBase::Sample>(permission), | 137 static_cast<base::HistogramBase::Sample>(permission), |
| 151 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 138 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 152 } else { | 139 } else { |
| 153 UMA_HISTOGRAM_ENUMERATION( | 140 UMA_HISTOGRAM_ENUMERATION( |
| 154 "ContentSettings.PermissionRequested_InsecureOrigin", | 141 "ContentSettings.PermissionRequested_InsecureOrigin", |
| 155 static_cast<base::HistogramBase::Sample>(permission), | 142 static_cast<base::HistogramBase::Sample>(permission), |
| 156 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 143 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 157 } | 144 } |
|
raymes
2017/02/23 05:54:57
Do you still use this one? The comment in histogra
dominickn
2017/02/23 06:11:43
I don't use it. Happy to remove. But I'm not sure
raymes
2017/02/23 06:30:55
Sending out a PSA sounds good. We don't have to bl
| |
| 158 | 145 |
| 159 // In order to gauge the compatibility risk of implementing an improved | 146 // In order to gauge the compatibility risk of implementing an improved |
| 160 // iframe permissions security model, we would like to know the ratio of | 147 // iframe permissions security model, we would like to know the ratio of |
| 161 // same-origin to cross-origin permission requests. Our estimate of this | 148 // same-origin to cross-origin permission requests. Our estimate of this |
| 162 // ratio could be somewhat biased by repeated requests coming from a | 149 // ratio could be somewhat biased by repeated requests coming from a |
| 163 // single frame, but we expect this to be insignificant. | 150 // single frame, but we expect this to be insignificant. |
| 164 if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) { | 151 if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) { |
| 165 content::PermissionManager* manager = profile->GetPermissionManager(); | 152 content::PermissionManager* manager = profile->GetPermissionManager(); |
| 166 if (!manager) | 153 if (!manager) |
| 167 return; | 154 return; |
| 168 blink::mojom::PermissionStatus embedding_permission_status = | 155 blink::mojom::PermissionStatus embedding_permission_status = |
| 169 manager->GetPermissionStatus(permission, embedding_origin, | 156 manager->GetPermissionStatus(permission, embedding_origin, |
| 170 embedding_origin); | 157 embedding_origin); |
| 171 | 158 |
| 172 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( | 159 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( |
| 173 "Permissions.Requested.CrossOrigin_" + | 160 "Permissions.Requested.CrossOrigin_" + |
| 174 PermissionUtil::GetPermissionString(permission), | 161 PermissionUtil::GetPermissionString(permission), |
| 175 1, static_cast<int>(blink::mojom::PermissionStatus::LAST), | 162 1, static_cast<int>(blink::mojom::PermissionStatus::LAST), |
| 176 static_cast<int>(blink::mojom::PermissionStatus::LAST) + 1, | 163 static_cast<int>(blink::mojom::PermissionStatus::LAST) + 1, |
| 177 base::HistogramBase::kUmaTargetedHistogramFlag); | 164 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 178 histogram->Add(static_cast<int>(embedding_permission_status)); | 165 histogram->Add(static_cast<int>(embedding_permission_status)); |
| 179 } else { | 166 } else { |
| 180 UMA_HISTOGRAM_ENUMERATION( | 167 UMA_HISTOGRAM_ENUMERATION( |
| 181 "Permissions.Requested.SameOrigin", | 168 "Permissions.Requested.SameOrigin", |
| 182 static_cast<base::HistogramBase::Sample>(permission), | 169 static_cast<base::HistogramBase::Sample>(permission), |
| 183 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 170 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 184 } | 171 } |
|
raymes
2017/02/23 05:54:57
Lines from here up to 146 can be removed.
dominickn
2017/02/23 06:11:43
Done.
| |
| 185 } | 172 } |
| 186 | 173 |
| 187 } // anonymous namespace | 174 } // anonymous namespace |
| 188 | 175 |
| 189 // PermissionReportInfo ------------------------------------------------------- | 176 // PermissionReportInfo ------------------------------------------------------- |
| 190 PermissionReportInfo::PermissionReportInfo( | 177 PermissionReportInfo::PermissionReportInfo( |
| 191 const GURL& origin, | 178 const GURL& origin, |
| 192 ContentSettingsType permission, | 179 ContentSettingsType permission, |
| 193 PermissionAction action, | 180 PermissionAction action, |
| 194 PermissionSourceUI source_ui, | 181 PermissionSourceUI source_ui, |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 693 autoblocker->GetDismissCount(requesting_origin, permission), | 680 autoblocker->GetDismissCount(requesting_origin, permission), |
| 694 autoblocker->GetIgnoreCount(requesting_origin, permission)); | 681 autoblocker->GetIgnoreCount(requesting_origin, permission)); |
| 695 g_browser_process->safe_browsing_service() | 682 g_browser_process->safe_browsing_service() |
| 696 ->ui_manager()->ReportPermissionAction(report_info); | 683 ->ui_manager()->ReportPermissionAction(report_info); |
| 697 } | 684 } |
| 698 | 685 |
| 699 bool secure_origin = content::IsOriginSecure(requesting_origin); | 686 bool secure_origin = content::IsOriginSecure(requesting_origin); |
| 700 | 687 |
| 701 switch (permission) { | 688 switch (permission) { |
| 702 case CONTENT_SETTINGS_TYPE_GEOLOCATION: | 689 case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
| 703 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Geolocation", | 690 // Geolocation is disabled on insecure origins, so there's no need to |
| 704 "Permissions.Action.SecureOrigin.Geolocation", | 691 // record metrics for secure/insecue. |
| 705 "Permissions.Action.InsecureOrigin.Geolocation", | 692 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.Geolocation", |
| 706 action); | 693 static_cast<int>(action), |
| 694 static_cast<int>(PermissionAction::NUM)); | |
| 707 break; | 695 break; |
| 708 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: | 696 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
| 709 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications", | 697 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications", |
| 710 "Permissions.Action.SecureOrigin.Notifications", | 698 "Permissions.Action.SecureOrigin.Notifications", |
| 711 "Permissions.Action.InsecureOrigin.Notifications", | 699 "Permissions.Action.InsecureOrigin.Notifications", |
| 712 action); | 700 action); |
| 713 break; | 701 break; |
| 714 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: | 702 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: |
| 715 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.MidiSysEx", | 703 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.MidiSysEx", |
| 716 "Permissions.Action.SecureOrigin.MidiSysEx", | 704 "Permissions.Action.SecureOrigin.MidiSysEx", |
| 717 "Permissions.Action.InsecureOrigin.MidiSysEx", | 705 "Permissions.Action.InsecureOrigin.MidiSysEx", |
| 718 action); | 706 action); |
| 719 break; | 707 break; |
| 720 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: | 708 case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING: |
| 721 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.PushMessaging", | 709 // Push messaging is disabled on insecure origins, so there's no need to |
| 722 "Permissions.Action.SecureOrigin.PushMessaging", | 710 // record metrics for secure/insecue. |
| 723 "Permissions.Action.InsecureOrigin.PushMessaging", | 711 UMA_HISTOGRAM_ENUMERATION("Permissions.Action.PushMessaging", |
| 724 action); | 712 static_cast<int>(action), |
| 713 static_cast<int>(PermissionAction::NUM)); | |
|
raymes
2017/02/23 05:54:57
Is there actually a benefit to changing these ones
dominickn
2017/02/23 06:11:42
It's mainly following the lead of the mediastream
raymes
2017/02/23 06:30:55
Ok, sounds good to me
| |
| 725 break; | 714 break; |
| 726 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: | 715 case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: |
| 727 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia", | 716 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia", |
| 728 "Permissions.Action.SecureOrigin.ProtectedMedia", | 717 "Permissions.Action.SecureOrigin.ProtectedMedia", |
| 729 "Permissions.Action.InsecureOrigin.ProtectedMedia", | 718 "Permissions.Action.InsecureOrigin.ProtectedMedia", |
| 730 action); | 719 action); |
| 731 break; | 720 break; |
| 732 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: | 721 case CONTENT_SETTINGS_TYPE_DURABLE_STORAGE: |
| 733 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.DurableStorage", | 722 PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.DurableStorage", |
| 734 "Permissions.Action.SecureOrigin.DurableStorage", | 723 "Permissions.Action.SecureOrigin.DurableStorage", |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 753 "Permissions.Action.InsecureOrigin.Flash", action); | 742 "Permissions.Action.InsecureOrigin.Flash", action); |
| 754 break; | 743 break; |
| 755 // The user is not prompted for these permissions, thus there is no | 744 // The user is not prompted for these permissions, thus there is no |
| 756 // permission action recorded for them. | 745 // permission action recorded for them. |
| 757 default: | 746 default: |
| 758 NOTREACHED() << "PERMISSION " | 747 NOTREACHED() << "PERMISSION " |
| 759 << PermissionUtil::GetPermissionString(permission) | 748 << PermissionUtil::GetPermissionString(permission) |
| 760 << " not accounted for"; | 749 << " not accounted for"; |
| 761 } | 750 } |
| 762 | 751 |
| 763 // Retrieve the name of the RAPPOR metric. Currently, the new metric name is | 752 const std::string rappor_metric = GetRapporMetric(permission, action); |
| 764 // the deprecated name with "2" on the end, e.g. | |
| 765 // ContentSettings.PermissionActions_Geolocation.Granted.Url2. For simplicity, | |
| 766 // we retrieve the deprecated name and append the "2" for the new name. | |
| 767 // TODO(dominickn): remove the deprecated metric and replace it solely with | |
| 768 // the new one in GetRapporMetric - crbug.com/605836. | |
| 769 const std::string deprecated_metric = GetRapporMetric(permission, action); | |
| 770 rappor::RapporServiceImpl* rappor_service = | 753 rappor::RapporServiceImpl* rappor_service = |
| 771 g_browser_process->rappor_service(); | 754 g_browser_process->rappor_service(); |
| 772 if (!deprecated_metric.empty() && rappor_service) { | 755 if (!rappor_metric.empty() && rappor_service) { |
| 773 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, | |
| 774 requesting_origin); | |
| 775 | |
| 776 std::string rappor_metric = deprecated_metric + "2"; | |
| 777 rappor_service->RecordSampleString( | 756 rappor_service->RecordSampleString( |
| 778 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 757 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 779 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 758 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 780 } | 759 } |
| 781 } | 760 } |
| OLD | NEW |