| 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..b8d5245b8fa52e6e5d5a3f347536c2e4b3a0dfe4 100644
|
| --- a/chrome/browser/permissions/permission_uma_util.cc
|
| +++ b/chrome/browser/permissions/permission_uma_util.cc
|
| @@ -7,10 +7,12 @@
|
| #include <utility>
|
|
|
| #include "base/command_line.h"
|
| +#include "base/metrics/histogram_functions.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #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 +27,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 +65,63 @@ 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());
|
| +
|
| + base::UmaHistogramPercentage(name, engagement_score);
|
| +}
|
| +
|
| const std::string GetRapporMetric(ContentSettingsType permission,
|
| PermissionAction action) {
|
| std::string action_str;
|
| @@ -389,14 +449,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(
|
|
|