| Index: chrome/browser/media/media_stream_devices_controller.cc
|
| diff --git a/chrome/browser/media/media_stream_devices_controller.cc b/chrome/browser/media/media_stream_devices_controller.cc
|
| index d6a122ebdc46446f0052c446e594139068da9668..9dc47941853832eed7ab81e1a0ef3dc039dda302 100644
|
| --- a/chrome/browser/media/media_stream_devices_controller.cc
|
| +++ b/chrome/browser/media/media_stream_devices_controller.cc
|
| @@ -17,6 +17,7 @@
|
| #include "chrome/browser/media/media_permission.h"
|
| #include "chrome/browser/media/media_stream_capture_indicator.h"
|
| #include "chrome/browser/media/media_stream_device_permissions.h"
|
| +#include "chrome/browser/permissions/permission_uma_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/common/chrome_switches.h"
|
| @@ -48,14 +49,6 @@ using content::BrowserThread;
|
|
|
| namespace {
|
|
|
| -enum DevicePermissionActions {
|
| - kAllowHttps = 0,
|
| - kAllowHttp,
|
| - kDeny,
|
| - kCancel,
|
| - kPermissionActionsMax // Must always be last!
|
| -};
|
| -
|
| // Returns true if the given ContentSettingsType is being requested in
|
| // |request|.
|
| bool ContentTypeIsRequested(ContentSettingsType type,
|
| @@ -72,6 +65,23 @@ bool ContentTypeIsRequested(ContentSettingsType type,
|
| return false;
|
| }
|
|
|
| +using PermissionActionCallback =
|
| + base::Callback<void(ContentSettingsType, const GURL&)>;
|
| +
|
| +// Calls |action_function| for each permission requested by |request|.
|
| +void RecordPermissionAction(const content::MediaStreamRequest& request,
|
| + PermissionActionCallback callback) {
|
| + if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
|
| + request)) {
|
| + callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
|
| + request.security_origin);
|
| + }
|
| + if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, request)) {
|
| + callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
|
| + request.security_origin);
|
| + }
|
| +}
|
| +
|
| // This helper class helps to measure the number of media stream requests that
|
| // occur. It ensures that only one request will be recorded per navigation, per
|
| // frame. TODO(raymes): Remove this when https://crbug.com/526324 is fixed.
|
| @@ -186,6 +196,8 @@ MediaStreamDevicesController::MediaStreamDevicesController(
|
|
|
| MediaStreamDevicesController::~MediaStreamDevicesController() {
|
| if (!callback_.is_null()) {
|
| + RecordPermissionAction(
|
| + request_, base::Bind(PermissionUmaUtil::PermissionIgnored));
|
| callback_.Run(content::MediaStreamDevices(),
|
| content::MEDIA_DEVICE_FAILED_DUE_TO_SHUTDOWN,
|
| scoped_ptr<content::MediaStreamUI>());
|
| @@ -224,8 +236,8 @@ const std::string& MediaStreamDevicesController::GetSecurityOriginSpec() const {
|
| void MediaStreamDevicesController::ForcePermissionDeniedTemporarily() {
|
| base::AutoReset<bool> persist_permissions(
|
| &persist_permission_changes_, false);
|
| - UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
|
| - kDeny, kPermissionActionsMax);
|
| + // TODO(tsergeant): Determine whether it is appropriate to record permission
|
| + // action metrics here, as this is a different sort of user action.
|
| RunCallback(CONTENT_SETTING_BLOCK,
|
| CONTENT_SETTING_BLOCK,
|
| content::MEDIA_DEVICE_PERMISSION_DENIED);
|
| @@ -266,14 +278,8 @@ GURL MediaStreamDevicesController::GetRequestingHostname() const {
|
| }
|
|
|
| void MediaStreamDevicesController::PermissionGranted() {
|
| - GURL origin(GetSecurityOriginSpec());
|
| - if (content::IsOriginSecure(origin)) {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
|
| - kAllowHttps, kPermissionActionsMax);
|
| - } else {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
|
| - kAllowHttp, kPermissionActionsMax);
|
| - }
|
| + RecordPermissionAction(
|
| + request_, base::Bind(PermissionUmaUtil::PermissionGranted));
|
| RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
|
| old_audio_setting_, CONTENT_SETTING_ALLOW),
|
| GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
|
| @@ -282,8 +288,8 @@ void MediaStreamDevicesController::PermissionGranted() {
|
| }
|
|
|
| void MediaStreamDevicesController::PermissionDenied() {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
|
| - kDeny, kPermissionActionsMax);
|
| + RecordPermissionAction(
|
| + request_, base::Bind(PermissionUmaUtil::PermissionDenied));
|
| RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
|
| old_audio_setting_, CONTENT_SETTING_BLOCK),
|
| GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
|
| @@ -292,8 +298,8 @@ void MediaStreamDevicesController::PermissionDenied() {
|
| }
|
|
|
| void MediaStreamDevicesController::Cancelled() {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
|
| - kCancel, kPermissionActionsMax);
|
| + RecordPermissionAction(
|
| + request_, base::Bind(PermissionUmaUtil::PermissionDismissed));
|
| RunCallback(old_audio_setting_, old_video_setting_,
|
| content::MEDIA_DEVICE_PERMISSION_DISMISSED);
|
| }
|
|
|