Skip to content

Commit

Permalink
Add hooks to permission layer for permission action reporting
Browse files Browse the repository at this point in the history
- permissions_reporter_ added to SafeBrowsingPingManager
- Permission user actions collected by PermissionUmaUtil

Reports are only sent to opted-in users (Safe Browsing AND Chrome Tab Sync AND Chrome Pref Sync)

Only origin, permission type, and permission action are collected.

Data collected are from PROMPT source UI only.

BUG=613883

Review-Url: https://codereview.chromium.org/2047253002
Cr-Commit-Position: refs/heads/master@{#405051}
  • Loading branch information
stefanocs authored and Commit bot committed Jul 13, 2016
1 parent f92b62a commit 41b6de3
Show file tree
Hide file tree
Showing 17 changed files with 433 additions and 135 deletions.
30 changes: 16 additions & 14 deletions chrome/browser/media/media_stream_devices_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,23 +72,25 @@ bool ContentTypeIsRequested(content::PermissionType type,
}

using PermissionActionCallback =
base::Callback<void(content::PermissionType, const GURL&)>;
base::Callback<void(content::PermissionType, const GURL&, Profile*)>;

void RecordSinglePermissionAction(const content::MediaStreamRequest& request,
content::PermissionType permission_type,
Profile* profile,
PermissionActionCallback callback) {
if (ContentTypeIsRequested(permission_type, request)) {
callback.Run(permission_type, request.security_origin);
callback.Run(permission_type, request.security_origin, profile);
}
}

// Calls |action_function| for each permission requested by |request|.
void RecordPermissionAction(const content::MediaStreamRequest& request,
Profile* profile,
PermissionActionCallback callback) {
RecordSinglePermissionAction(request, content::PermissionType::AUDIO_CAPTURE,
callback);
profile, callback);
RecordSinglePermissionAction(request, content::PermissionType::VIDEO_CAPTURE,
callback);
profile, callback);
}

// This helper class helps to measure the number of media stream requests that
Expand Down Expand Up @@ -204,8 +206,8 @@ MediaStreamDevicesController::MediaStreamDevicesController(

MediaStreamDevicesController::~MediaStreamDevicesController() {
if (!callback_.is_null()) {
RecordPermissionAction(
request_, base::Bind(PermissionUmaUtil::PermissionIgnored));
RecordPermissionAction(request_, profile_,
base::Bind(PermissionUmaUtil::PermissionIgnored));
callback_.Run(content::MediaStreamDevices(),
content::MEDIA_DEVICE_FAILED_DUE_TO_SHUTDOWN,
std::unique_ptr<content::MediaStreamUI>());
Expand Down Expand Up @@ -280,8 +282,8 @@ GURL MediaStreamDevicesController::GetOrigin() const {
}

void MediaStreamDevicesController::PermissionGranted() {
RecordPermissionAction(
request_, base::Bind(PermissionUmaUtil::PermissionGranted));
RecordPermissionAction(request_, profile_,
base::Bind(PermissionUmaUtil::PermissionGranted));
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_ALLOW),
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
Expand All @@ -290,8 +292,8 @@ void MediaStreamDevicesController::PermissionGranted() {
}

void MediaStreamDevicesController::PermissionDenied() {
RecordPermissionAction(
request_, base::Bind(PermissionUmaUtil::PermissionDenied));
RecordPermissionAction(request_, profile_,
base::Bind(PermissionUmaUtil::PermissionDenied));
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_BLOCK),
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
Expand All @@ -302,11 +304,11 @@ void MediaStreamDevicesController::PermissionDenied() {
void MediaStreamDevicesController::GroupedRequestFinished(bool audio_accepted,
bool video_accepted) {
RecordSinglePermissionAction(
request_, content::PermissionType::AUDIO_CAPTURE,
request_, content::PermissionType::AUDIO_CAPTURE, profile_,
base::Bind(audio_accepted ? PermissionUmaUtil::PermissionGranted
: PermissionUmaUtil::PermissionDenied));
RecordSinglePermissionAction(
request_, content::PermissionType::VIDEO_CAPTURE,
request_, content::PermissionType::VIDEO_CAPTURE, profile_,
base::Bind(video_accepted ? PermissionUmaUtil::PermissionGranted
: PermissionUmaUtil::PermissionDenied));

Expand All @@ -322,8 +324,8 @@ void MediaStreamDevicesController::GroupedRequestFinished(bool audio_accepted,
}

void MediaStreamDevicesController::Cancelled() {
RecordPermissionAction(
request_, base::Bind(PermissionUmaUtil::PermissionDismissed));
RecordPermissionAction(request_, profile_,
base::Bind(PermissionUmaUtil::PermissionDismissed));
RunCallback(old_audio_setting_, old_video_setting_,
content::MEDIA_DEVICE_PERMISSION_DISMISSED);
}
Expand Down
4 changes: 3 additions & 1 deletion chrome/browser/permissions/permission_bubble_request_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ PermissionBubbleRequestImpl::PermissionBubbleRequestImpl(
PermissionBubbleRequestImpl::~PermissionBubbleRequestImpl() {
DCHECK(is_finished_);
if (!action_taken_)
PermissionUmaUtil::PermissionIgnored(permission_type_, request_origin_);
// TODO(stefanocs): Pass in a non null profile.
PermissionUmaUtil::PermissionIgnored(permission_type_, request_origin_,
nullptr);
}

gfx::VectorIconId PermissionBubbleRequestImpl::GetVectorIconId() const {
Expand Down
9 changes: 6 additions & 3 deletions chrome/browser/permissions/permission_context_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,15 @@ void PermissionContextBase::PermissionDecided(
DCHECK(content_setting == CONTENT_SETTING_ALLOW ||
content_setting == CONTENT_SETTING_BLOCK);
if (content_setting == CONTENT_SETTING_ALLOW)
PermissionUmaUtil::PermissionGranted(permission_type_, requesting_origin);
PermissionUmaUtil::PermissionGranted(permission_type_, requesting_origin,
profile_);
else
PermissionUmaUtil::PermissionDenied(permission_type_, requesting_origin);
PermissionUmaUtil::PermissionDenied(permission_type_, requesting_origin,
profile_);
} else {
DCHECK_EQ(content_setting, CONTENT_SETTING_DEFAULT);
PermissionUmaUtil::PermissionDismissed(permission_type_, requesting_origin);
PermissionUmaUtil::PermissionDismissed(permission_type_, requesting_origin,
profile_);
}
#endif

Expand Down
4 changes: 3 additions & 1 deletion chrome/browser/permissions/permission_infobar_delegate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@

PermissionInfobarDelegate::~PermissionInfobarDelegate() {
if (!action_taken_)
PermissionUmaUtil::PermissionIgnored(permission_type_, requesting_origin_);
// TODO(stefanocs): Pass in a non null profile.
PermissionUmaUtil::PermissionIgnored(permission_type_, requesting_origin_,
nullptr);
}

PermissionInfobarDelegate::PermissionInfobarDelegate(
Expand Down
9 changes: 6 additions & 3 deletions chrome/browser/permissions/permission_queue_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,14 @@ void PermissionQueueController::OnPermissionSet(
if (update_content_setting) {
UpdateContentSetting(requesting_frame, embedder, allowed);
if (allowed)
PermissionUmaUtil::PermissionGranted(permission_type_, requesting_frame);
PermissionUmaUtil::PermissionGranted(permission_type_, requesting_frame,
profile_);
else
PermissionUmaUtil::PermissionDenied(permission_type_, requesting_frame);
PermissionUmaUtil::PermissionDenied(permission_type_, requesting_frame,
profile_);
} else {
PermissionUmaUtil::PermissionDismissed(permission_type_, requesting_frame);
PermissionUmaUtil::PermissionDismissed(permission_type_, requesting_frame,
profile_);
}

// Cancel this request first, then notify listeners. TODO(pkasting): Why
Expand Down
Loading

0 comments on commit 41b6de3

Please sign in to comment.