Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(792)

Unified Diff: content/browser/media/session/media_session_impl.cc

Issue 2798083002: Record user interactions with MediaSession by action type (Closed)
Patch Set: addressed style nits Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/media/session/media_session_impl.cc
diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc
index 222701e81c0411222060cc19fb5bc558f55a4d03..32d55395bd10e52eae21da24f266e66a0ffc52b2 100644
--- a/content/browser/media/session/media_session_impl.cc
+++ b/content/browser/media/session/media_session_impl.cc
@@ -15,6 +15,7 @@
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "media/base/media_content_type.h"
+#include "third_party/WebKit/public/platform/modules/mediasession/media_session.mojom.h"
#if defined(OS_ANDROID)
#include "content/browser/media/session/media_session_android.h"
@@ -22,6 +23,8 @@
namespace content {
+using MediaSessionUserAction = MediaSessionUmaHelper::MediaSessionUserAction;
+
namespace {
const double kDefaultVolumeMultiplier = 1.0;
@@ -47,6 +50,26 @@ size_t ComputeFrameDepth(RenderFrameHost* rfh,
return depth;
}
+MediaSessionUserAction MediaSessionActionToUserAction(
+ blink::mojom::MediaSessionAction action) {
+ switch (action) {
+ case blink::mojom::MediaSessionAction::PLAY:
+ return MediaSessionUserAction::Play;
+ case blink::mojom::MediaSessionAction::PAUSE:
+ return MediaSessionUserAction::Pause;
+ case blink::mojom::MediaSessionAction::PREVIOUS_TRACK:
+ return MediaSessionUserAction::PreviousTrack;
+ case blink::mojom::MediaSessionAction::NEXT_TRACK:
+ return MediaSessionUserAction::NextTrack;
+ case blink::mojom::MediaSessionAction::SEEK_BACKWARD:
+ return MediaSessionUserAction::SeekBackward;
+ case blink::mojom::MediaSessionAction::SEEK_FORWARD:
+ return MediaSessionUserAction::SeekForward;
+ }
+ NOTREACHED();
+ return MediaSessionUserAction::Count;
+}
+
} // anonymous namespace
using MediaSessionSuspendedSource =
@@ -310,6 +333,11 @@ void MediaSessionImpl::OnPlayerPaused(MediaSessionPlayerObserver* observer,
void MediaSessionImpl::Resume(SuspendType suspend_type) {
DCHECK(IsSuspended());
+ if (suspend_type == SuspendType::UI) {
+ MediaSessionUmaHelper::RecordMediaSessionUserAction(
+ MediaSessionUmaHelper::MediaSessionUserAction::PlayDefault);
+ }
+
// When the resume requests comes from another source than system, audio focus
// must be requested.
if (suspend_type != SuspendType::SYSTEM) {
@@ -331,6 +359,11 @@ void MediaSessionImpl::Suspend(SuspendType suspend_type) {
if (!IsActive())
return;
+ if (suspend_type == SuspendType::UI) {
+ MediaSessionUmaHelper::RecordMediaSessionUserAction(
+ MediaSessionUserAction::PauseDefault);
+ }
+
OnSuspendInternal(suspend_type, State::SUSPENDED);
}
@@ -339,6 +372,11 @@ void MediaSessionImpl::Stop(SuspendType suspend_type) {
DCHECK(suspend_type != SuspendType::CONTENT);
DCHECK(!HasPepper());
+ if (suspend_type == SuspendType::UI) {
+ MediaSessionUmaHelper::RecordMediaSessionUserAction(
+ MediaSessionUmaHelper::MediaSessionUserAction::StopDefault);
+ }
+
// TODO(mlamouri): merge the logic between UI and SYSTEM.
if (suspend_type == SuspendType::SYSTEM) {
OnSuspendInternal(suspend_type, State::INACTIVE);
@@ -635,6 +673,9 @@ void MediaSessionImpl::OnMediaSessionActionsChanged(
void MediaSessionImpl::DidReceiveAction(
blink::mojom::MediaSessionAction action) {
+ MediaSessionUmaHelper::RecordMediaSessionUserAction(
+ MediaSessionActionToUserAction(action));
+
// Pause all players in non-routed frames if the action is PAUSE.
//
// This is the default PAUSE action handler per Media Session API spec. The
@@ -652,17 +693,17 @@ void MediaSessionImpl::DidReceiveAction(
RenderFrameHost* rfh_of_routed_service =
routed_service_ ? routed_service_->GetRenderFrameHost() : nullptr;
for (const auto& player : normal_players_) {
- if (player.observer->GetRenderFrameHost() != rfh_of_routed_service)
+ if (player.observer->render_frame_host() != rfh_of_routed_service)
player.observer->OnSuspend(player.player_id);
}
for (const auto& player : pepper_players_) {
- if (player.observer->GetRenderFrameHost() != rfh_of_routed_service) {
+ if (player.observer->render_frame_host() != rfh_of_routed_service) {
player.observer->OnSetVolumeMultiplier(player.player_id,
kDuckingVolumeMultiplier);
}
}
for (const auto& player : one_shot_players_) {
- if (player.observer->GetRenderFrameHost() != rfh_of_routed_service)
+ if (player.observer->render_frame_host() != rfh_of_routed_service)
player.observer->OnSuspend(player.player_id);
}
}
@@ -696,19 +737,19 @@ MediaSessionServiceImpl* MediaSessionImpl::ComputeServiceForRouting() {
// prefer the top-most frame.
std::set<RenderFrameHost*> frames;
for (const auto& player : normal_players_) {
- RenderFrameHost* frame = player.observer->GetRenderFrameHost();
+ RenderFrameHost* frame = player.observer->render_frame_host();
if (frame)
frames.insert(frame);
}
for (const auto& player : one_shot_players_) {
- RenderFrameHost* frame = player.observer->GetRenderFrameHost();
+ RenderFrameHost* frame = player.observer->render_frame_host();
if (frame)
frames.insert(frame);
}
for (const auto& player : pepper_players_) {
- RenderFrameHost* frame = player.observer->GetRenderFrameHost();
+ RenderFrameHost* frame = player.observer->render_frame_host();
if (frame)
frames.insert(frame);
}

Powered by Google App Engine
This is Rietveld 408576698