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