Index: chrome/browser/permissions/permission_uma_util.cc |
diff --git a/chrome/browser/permissions/permission_uma_util.cc b/chrome/browser/permissions/permission_uma_util.cc |
index 45305b15c1a75ddd61e955a735d4e95ff0861ab9..f38e1fddaaa6e6537d7269a6d493968f96e0a43b 100644 |
--- a/chrome/browser/permissions/permission_uma_util.cc |
+++ b/chrome/browser/permissions/permission_uma_util.cc |
@@ -11,6 +11,7 @@ |
#include "base/strings/stringprintf.h" |
#include "base/time/time.h" |
#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/engagement/site_engagement_service.h" |
#include "chrome/browser/permissions/permission_decision_auto_blocker.h" |
#include "chrome/browser/permissions/permission_request.h" |
#include "chrome/browser/permissions/permission_util.h" |
@@ -25,6 +26,7 @@ |
#include "components/rappor/public/rappor_utils.h" |
#include "components/rappor/rappor_service_impl.h" |
#include "content/public/browser/permission_type.h" |
+#include "content/public/browser/web_contents.h" |
#include "content/public/common/origin_util.h" |
#include "url/gurl.h" |
@@ -62,6 +64,67 @@ namespace { |
static bool gIsFakeOfficialBuildForTest = false; |
+std::string GetPermissionRequestString(PermissionRequestType type) { |
+ switch (type) { |
+ case PermissionRequestType::MULTIPLE: |
+ return "AudioAndVideoCapture"; |
+ case PermissionRequestType::QUOTA: |
+ return "Quota"; |
+ case PermissionRequestType::DOWNLOAD: |
+ return "MultipleDownload"; |
+ case PermissionRequestType::REGISTER_PROTOCOL_HANDLER: |
+ return "RegisterProtocolHandler"; |
+ case PermissionRequestType::PERMISSION_GEOLOCATION: |
+ return "Geolocation"; |
+ case PermissionRequestType::PERMISSION_MIDI_SYSEX: |
+ return "MidiSysEx"; |
+ case PermissionRequestType::PERMISSION_NOTIFICATIONS: |
+ return "Notifications"; |
+ case PermissionRequestType::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
+ return "ProtectedMedia"; |
+ case PermissionRequestType::PERMISSION_PUSH_MESSAGING: |
+ return "PushMessaging"; |
+ case PermissionRequestType::PERMISSION_FLASH: |
+ return "Flash"; |
+ case PermissionRequestType::PERMISSION_MEDIASTREAM_MIC: |
+ return "AudioCapture"; |
+ case PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA: |
+ return "VideoCapture"; |
+ default: |
+ NOTREACHED(); |
+ return ""; |
+ } |
+} |
+ |
+void RecordEngagementMetric(const std::vector<PermissionRequest*>& requests, |
+ const content::WebContents* web_contents, |
+ const std::string& action) { |
+ PermissionRequestType type = requests[0]->GetPermissionRequestType(); |
+ if (requests.size() > 1) |
+ type = PermissionRequestType::MULTIPLE; |
+ |
+ // This is only hit if kUsePermissionManagerForMediaRequests is off, since it |
+ // is now on by default we'll just silenty drop this. |
+ if (type == PermissionRequestType::MEDIA_STREAM) |
+ return; |
+ |
+ DCHECK(action == "Accepted" || action == "Denied" || action == "Dismissed" || |
+ action == "Ignored"); |
+ std::string name = "Permissions.Engagement." + action + '.' + |
+ GetPermissionRequestString(type); |
+ |
+ SiteEngagementService* site_engagement_service = SiteEngagementService::Get( |
+ Profile::FromBrowserContext(web_contents->GetBrowserContext())); |
+ double engagement_score = |
+ site_engagement_service->GetScore(requests[0]->GetOrigin()); |
+ |
+ // This is manually expanded from the UMA_HISTOGRAM_PERCENTAGE macro as the |
+ // macro does not work with a dynamically calculated histogram name. |
+ base::LinearHistogram::FactoryGet( |
rkaplow
2017/07/20 14:50:52
you should be able to switch tot he histogram_func
Timothy Loh
2017/07/21 02:46:43
Thanks, done!
|
+ name, 1, 101, 102, base::HistogramBase::kUmaTargetedHistogramFlag) |
+ ->Add(engagement_score); |
+} |
+ |
const std::string GetRapporMetric(ContentSettingsType permission, |
PermissionAction action) { |
std::string action_str; |
@@ -389,14 +452,29 @@ void PermissionUmaUtil::PermissionPromptShown( |
} |
} |
-void PermissionUmaUtil::PermissionPromptAccepted( |
- const std::vector<PermissionRequest*>& requests) { |
- RecordPromptDecided(requests, /*accepted=*/true); |
-} |
- |
-void PermissionUmaUtil::PermissionPromptDenied( |
- const std::vector<PermissionRequest*>& requests) { |
- RecordPromptDecided(requests, /*accepted=*/false); |
+void PermissionUmaUtil::PermissionPromptResolved( |
+ const std::vector<PermissionRequest*>& requests, |
+ const content::WebContents* web_contents, |
+ PermissionAction permission_action) { |
+ switch (permission_action) { |
+ case PermissionAction::GRANTED: |
+ RecordPromptDecided(requests, /*accepted=*/true); |
+ RecordEngagementMetric(requests, web_contents, "Accepted"); |
+ break; |
+ case PermissionAction::DENIED: |
+ RecordPromptDecided(requests, /*accepted=*/false); |
+ RecordEngagementMetric(requests, web_contents, "Denied"); |
+ break; |
+ case PermissionAction::DISMISSED: |
+ RecordEngagementMetric(requests, web_contents, "Dismissed"); |
+ break; |
+ case PermissionAction::IGNORED: |
+ RecordEngagementMetric(requests, web_contents, "Ignored"); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
} |
void PermissionUmaUtil::RecordPermissionPromptShown( |