| Index: content/browser/media/session/media_session_impl_uma_unittest.cc
|
| diff --git a/content/browser/media/session/media_session_impl_uma_unittest.cc b/content/browser/media/session/media_session_impl_uma_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..523a52e2c7ebc48a9416e4d4106b5ecf594bc48d
|
| --- /dev/null
|
| +++ b/content/browser/media/session/media_session_impl_uma_unittest.cc
|
| @@ -0,0 +1,179 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/browser/media/session/media_session_impl.h"
|
| +
|
| +#include <map>
|
| +#include <memory>
|
| +
|
| +#include "base/metrics/histogram_samples.h"
|
| +#include "base/test/histogram_tester.h"
|
| +#include "content/browser/media/session/media_session_player_observer.h"
|
| +#include "content/test/test_render_view_host.h"
|
| +#include "content/test/test_web_contents.h"
|
| +#include "media/base/media_content_type.h"
|
| +#include "third_party/WebKit/public/platform/modules/mediasession/media_session.mojom.h"
|
| +
|
| +namespace content {
|
| +
|
| +using MediaSessionUserAction = MediaSessionUmaHelper::MediaSessionUserAction;
|
| +using SuspendType = MediaSession::SuspendType;
|
| +using MediaSessionAction = blink::mojom::MediaSessionAction;
|
| +
|
| +namespace {
|
| +
|
| +static const int kPlayerId = 0;
|
| +
|
| +class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver {
|
| + public:
|
| + explicit MockMediaSessionPlayerObserver(RenderFrameHost* rfh)
|
| + : render_frame_host_(rfh) {}
|
| +
|
| + ~MockMediaSessionPlayerObserver() override = default;
|
| +
|
| + void OnSuspend(int player_id) override {}
|
| + void OnResume(int player_id) override {}
|
| + void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override {
|
| + }
|
| +
|
| + RenderFrameHost* render_frame_host() const override {
|
| + return render_frame_host_;
|
| + }
|
| +
|
| + private:
|
| + RenderFrameHost* render_frame_host_;
|
| +};
|
| +
|
| +struct ActionMappingEntry {
|
| + blink::mojom::MediaSessionAction action;
|
| + MediaSessionUserAction user_action;
|
| +};
|
| +
|
| +ActionMappingEntry kActionMappings[] = {
|
| + {MediaSessionAction::PLAY, MediaSessionUserAction::Play},
|
| + {MediaSessionAction::PAUSE, MediaSessionUserAction::Pause},
|
| + {MediaSessionAction::PREVIOUS_TRACK, MediaSessionUserAction::PreviousTrack},
|
| + {MediaSessionAction::NEXT_TRACK, MediaSessionUserAction::NextTrack},
|
| + {MediaSessionAction::SEEK_BACKWARD, MediaSessionUserAction::SeekBackward},
|
| + {MediaSessionAction::SEEK_FORWARD, MediaSessionUserAction::SeekForward},
|
| +};
|
| +
|
| +} // anonymous namespace
|
| +
|
| +class MediaSessionImplUmaTest : public RenderViewHostImplTestHarness {
|
| + public:
|
| + MediaSessionImplUmaTest() = default;
|
| + ~MediaSessionImplUmaTest() override = default;
|
| +
|
| + void SetUp() override {
|
| + RenderViewHostImplTestHarness::SetUp();
|
| + contents()->GetMainFrame()->InitializeRenderFrameIfNeeded();
|
| + StartPlayer();
|
| + }
|
| +
|
| + void TearDown() override { RenderViewHostImplTestHarness::TearDown(); }
|
| +
|
| + protected:
|
| + MediaSessionImpl* GetSession() { return MediaSessionImpl::Get(contents()); }
|
| +
|
| + void StartPlayer() {
|
| + player_.reset(
|
| + new MockMediaSessionPlayerObserver(contents()->GetMainFrame()));
|
| + GetSession()->AddPlayer(player_.get(), kPlayerId,
|
| + media::MediaContentType::Persistent);
|
| + }
|
| +
|
| + std::unique_ptr<base::HistogramSamples> GetHistogramSamplesSinceTestStart(
|
| + const std::string& name) {
|
| + return histogram_tester_.GetHistogramSamplesSinceCreation(name);
|
| + }
|
| +
|
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_;
|
| + base::HistogramTester histogram_tester_;
|
| +};
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUISuspend) {
|
| + GetSession()->Suspend(SuspendType::UI);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(1, samples->TotalCount());
|
| + EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
|
| + MediaSessionUserAction::PauseDefault)));
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemSuspend) {
|
| + GetSession()->Suspend(SuspendType::SYSTEM);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(0, samples->TotalCount());
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnContentSuspend) {
|
| + GetSession()->Suspend(SuspendType::CONTENT);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(0, samples->TotalCount());
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUIResume) {
|
| + GetSession()->Suspend(SuspendType::SYSTEM);
|
| + GetSession()->Resume(SuspendType::UI);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(1, samples->TotalCount());
|
| + EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
|
| + MediaSessionUserAction::PlayDefault)));
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemResume) {
|
| + GetSession()->Suspend(SuspendType::SYSTEM);
|
| + GetSession()->Resume(SuspendType::SYSTEM);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(0, samples->TotalCount());
|
| +}
|
| +
|
| +// This should never happen but just check this to be safe.
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnContentResume) {
|
| + GetSession()->Suspend(SuspendType::SYSTEM);
|
| + GetSession()->Resume(SuspendType::CONTENT);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(0, samples->TotalCount());
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUIStop) {
|
| + GetSession()->Stop(SuspendType::UI);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(1, samples->TotalCount());
|
| + EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
|
| + MediaSessionUserAction::StopDefault)));
|
| +}
|
| +
|
| +// This should never happen but just check this to be safe.
|
| +TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemStop) {
|
| + GetSession()->Stop(SuspendType::SYSTEM);
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
|
| + EXPECT_EQ(0, samples->TotalCount());
|
| +}
|
| +
|
| +TEST_F(MediaSessionImplUmaTest, RecordMediaSessionAction) {
|
| + for (const auto& mapping_entry : kActionMappings) {
|
| + // Uniquely create a HistogramTester for each action to check the histograms
|
| + // for each action independently.
|
| + base::HistogramTester histogram_tester;
|
| + GetSession()->DidReceiveAction(mapping_entry.action);
|
| +
|
| + std::unique_ptr<base::HistogramSamples> samples(
|
| + histogram_tester.GetHistogramSamplesSinceCreation(
|
| + "Media.Session.UserAction"));
|
| + EXPECT_EQ(1, samples->TotalCount());
|
| + EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
|
| + mapping_entry.user_action)));
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|