| 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..8e0969ef516e16226c5cc1d4df7b93eedbd50d77 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
|
|
|