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); |
} |