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

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: Add guard to permission reporting 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
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/command_line.h"
9 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
10 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/permissions/permission_manager.h" 13 #include "chrome/browser/permissions/permission_manager.h"
13 #include "chrome/browser/permissions/permission_util.h" 14 #include "chrome/browser/permissions/permission_util.h"
14 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/safe_browsing/permission_reporter.h"
17 #include "chrome/browser/safe_browsing/ping_manager.h"
18 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 19 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
20 #include "chrome/common/chrome_switches.h"
16 #include "components/rappor/rappor_service.h" 21 #include "components/rappor/rappor_service.h"
17 #include "components/rappor/rappor_utils.h" 22 #include "components/rappor/rappor_utils.h"
18 #include "content/public/browser/permission_type.h" 23 #include "content/public/browser/permission_type.h"
19 #include "content/public/common/origin_util.h" 24 #include "content/public/common/origin_util.h"
20 #include "url/gurl.h" 25 #include "url/gurl.h"
21 26
22 // UMA keys need to be statically initialized so plain function would not 27 // UMA keys need to be statically initialized so plain function would not
23 // work. Use macros instead. 28 // work. Use macros instead.
24 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ 29 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
25 permission_insecure, action) \ 30 permission_insecure, action) \
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 base::HistogramBase::kUmaTargetedHistogramFlag); 250 base::HistogramBase::kUmaTargetedHistogramFlag);
246 histogram->Add(static_cast<int>(embedding_permission_status)); 251 histogram->Add(static_cast<int>(embedding_permission_status));
247 } else { 252 } else {
248 UMA_HISTOGRAM_ENUMERATION( 253 UMA_HISTOGRAM_ENUMERATION(
249 "Permissions.Requested.SameOrigin", 254 "Permissions.Requested.SameOrigin",
250 static_cast<base::HistogramBase::Sample>(permission), 255 static_cast<base::HistogramBase::Sample>(permission),
251 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 256 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
252 } 257 }
253 } 258 }
254 259
260 void ReportPermissionAction(const GURL& origin,
261 PermissionType permission,
262 PermissionAction action) {
263 // Do not report permission action when the permission action reporting
264 // flag is disabled.
265 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
266 switches::kDisablePermissionActionReporting)) {
267 return;
268 }
raymes 2016/06/14 02:47:11 We should only send a report if the enabled flag i
stefanocs 2016/06/14 03:37:37 Done.
269 safe_browsing::PermissionReporter* permission_reporter =
270 g_browser_process->safe_browsing_service()
271 ->ping_manager()
272 ->permission_reporter();
273 permission_reporter->SendReport(origin, permission, action);
274 }
275
255 } // anonymous namespace 276 } // anonymous namespace
256 277
257 const char PermissionUmaUtil::kPermissionsPromptShown[] = 278 const char PermissionUmaUtil::kPermissionsPromptShown[] =
258 "Permissions.Prompt.Shown"; 279 "Permissions.Prompt.Shown";
259 const char PermissionUmaUtil::kPermissionsPromptAccepted[] = 280 const char PermissionUmaUtil::kPermissionsPromptAccepted[] =
260 "Permissions.Prompt.Accepted"; 281 "Permissions.Prompt.Accepted";
261 const char PermissionUmaUtil::kPermissionsPromptDenied[] = 282 const char PermissionUmaUtil::kPermissionsPromptDenied[] =
262 "Permissions.Prompt.Denied"; 283 "Permissions.Prompt.Denied";
263 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = 284 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
264 "Permissions.Prompt.RequestsPerPrompt"; 285 "Permissions.Prompt.RequestsPerPrompt";
(...skipping 10 matching lines...) Expand all
275 const GURL& requesting_origin, 296 const GURL& requesting_origin,
276 const GURL& embedding_origin, 297 const GURL& embedding_origin,
277 Profile* profile) { 298 Profile* profile) {
278 RecordPermissionRequest(permission, requesting_origin, embedding_origin, 299 RecordPermissionRequest(permission, requesting_origin, embedding_origin,
279 profile); 300 profile);
280 } 301 }
281 302
282 void PermissionUmaUtil::PermissionGranted(PermissionType permission, 303 void PermissionUmaUtil::PermissionGranted(PermissionType permission,
283 const GURL& requesting_origin) { 304 const GURL& requesting_origin) {
284 RecordPermissionAction(permission, GRANTED, requesting_origin); 305 RecordPermissionAction(permission, GRANTED, requesting_origin);
306 ReportPermissionAction(requesting_origin, permission, GRANTED);
285 } 307 }
286 308
287 void PermissionUmaUtil::PermissionDenied(PermissionType permission, 309 void PermissionUmaUtil::PermissionDenied(PermissionType permission,
288 const GURL& requesting_origin) { 310 const GURL& requesting_origin) {
289 RecordPermissionAction(permission, DENIED, requesting_origin); 311 RecordPermissionAction(permission, DENIED, requesting_origin);
312 ReportPermissionAction(requesting_origin, permission, DENIED);
290 } 313 }
291 314
292 void PermissionUmaUtil::PermissionDismissed(PermissionType permission, 315 void PermissionUmaUtil::PermissionDismissed(PermissionType permission,
293 const GURL& requesting_origin) { 316 const GURL& requesting_origin) {
294 RecordPermissionAction(permission, DISMISSED, requesting_origin); 317 RecordPermissionAction(permission, DISMISSED, requesting_origin);
318 ReportPermissionAction(requesting_origin, permission, DISMISSED);
295 } 319 }
296 320
297 void PermissionUmaUtil::PermissionIgnored(PermissionType permission, 321 void PermissionUmaUtil::PermissionIgnored(PermissionType permission,
298 const GURL& requesting_origin) { 322 const GURL& requesting_origin) {
299 RecordPermissionAction(permission, IGNORED, requesting_origin); 323 RecordPermissionAction(permission, IGNORED, requesting_origin);
324 ReportPermissionAction(requesting_origin, permission, IGNORED);
300 } 325 }
301 326
302 void PermissionUmaUtil::PermissionRevoked(PermissionType permission, 327 void PermissionUmaUtil::PermissionRevoked(PermissionType permission,
303 const GURL& revoked_origin) { 328 const GURL& revoked_origin) {
304 // TODO(tsergeant): Expand metrics definitions for revocation to include all 329 // TODO(tsergeant): Expand metrics definitions for revocation to include all
305 // permissions. 330 // permissions.
306 if (permission == PermissionType::NOTIFICATIONS || 331 if (permission == PermissionType::NOTIFICATIONS ||
307 permission == PermissionType::GEOLOCATION || 332 permission == PermissionType::GEOLOCATION ||
308 permission == PermissionType::AUDIO_CAPTURE || 333 permission == PermissionType::AUDIO_CAPTURE ||
309 permission == PermissionType::VIDEO_CAPTURE) { 334 permission == PermissionType::VIDEO_CAPTURE) {
310 RecordPermissionAction(permission, REVOKED, revoked_origin); 335 RecordPermissionAction(permission, REVOKED, revoked_origin);
336 ReportPermissionAction(revoked_origin, permission, REVOKED);
311 } 337 }
312 } 338 }
313 339
314 void PermissionUmaUtil::PermissionPromptShown( 340 void PermissionUmaUtil::PermissionPromptShown(
315 const std::vector<PermissionBubbleRequest*>& requests) { 341 const std::vector<PermissionBubbleRequest*>& requests) {
316 DCHECK(!requests.empty()); 342 DCHECK(!requests.empty());
317 343
318 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE; 344 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE;
319 if (requests.size() == 1) 345 if (requests.size() == 1)
320 permission_prompt_type = requests[0]->GetPermissionBubbleType(); 346 permission_prompt_type = requests[0]->GetPermissionBubbleType();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 393 }
368 394
369 void PermissionUmaUtil::PermissionPromptDenied( 395 void PermissionUmaUtil::PermissionPromptDenied(
370 const std::vector<PermissionBubbleRequest*>& requests) { 396 const std::vector<PermissionBubbleRequest*>& requests) {
371 DCHECK(!requests.empty()); 397 DCHECK(!requests.empty());
372 DCHECK(requests.size() == 1); 398 DCHECK(requests.size() == 1);
373 399
374 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 400 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
375 requests[0]->GetPermissionBubbleType()); 401 requests[0]->GetPermissionBubbleType());
376 } 402 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/ping_manager.h » ('j') | chrome/browser/safe_browsing/ping_manager.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698