| 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 break; | 87 break; |
| 88 } | 88 } |
| 89 | 89 |
| 90 std::string permission_str = PermissionUtil::GetPermissionString(permission); | 90 std::string permission_str = PermissionUtil::GetPermissionString(permission); |
| 91 if (permission_str.empty()) | 91 if (permission_str.empty()) |
| 92 return ""; | 92 return ""; |
| 93 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", | 93 return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", |
| 94 permission_str.c_str(), action_str.c_str()); | 94 permission_str.c_str(), action_str.c_str()); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void RecordPermissionRequest(PermissionType permission, | 97 void RecordPermissionRequest(ContentSettingsType content_type, |
| 98 const GURL& requesting_origin, | 98 const GURL& requesting_origin, |
| 99 const GURL& embedding_origin, | 99 const GURL& embedding_origin, |
| 100 Profile* profile) { | 100 Profile* profile) { |
| 101 rappor::RapporServiceImpl* rappor_service = | 101 rappor::RapporServiceImpl* rappor_service = |
| 102 g_browser_process->rappor_service(); | 102 g_browser_process->rappor_service(); |
| 103 if (rappor_service) { | 103 if (rappor_service) { |
| 104 if (permission == PermissionType::GEOLOCATION) { | 104 if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { |
| 105 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 105 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 106 rappor::SampleDomainAndRegistryFromGURL( | 106 rappor::SampleDomainAndRegistryFromGURL( |
| 107 rappor_service, "ContentSettings.PermissionRequested.Geolocation.Url", | 107 rappor_service, "ContentSettings.PermissionRequested.Geolocation.Url", |
| 108 requesting_origin); | 108 requesting_origin); |
| 109 rappor_service->RecordSampleString( | 109 rappor_service->RecordSampleString( |
| 110 "ContentSettings.PermissionRequested.Geolocation.Url2", | 110 "ContentSettings.PermissionRequested.Geolocation.Url2", |
| 111 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 111 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 112 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 112 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 113 } else if (permission == PermissionType::NOTIFICATIONS) { | 113 } else if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) { |
| 114 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 114 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 115 rappor::SampleDomainAndRegistryFromGURL( | 115 rappor::SampleDomainAndRegistryFromGURL( |
| 116 rappor_service, | 116 rappor_service, |
| 117 "ContentSettings.PermissionRequested.Notifications.Url", | 117 "ContentSettings.PermissionRequested.Notifications.Url", |
| 118 requesting_origin); | 118 requesting_origin); |
| 119 rappor_service->RecordSampleString( | 119 rappor_service->RecordSampleString( |
| 120 "ContentSettings.PermissionRequested.Notifications.Url2", | 120 "ContentSettings.PermissionRequested.Notifications.Url2", |
| 121 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 121 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 122 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 122 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 123 } else if (permission == PermissionType::MIDI || | 123 } else if (content_type == CONTENT_SETTINGS_TYPE_MIDI || |
| 124 permission == PermissionType::MIDI_SYSEX) { | 124 content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { |
| 125 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. | 125 // TODO(dominickn): remove this deprecated metric - crbug.com/605836. |
| 126 rappor::SampleDomainAndRegistryFromGURL( | 126 rappor::SampleDomainAndRegistryFromGURL( |
| 127 rappor_service, "ContentSettings.PermissionRequested.Midi.Url", | 127 rappor_service, "ContentSettings.PermissionRequested.Midi.Url", |
| 128 requesting_origin); | 128 requesting_origin); |
| 129 rappor_service->RecordSampleString( | 129 rappor_service->RecordSampleString( |
| 130 "ContentSettings.PermissionRequested.Midi.Url2", | 130 "ContentSettings.PermissionRequested.Midi.Url2", |
| 131 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 131 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 132 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 132 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 133 } else if (permission == PermissionType::PROTECTED_MEDIA_IDENTIFIER) { | 133 } else if (content_type == |
| 134 CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) { |
| 134 rappor_service->RecordSampleString( | 135 rappor_service->RecordSampleString( |
| 135 "ContentSettings.PermissionRequested.ProtectedMedia.Url2", | 136 "ContentSettings.PermissionRequested.ProtectedMedia.Url2", |
| 136 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 137 rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 137 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 138 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 138 } | 139 } |
| 139 } | 140 } |
| 140 | 141 |
| 142 PermissionType permission; |
| 143 bool success = PermissionUtil::GetPermissionType(content_type, &permission); |
| 144 DCHECK(success); |
| 145 |
| 141 bool secure_origin = content::IsOriginSecure(requesting_origin); | 146 bool secure_origin = content::IsOriginSecure(requesting_origin); |
| 142 UMA_HISTOGRAM_ENUMERATION( | 147 UMA_HISTOGRAM_ENUMERATION( |
| 143 "ContentSettings.PermissionRequested", | 148 "ContentSettings.PermissionRequested", |
| 144 static_cast<base::HistogramBase::Sample>(permission), | 149 static_cast<base::HistogramBase::Sample>(permission), |
| 145 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 150 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 146 if (secure_origin) { | 151 if (secure_origin) { |
| 147 UMA_HISTOGRAM_ENUMERATION( | 152 UMA_HISTOGRAM_ENUMERATION( |
| 148 "ContentSettings.PermissionRequested_SecureOrigin", | 153 "ContentSettings.PermissionRequested_SecureOrigin", |
| 149 static_cast<base::HistogramBase::Sample>(permission), | 154 static_cast<base::HistogramBase::Sample>(permission), |
| 150 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 155 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 151 } else { | 156 } else { |
| 152 UMA_HISTOGRAM_ENUMERATION( | 157 UMA_HISTOGRAM_ENUMERATION( |
| 153 "ContentSettings.PermissionRequested_InsecureOrigin", | 158 "ContentSettings.PermissionRequested_InsecureOrigin", |
| 154 static_cast<base::HistogramBase::Sample>(permission), | 159 static_cast<base::HistogramBase::Sample>(permission), |
| 155 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 160 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 156 } | 161 } |
| 157 | 162 |
| 158 // In order to gauge the compatibility risk of implementing an improved | 163 // In order to gauge the compatibility risk of implementing an improved |
| 159 // iframe permissions security model, we would like to know the ratio of | 164 // iframe permissions security model, we would like to know the ratio of |
| 160 // same-origin to cross-origin permission requests. Our estimate of this | 165 // same-origin to cross-origin permission requests. Our estimate of this |
| 161 // ratio could be somewhat biased by repeated requests coming from a | 166 // ratio could be somewhat biased by repeated requests coming from a |
| 162 // single frame, but we expect this to be insignificant. | 167 // single frame, but we expect this to be insignificant. |
| 163 if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) { | 168 if (requesting_origin.GetOrigin() != embedding_origin.GetOrigin()) { |
| 164 content::PermissionManager* manager = profile->GetPermissionManager(); | 169 PermissionManager* manager = PermissionManager::Get(profile); |
| 165 if (!manager) | 170 if (!manager) |
| 166 return; | 171 return; |
| 167 blink::mojom::PermissionStatus embedding_permission_status = | 172 blink::mojom::PermissionStatus embedding_permission_status = |
| 168 manager->GetPermissionStatus(permission, embedding_origin, | 173 manager->GetPermissionStatus(content_type, embedding_origin, |
| 169 embedding_origin); | 174 embedding_origin); |
| 170 | 175 |
| 171 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( | 176 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( |
| 172 "Permissions.Requested.CrossOrigin_" + | 177 "Permissions.Requested.CrossOrigin_" + |
| 173 PermissionUtil::GetPermissionString(permission), | 178 PermissionUtil::GetPermissionString(content_type), |
| 174 1, static_cast<int>(blink::mojom::PermissionStatus::LAST), | 179 1, static_cast<int>(blink::mojom::PermissionStatus::LAST), |
| 175 static_cast<int>(blink::mojom::PermissionStatus::LAST) + 1, | 180 static_cast<int>(blink::mojom::PermissionStatus::LAST) + 1, |
| 176 base::HistogramBase::kUmaTargetedHistogramFlag); | 181 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 177 histogram->Add(static_cast<int>(embedding_permission_status)); | 182 histogram->Add(static_cast<int>(embedding_permission_status)); |
| 178 } else { | 183 } else { |
| 179 UMA_HISTOGRAM_ENUMERATION( | 184 UMA_HISTOGRAM_ENUMERATION( |
| 180 "Permissions.Requested.SameOrigin", | 185 "Permissions.Requested.SameOrigin", |
| 181 static_cast<base::HistogramBase::Sample>(permission), | 186 static_cast<base::HistogramBase::Sample>(permission), |
| 182 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 187 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 183 } | 188 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 "Permissions.Prompt.Dismissed.PriorIgnoreCount."; | 257 "Permissions.Prompt.Dismissed.PriorIgnoreCount."; |
| 253 const char | 258 const char |
| 254 PermissionUmaUtil::kPermissionsPromptIgnoredPriorDismissCountPrefix[] = | 259 PermissionUmaUtil::kPermissionsPromptIgnoredPriorDismissCountPrefix[] = |
| 255 "Permissions.Prompt.Ignored.PriorDismissCount."; | 260 "Permissions.Prompt.Ignored.PriorDismissCount."; |
| 256 const char | 261 const char |
| 257 PermissionUmaUtil::kPermissionsPromptIgnoredPriorIgnoreCountPrefix[] = | 262 PermissionUmaUtil::kPermissionsPromptIgnoredPriorIgnoreCountPrefix[] = |
| 258 "Permissions.Prompt.Ignored.PriorIgnoreCount."; | 263 "Permissions.Prompt.Ignored.PriorIgnoreCount."; |
| 259 | 264 |
| 260 // Make sure you update histograms.xml permission histogram_suffix if you | 265 // Make sure you update histograms.xml permission histogram_suffix if you |
| 261 // add new permission | 266 // add new permission |
| 262 void PermissionUmaUtil::PermissionRequested(PermissionType permission, | |
| 263 const GURL& requesting_origin, | |
| 264 const GURL& embedding_origin, | |
| 265 Profile* profile) { | |
| 266 RecordPermissionRequest(permission, requesting_origin, embedding_origin, | |
| 267 profile); | |
| 268 } | |
| 269 | |
| 270 void PermissionUmaUtil::PermissionRequested(ContentSettingsType content_type, | 267 void PermissionUmaUtil::PermissionRequested(ContentSettingsType content_type, |
| 271 const GURL& requesting_origin, | 268 const GURL& requesting_origin, |
| 272 const GURL& embedding_origin, | 269 const GURL& embedding_origin, |
| 273 Profile* profile) { | 270 Profile* profile) { |
| 274 PermissionType permission; | 271 RecordPermissionRequest(content_type, requesting_origin, embedding_origin, |
| 275 bool success = PermissionUtil::GetPermissionType(content_type, &permission); | |
| 276 DCHECK(success); | |
| 277 RecordPermissionRequest(permission, requesting_origin, embedding_origin, | |
| 278 profile); | 272 profile); |
| 279 } | 273 } |
| 280 | 274 |
| 281 void PermissionUmaUtil::PermissionGranted( | 275 void PermissionUmaUtil::PermissionGranted( |
| 282 ContentSettingsType permission, | 276 ContentSettingsType permission, |
| 283 PermissionRequestGestureType gesture_type, | 277 PermissionRequestGestureType gesture_type, |
| 284 const GURL& requesting_origin, | 278 const GURL& requesting_origin, |
| 285 Profile* profile) { | 279 Profile* profile) { |
| 286 PermissionDecisionAutoBlocker* autoblocker = | 280 PermissionDecisionAutoBlocker* autoblocker = |
| 287 PermissionDecisionAutoBlocker::GetForProfile(profile); | 281 PermissionDecisionAutoBlocker::GetForProfile(profile); |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 if (!deprecated_metric.empty() && rappor_service) { | 730 if (!deprecated_metric.empty() && rappor_service) { |
| 737 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, | 731 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, |
| 738 requesting_origin); | 732 requesting_origin); |
| 739 | 733 |
| 740 std::string rappor_metric = deprecated_metric + "2"; | 734 std::string rappor_metric = deprecated_metric + "2"; |
| 741 rappor_service->RecordSampleString( | 735 rappor_service->RecordSampleString( |
| 742 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 736 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 743 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 737 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 744 } | 738 } |
| 745 } | 739 } |
| OLD | NEW |