| 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 22 matching lines...) Expand all Loading... |
| 33 permission_insecure, action) \ | 33 permission_insecure, action) \ |
| 34 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ | 34 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ |
| 35 if (secure_origin) { \ | 35 if (secure_origin) { \ |
| 36 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ | 36 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ |
| 37 PERMISSION_ACTION_NUM); \ | 37 PERMISSION_ACTION_NUM); \ |
| 38 } else { \ | 38 } else { \ |
| 39 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ | 39 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ |
| 40 PERMISSION_ACTION_NUM); \ | 40 PERMISSION_ACTION_NUM); \ |
| 41 } | 41 } |
| 42 | 42 |
| 43 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ | 43 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ |
| 44 UMA_HISTOGRAM_ENUMERATION( \ | 44 UMA_HISTOGRAM_ENUMERATION( \ |
| 45 metric_name, \ | 45 metric_name, \ |
| 46 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ | 46 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \ |
| 47 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM)) | 47 static_cast<base::HistogramBase::Sample>(PermissionRequestType::NUM)) |
| 48 |
| 49 #define PERMISSION_BUBBLE_GESTURE_TYPE_UMA(gesture_metric_name, \ |
| 50 no_gesture_metric_name, \ |
| 51 gesture_type, \ |
| 52 permission_bubble_type) \ |
| 53 if (gesture_type == PermissionRequestGestureType::GESTURE) { \ |
| 54 PERMISSION_BUBBLE_TYPE_UMA(gesture_metric_name, permission_bubble_type); \ |
| 55 } else if (gesture_type == PermissionRequestGestureType::NO_GESTURE) { \ |
| 56 PERMISSION_BUBBLE_TYPE_UMA(no_gesture_metric_name, \ |
| 57 permission_bubble_type); \ |
| 58 } |
| 48 | 59 |
| 49 using content::PermissionType; | 60 using content::PermissionType; |
| 50 | 61 |
| 51 namespace { | 62 namespace { |
| 52 | 63 |
| 53 const std::string GetRapporMetric(PermissionType permission, | 64 const std::string GetRapporMetric(PermissionType permission, |
| 54 PermissionAction action) { | 65 PermissionAction action) { |
| 55 std::string action_str; | 66 std::string action_str; |
| 56 switch (action) { | 67 switch (action) { |
| 57 case GRANTED: | 68 case GRANTED: |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 "Permissions.Requested.SameOrigin", | 175 "Permissions.Requested.SameOrigin", |
| 165 static_cast<base::HistogramBase::Sample>(permission), | 176 static_cast<base::HistogramBase::Sample>(permission), |
| 166 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); | 177 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); |
| 167 } | 178 } |
| 168 } | 179 } |
| 169 | 180 |
| 170 } // anonymous namespace | 181 } // anonymous namespace |
| 171 | 182 |
| 172 const char PermissionUmaUtil::kPermissionsPromptShown[] = | 183 const char PermissionUmaUtil::kPermissionsPromptShown[] = |
| 173 "Permissions.Prompt.Shown"; | 184 "Permissions.Prompt.Shown"; |
| 185 const char PermissionUmaUtil::kPermissionsPromptShownGesture[] = |
| 186 "Permissions.Prompt.Shown.Gesture"; |
| 187 const char PermissionUmaUtil::kPermissionsPromptShownNoGesture[] = |
| 188 "Permissions.Prompt.Shown.NoGesture"; |
| 174 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = | 189 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = |
| 175 "Permissions.Prompt.Accepted"; | 190 "Permissions.Prompt.Accepted"; |
| 191 const char PermissionUmaUtil::kPermissionsPromptAcceptedGesture[] = |
| 192 "Permissions.Prompt.Accepted.Gesture"; |
| 193 const char PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture[] = |
| 194 "Permissions.Prompt.Accepted.NoGesture"; |
| 176 const char PermissionUmaUtil::kPermissionsPromptDenied[] = | 195 const char PermissionUmaUtil::kPermissionsPromptDenied[] = |
| 177 "Permissions.Prompt.Denied"; | 196 "Permissions.Prompt.Denied"; |
| 197 const char PermissionUmaUtil::kPermissionsPromptDeniedGesture[] = |
| 198 "Permissions.Prompt.Denied.Gesture"; |
| 199 const char PermissionUmaUtil::kPermissionsPromptDeniedNoGesture[] = |
| 200 "Permissions.Prompt.Denied.NoGesture"; |
| 178 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = | 201 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = |
| 179 "Permissions.Prompt.RequestsPerPrompt"; | 202 "Permissions.Prompt.RequestsPerPrompt"; |
| 180 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = | 203 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = |
| 181 "Permissions.Prompt.MergedBubbleTypes"; | 204 "Permissions.Prompt.MergedBubbleTypes"; |
| 182 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = | 205 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = |
| 183 "Permissions.Prompt.MergedBubbleAccepted"; | 206 "Permissions.Prompt.MergedBubbleAccepted"; |
| 184 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = | 207 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = |
| 185 "Permissions.Prompt.MergedBubbleDenied"; | 208 "Permissions.Prompt.MergedBubbleDenied"; |
| 186 | 209 |
| 187 // Make sure you update histograms.xml permission histogram_suffix if you | 210 // Make sure you update histograms.xml permission histogram_suffix if you |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 profile); | 259 profile); |
| 237 } | 260 } |
| 238 } | 261 } |
| 239 | 262 |
| 240 void PermissionUmaUtil::PermissionPromptShown( | 263 void PermissionUmaUtil::PermissionPromptShown( |
| 241 const std::vector<PermissionRequest*>& requests) { | 264 const std::vector<PermissionRequest*>& requests) { |
| 242 DCHECK(!requests.empty()); | 265 DCHECK(!requests.empty()); |
| 243 | 266 |
| 244 PermissionRequestType permission_prompt_type = | 267 PermissionRequestType permission_prompt_type = |
| 245 PermissionRequestType::MULTIPLE; | 268 PermissionRequestType::MULTIPLE; |
| 246 if (requests.size() == 1) | 269 PermissionRequestGestureType permission_gesture_type = |
| 270 PermissionRequestGestureType::UNKNOWN; |
| 271 if (requests.size() == 1) { |
| 247 permission_prompt_type = requests[0]->GetPermissionRequestType(); | 272 permission_prompt_type = requests[0]->GetPermissionRequestType(); |
| 273 permission_gesture_type = requests[0]->GetGestureType(); |
| 274 } |
| 275 |
| 248 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type); | 276 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type); |
| 277 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( |
| 278 kPermissionsPromptShownGesture, kPermissionsPromptShownNoGesture, |
| 279 permission_gesture_type, permission_prompt_type); |
| 249 | 280 |
| 250 UMA_HISTOGRAM_ENUMERATION( | 281 UMA_HISTOGRAM_ENUMERATION( |
| 251 kPermissionsPromptRequestsPerPrompt, | 282 kPermissionsPromptRequestsPerPrompt, |
| 252 static_cast<base::HistogramBase::Sample>(requests.size()), | 283 static_cast<base::HistogramBase::Sample>(requests.size()), |
| 253 static_cast<base::HistogramBase::Sample>(10)); | 284 static_cast<base::HistogramBase::Sample>(10)); |
| 254 | 285 |
| 255 if (requests.size() > 1) { | 286 if (requests.size() > 1) { |
| 256 for (const auto* request : requests) { | 287 for (const auto* request : requests) { |
| 257 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes, | 288 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes, |
| 258 request->GetPermissionRequestType()); | 289 request->GetPermissionRequestType()); |
| 259 } | 290 } |
| 260 } | 291 } |
| 261 } | 292 } |
| 262 | 293 |
| 263 void PermissionUmaUtil::PermissionPromptAccepted( | 294 void PermissionUmaUtil::PermissionPromptAccepted( |
| 264 const std::vector<PermissionRequest*>& requests, | 295 const std::vector<PermissionRequest*>& requests, |
| 265 const std::vector<bool>& accept_states) { | 296 const std::vector<bool>& accept_states) { |
| 266 DCHECK(!requests.empty()); | 297 DCHECK(!requests.empty()); |
| 267 DCHECK(requests.size() == accept_states.size()); | 298 DCHECK(requests.size() == accept_states.size()); |
| 268 | 299 |
| 269 bool all_accepted = accept_states[0]; | 300 bool all_accepted = accept_states[0]; |
| 270 PermissionRequestType permission_prompt_type = | 301 PermissionRequestType permission_prompt_type = |
| 271 requests[0]->GetPermissionRequestType(); | 302 requests[0]->GetPermissionRequestType(); |
| 303 PermissionRequestGestureType permission_gesture_type = |
| 304 requests[0]->GetGestureType(); |
| 272 if (requests.size() > 1) { | 305 if (requests.size() > 1) { |
| 273 permission_prompt_type = PermissionRequestType::MULTIPLE; | 306 permission_prompt_type = PermissionRequestType::MULTIPLE; |
| 307 permission_gesture_type = PermissionRequestGestureType::UNKNOWN; |
| 274 for (size_t i = 0; i < requests.size(); ++i) { | 308 for (size_t i = 0; i < requests.size(); ++i) { |
| 275 const auto* request = requests[i]; | 309 const auto* request = requests[i]; |
| 276 if (accept_states[i]) { | 310 if (accept_states[i]) { |
| 277 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted, | 311 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted, |
| 278 request->GetPermissionRequestType()); | 312 request->GetPermissionRequestType()); |
| 279 } else { | 313 } else { |
| 280 all_accepted = false; | 314 all_accepted = false; |
| 281 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied, | 315 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied, |
| 282 request->GetPermissionRequestType()); | 316 request->GetPermissionRequestType()); |
| 283 } | 317 } |
| 284 } | 318 } |
| 285 } | 319 } |
| 286 | 320 |
| 287 if (all_accepted) { | 321 if (all_accepted) { |
| 288 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, | 322 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, |
| 289 permission_prompt_type); | 323 permission_prompt_type); |
| 324 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( |
| 325 kPermissionsPromptAcceptedGesture, kPermissionsPromptAcceptedNoGesture, |
| 326 permission_gesture_type, permission_prompt_type); |
| 290 } else { | 327 } else { |
| 291 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, | 328 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, |
| 292 permission_prompt_type); | 329 permission_prompt_type); |
| 330 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( |
| 331 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture, |
| 332 permission_gesture_type, permission_prompt_type); |
| 293 } | 333 } |
| 294 } | 334 } |
| 295 | 335 |
| 296 void PermissionUmaUtil::PermissionPromptDenied( | 336 void PermissionUmaUtil::PermissionPromptDenied( |
| 297 const std::vector<PermissionRequest*>& requests) { | 337 const std::vector<PermissionRequest*>& requests) { |
| 298 DCHECK(!requests.empty()); | 338 DCHECK(!requests.empty()); |
| 299 DCHECK(requests.size() == 1); | 339 DCHECK(requests.size() == 1); |
| 300 | 340 |
| 301 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, | 341 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, |
| 302 requests[0]->GetPermissionRequestType()); | 342 requests[0]->GetPermissionRequestType()); |
| 343 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( |
| 344 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture, |
| 345 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); |
| 303 } | 346 } |
| 304 | 347 |
| 305 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) { | 348 bool PermissionUmaUtil::IsOptedIntoPermissionActionReporting(Profile* profile) { |
| 306 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 349 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 307 switches::kEnablePermissionActionReporting)) | 350 switches::kEnablePermissionActionReporting)) |
| 308 return false; | 351 return false; |
| 309 | 352 |
| 310 DCHECK(profile); | 353 DCHECK(profile); |
| 311 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) | 354 if (profile->GetProfileType() == Profile::INCOGNITO_PROFILE) |
| 312 return false; | 355 return false; |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 if (!deprecated_metric.empty() && rappor_service) { | 462 if (!deprecated_metric.empty() && rappor_service) { |
| 420 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, | 463 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, |
| 421 requesting_origin); | 464 requesting_origin); |
| 422 | 465 |
| 423 std::string rappor_metric = deprecated_metric + "2"; | 466 std::string rappor_metric = deprecated_metric + "2"; |
| 424 rappor_service->RecordSample( | 467 rappor_service->RecordSample( |
| 425 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | 468 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, |
| 426 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); | 469 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); |
| 427 } | 470 } |
| 428 } | 471 } |
| OLD | NEW |