Index: chrome/browser/content_settings/permission_context_uma_util.cc |
diff --git a/chrome/browser/content_settings/permission_context_uma_util.cc b/chrome/browser/content_settings/permission_context_uma_util.cc |
index 3b62a904693dfbfe6209ad321861f3d7aab73202..dd4c827669b642856dd3e9831ce70ec935b9651b 100644 |
--- a/chrome/browser/content_settings/permission_context_uma_util.cc |
+++ b/chrome/browser/content_settings/permission_context_uma_util.cc |
@@ -2,29 +2,26 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "base/metrics/histogram.h" |
+#include "base/metrics/histogram_macros.h" |
+#include "base/strings/stringprintf.h" |
+#include "chrome/browser/browser_process.h" |
#include "chrome/browser/content_settings/permission_context_uma_util.h" |
+#include "components/rappor/rappor_utils.h" |
#include "content/public/browser/permission_type.h" |
#include "url/gurl.h" |
// UMA keys need to be statically initialized so plain function would not |
// work. Use a Macro instead. |
-#define PERMISSION_ACTION_UMA(secure_origin, \ |
- permission, permission_secure, permission_insecure, action) \ |
- UMA_HISTOGRAM_ENUMERATION( \ |
- permission, \ |
- action, \ |
- PERMISSION_ACTION_NUM); \ |
- if (secure_origin) { \ |
- UMA_HISTOGRAM_ENUMERATION(permission_secure, \ |
- action, \ |
- PERMISSION_ACTION_NUM); \ |
- } else { \ |
- UMA_HISTOGRAM_ENUMERATION(permission_insecure, \ |
- action, \ |
- PERMISSION_ACTION_NUM); \ |
- } |
- |
+#define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ |
+ permission_insecure, action) \ |
+ UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ |
+ if (secure_origin) { \ |
+ UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ |
+ PERMISSION_ACTION_NUM); \ |
+ } else { \ |
+ UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ |
+ PERMISSION_ACTION_NUM); \ |
+ } |
namespace { |
@@ -41,10 +38,50 @@ enum PermissionAction { |
PERMISSION_ACTION_NUM, |
}; |
-void RecordPermissionAction( |
- ContentSettingsType permission, |
- PermissionAction action, |
- bool secure_origin) { |
+const std::string GetRapporMetric(ContentSettingsType permission, |
+ PermissionAction action) { |
+ std::string action_str; |
+ switch (action) { |
+ case GRANTED: |
+ action_str = "Granted"; |
+ break; |
+ case DENIED: |
+ action_str = "Denied"; |
+ break; |
+ case DISMISSED: |
+ action_str = "Dismissed"; |
+ break; |
+ case IGNORED: |
+ action_str = "Ignored"; |
+ break; |
+ case PERMISSION_ACTION_NUM: |
+ NOTREACHED(); |
+ break; |
+ } |
+ std::string permission_str; |
+ switch (permission) { |
+ case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
+ permission_str = "Geolocation"; |
+ break; |
+ case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
+ permission_str = "Notifications"; |
+ break; |
+ default: |
+ permission_str = ""; |
+ break; |
+ } |
+ |
+ if (permission_str.empty()) |
+ return ""; |
+ return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url", |
+ permission_str.c_str(), action_str.c_str()); |
+} |
+ |
+void RecordPermissionAction(ContentSettingsType permission, |
+ PermissionAction action, |
+ const GURL& requesting_origin) { |
+ bool secure_origin = requesting_origin.SchemeIsSecure(); |
+ |
switch (permission) { |
case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
PERMISSION_ACTION_UMA( |
@@ -91,17 +128,32 @@ void RecordPermissionAction( |
default: |
NOTREACHED() << "PERMISSION " << permission << " not accounted for"; |
} |
+ |
+ const std::string& rappor_metric = GetRapporMetric(permission, action); |
+ if (!rappor_metric.empty()) |
+ rappor::SampleDomainAndRegistryFromGURL( |
+ g_browser_process->rappor_service(), rappor_metric, |
+ requesting_origin); |
} |
-void RecordPermissionRequest( |
- ContentSettingsType permission, bool secure_origin) { |
+void RecordPermissionRequest(ContentSettingsType permission, |
+ const GURL& requesting_origin) { |
+ bool secure_origin = requesting_origin.SchemeIsSecure(); |
content::PermissionType type; |
switch (permission) { |
case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
type = content::PermissionType::GEOLOCATION; |
+ rappor::SampleDomainAndRegistryFromGURL( |
+ g_browser_process->rappor_service(), |
+ "ContentSettings.PermissionRequested.Geolocation.Url", |
+ requesting_origin); |
break; |
case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
type = content::PermissionType::NOTIFICATIONS; |
+ rappor::SampleDomainAndRegistryFromGURL( |
+ g_browser_process->rappor_service(), |
+ "ContentSettings.PermissionRequested.Notifications.Url", |
+ requesting_origin); |
break; |
case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: |
type = content::PermissionType::MIDI_SYSEX; |
@@ -141,29 +193,25 @@ void RecordPermissionRequest( |
// add new permission |
void PermissionContextUmaUtil::PermissionRequested( |
ContentSettingsType permission, const GURL& requesting_origin) { |
- RecordPermissionRequest(permission, requesting_origin.SchemeIsSecure()); |
+ RecordPermissionRequest(permission, requesting_origin); |
} |
void PermissionContextUmaUtil::PermissionGranted( |
ContentSettingsType permission, const GURL& requesting_origin) { |
- RecordPermissionAction(permission, GRANTED, |
- requesting_origin.SchemeIsSecure()); |
+ RecordPermissionAction(permission, GRANTED, requesting_origin); |
} |
void PermissionContextUmaUtil::PermissionDenied( |
ContentSettingsType permission, const GURL& requesting_origin) { |
- RecordPermissionAction(permission, DENIED, |
- requesting_origin.SchemeIsSecure()); |
+ RecordPermissionAction(permission, DENIED, requesting_origin); |
} |
void PermissionContextUmaUtil::PermissionDismissed( |
ContentSettingsType permission, const GURL& requesting_origin) { |
- RecordPermissionAction(permission, DISMISSED, |
- requesting_origin.SchemeIsSecure()); |
+ RecordPermissionAction(permission, DISMISSED, requesting_origin); |
} |
void PermissionContextUmaUtil::PermissionIgnored( |
ContentSettingsType permission, const GURL& requesting_origin) { |
- RecordPermissionAction(permission, IGNORED, |
- requesting_origin.SchemeIsSecure()); |
+ RecordPermissionAction(permission, IGNORED, requesting_origin); |
} |