Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Side by Side Diff: chrome/browser/permissions/permission_uma_util.cc

Issue 2047253002: Add hooks to permission layer for permission action reporting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-reporter-implementation
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/ping_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/permissions/permission_manager.h" 12 #include "chrome/browser/permissions/permission_manager.h"
13 #include "chrome/browser/permissions/permission_util.h" 13 #include "chrome/browser/permissions/permission_util.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/safe_browsing/permission_reporter.h"
16 #include "chrome/browser/safe_browsing/ping_manager.h"
17 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 18 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
16 #include "components/rappor/rappor_service.h" 19 #include "components/rappor/rappor_service.h"
17 #include "components/rappor/rappor_utils.h" 20 #include "components/rappor/rappor_utils.h"
18 #include "content/public/browser/permission_type.h" 21 #include "content/public/browser/permission_type.h"
19 #include "content/public/common/origin_util.h" 22 #include "content/public/common/origin_util.h"
20 #include "url/gurl.h" 23 #include "url/gurl.h"
21 24
22 // UMA keys need to be statically initialized so plain function would not 25 // UMA keys need to be statically initialized so plain function would not
23 // work. Use macros instead. 26 // work. Use macros instead.
24 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ 27 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 base::HistogramBase::kUmaTargetedHistogramFlag); 243 base::HistogramBase::kUmaTargetedHistogramFlag);
241 histogram->Add(static_cast<int>(embedding_permission_status)); 244 histogram->Add(static_cast<int>(embedding_permission_status));
242 } else { 245 } else {
243 UMA_HISTOGRAM_ENUMERATION( 246 UMA_HISTOGRAM_ENUMERATION(
244 "Permissions.Requested.SameOrigin", 247 "Permissions.Requested.SameOrigin",
245 static_cast<base::HistogramBase::Sample>(permission), 248 static_cast<base::HistogramBase::Sample>(permission),
246 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 249 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
247 } 250 }
248 } 251 }
249 252
253 void ReportPermissionAction(const GURL& origin,
254 PermissionType permission,
255 PermissionAction action) {
256 // TODO(stefanocs): Send reports to opted-in users only.
257 safe_browsing::PermissionReporter* permission_reporter =
kcarattini 2016/06/13 21:21:09 You need to guard this with the flag you added in
stefanocs 2016/06/14 01:06:18 Is this the right way to do this?
258 g_browser_process->safe_browsing_service()
259 ->ping_manager()
260 ->permission_reporter();
261 permission_reporter->SendReport(origin, permission, action);
262 }
263
250 } // anonymous namespace 264 } // anonymous namespace
251 265
252 const char PermissionUmaUtil::kPermissionsPromptShown[] = 266 const char PermissionUmaUtil::kPermissionsPromptShown[] =
253 "Permissions.Prompt.Shown"; 267 "Permissions.Prompt.Shown";
254 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = 268 const char PermissionUmaUtil::kPermissionsPromptAccepted[] =
255 "Permissions.Prompt.Accepted"; 269 "Permissions.Prompt.Accepted";
256 const char PermissionUmaUtil::kPermissionsPromptDenied[] = 270 const char PermissionUmaUtil::kPermissionsPromptDenied[] =
257 "Permissions.Prompt.Denied"; 271 "Permissions.Prompt.Denied";
258 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = 272 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
259 "Permissions.Prompt.RequestsPerPrompt"; 273 "Permissions.Prompt.RequestsPerPrompt";
(...skipping 10 matching lines...) Expand all
270 const GURL& requesting_origin, 284 const GURL& requesting_origin,
271 const GURL& embedding_origin, 285 const GURL& embedding_origin,
272 Profile* profile) { 286 Profile* profile) {
273 RecordPermissionRequest(permission, requesting_origin, embedding_origin, 287 RecordPermissionRequest(permission, requesting_origin, embedding_origin,
274 profile); 288 profile);
275 } 289 }
276 290
277 void PermissionUmaUtil::PermissionGranted(PermissionType permission, 291 void PermissionUmaUtil::PermissionGranted(PermissionType permission,
278 const GURL& requesting_origin) { 292 const GURL& requesting_origin) {
279 RecordPermissionAction(permission, GRANTED, requesting_origin); 293 RecordPermissionAction(permission, GRANTED, requesting_origin);
294 ReportPermissionAction(requesting_origin, permission, GRANTED);
kcarattini 2016/06/13 21:21:09 Can RecordPermissionAction just call ReportPermiss
stefanocs 2016/06/14 01:06:18 Yes, but that means we have to add more params to
raymes 2016/06/14 02:47:11 I think that's ok :)
stefanocs 2016/06/14 03:37:37 Done.
280 } 295 }
281 296
282 void PermissionUmaUtil::PermissionDenied(PermissionType permission, 297 void PermissionUmaUtil::PermissionDenied(PermissionType permission,
283 const GURL& requesting_origin) { 298 const GURL& requesting_origin) {
284 RecordPermissionAction(permission, DENIED, requesting_origin); 299 RecordPermissionAction(permission, DENIED, requesting_origin);
300 ReportPermissionAction(requesting_origin, permission, DENIED);
285 } 301 }
286 302
287 void PermissionUmaUtil::PermissionDismissed(PermissionType permission, 303 void PermissionUmaUtil::PermissionDismissed(PermissionType permission,
288 const GURL& requesting_origin) { 304 const GURL& requesting_origin) {
289 RecordPermissionAction(permission, DISMISSED, requesting_origin); 305 RecordPermissionAction(permission, DISMISSED, requesting_origin);
306 ReportPermissionAction(requesting_origin, permission, DISMISSED);
290 } 307 }
291 308
292 void PermissionUmaUtil::PermissionIgnored(PermissionType permission, 309 void PermissionUmaUtil::PermissionIgnored(PermissionType permission,
293 const GURL& requesting_origin) { 310 const GURL& requesting_origin) {
294 RecordPermissionAction(permission, IGNORED, requesting_origin); 311 RecordPermissionAction(permission, IGNORED, requesting_origin);
312 ReportPermissionAction(requesting_origin, permission, IGNORED);
295 } 313 }
296 314
297 void PermissionUmaUtil::PermissionRevoked(PermissionType permission, 315 void PermissionUmaUtil::PermissionRevoked(PermissionType permission,
298 const GURL& revoked_origin) { 316 const GURL& revoked_origin) {
299 // TODO(tsergeant): Expand metrics definitions for revocation to include all 317 // TODO(tsergeant): Expand metrics definitions for revocation to include all
300 // permissions. 318 // permissions.
301 if (permission == PermissionType::NOTIFICATIONS || 319 if (permission == PermissionType::NOTIFICATIONS ||
302 permission == PermissionType::GEOLOCATION || 320 permission == PermissionType::GEOLOCATION ||
303 permission == PermissionType::AUDIO_CAPTURE || 321 permission == PermissionType::AUDIO_CAPTURE ||
304 permission == PermissionType::VIDEO_CAPTURE) { 322 permission == PermissionType::VIDEO_CAPTURE) {
305 RecordPermissionAction(permission, REVOKED, revoked_origin); 323 RecordPermissionAction(permission, REVOKED, revoked_origin);
324 ReportPermissionAction(revoked_origin, permission, REVOKED);
306 } 325 }
307 } 326 }
308 327
309 void PermissionUmaUtil::PermissionPromptShown( 328 void PermissionUmaUtil::PermissionPromptShown(
310 const std::vector<PermissionBubbleRequest*>& requests) { 329 const std::vector<PermissionBubbleRequest*>& requests) {
311 DCHECK(!requests.empty()); 330 DCHECK(!requests.empty());
312 331
313 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE; 332 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE;
314 if (requests.size() == 1) 333 if (requests.size() == 1)
315 permission_prompt_type = requests[0]->GetPermissionBubbleType(); 334 permission_prompt_type = requests[0]->GetPermissionBubbleType();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 } 381 }
363 382
364 void PermissionUmaUtil::PermissionPromptDenied( 383 void PermissionUmaUtil::PermissionPromptDenied(
365 const std::vector<PermissionBubbleRequest*>& requests) { 384 const std::vector<PermissionBubbleRequest*>& requests) {
366 DCHECK(!requests.empty()); 385 DCHECK(!requests.empty());
367 DCHECK(requests.size() == 1); 386 DCHECK(requests.size() == 1);
368 387
369 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 388 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
370 requests[0]->GetPermissionBubbleType()); 389 requests[0]->GetPermissionBubbleType());
371 } 390 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/ping_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698