Chromium Code Reviews| 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..9e1fe3bae8d9cd7c723b19a3265ca91e61db19f0 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,27 @@ 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; |
| + default: |
|
mlamouri (slow - plz ping)
2017/04/07 11:15:55
Add the case for COUNT here so all cases are taken
Zhiqiang Zhang (Slow)
2017/04/07 15:12:43
Actually, the mojo enum only have LAST (= SEEK_FOR
|
| + NOTREACHED(); |
| + } |
| + return MediaSessionUserAction::Count; |
| +} |
| + |
| } // anonymous namespace |
| using MediaSessionSuspendedSource = |
| @@ -310,6 +334,11 @@ void MediaSessionImpl::OnPlayerPaused(MediaSessionPlayerObserver* observer, |
| void MediaSessionImpl::Resume(SuspendType suspend_type) { |
| DCHECK(IsSuspended()); |
| + if (suspend_type == SuspendType::UI) { |
| + uma_helper_.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 +360,11 @@ void MediaSessionImpl::Suspend(SuspendType suspend_type) { |
| if (!IsActive()) |
| return; |
| + if (suspend_type == SuspendType::UI) { |
| + uma_helper_.RecordMediaSessionUserAction( |
| + MediaSessionUmaHelper::MediaSessionUserAction::PlayDefault); |
|
mlamouri (slow - plz ping)
2017/04/07 11:15:55
::PauseDefault?
Zhiqiang Zhang (Slow)
2017/04/07 15:12:43
Done.
|
| + } |
| + |
| OnSuspendInternal(suspend_type, State::SUSPENDED); |
| } |
| @@ -339,6 +373,11 @@ void MediaSessionImpl::Stop(SuspendType suspend_type) { |
| DCHECK(suspend_type != SuspendType::CONTENT); |
| DCHECK(!HasPepper()); |
| + if (suspend_type == SuspendType::UI) { |
| + uma_helper_.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 +674,9 @@ void MediaSessionImpl::OnMediaSessionActionsChanged( |
| void MediaSessionImpl::DidReceiveAction( |
| blink::mojom::MediaSessionAction action) { |
| + uma_helper_.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 |