Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Side by Side Diff: content/browser/media/session/media_session_impl_uma_unittest.cc

Issue 2798083002: Record user interactions with MediaSession by action type (Closed)
Patch Set: addressed style nits Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/media/session/media_session_impl.h"
6
7 #include <map>
8 #include <memory>
9
10 #include "base/metrics/histogram_samples.h"
11 #include "base/test/histogram_tester.h"
12 #include "content/browser/media/session/media_session_player_observer.h"
13 #include "content/test/test_render_view_host.h"
14 #include "content/test/test_web_contents.h"
15 #include "media/base/media_content_type.h"
16 #include "third_party/WebKit/public/platform/modules/mediasession/media_session. mojom.h"
17
18 namespace content {
19
20 using MediaSessionUserAction = MediaSessionUmaHelper::MediaSessionUserAction;
21 using SuspendType = MediaSession::SuspendType;
22 using MediaSessionAction = blink::mojom::MediaSessionAction;
23
24 namespace {
25
26 static const int kPlayerId = 0;
27
28 class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver {
29 public:
30 explicit MockMediaSessionPlayerObserver(RenderFrameHost* rfh)
31 : render_frame_host_(rfh) {}
32
33 ~MockMediaSessionPlayerObserver() override = default;
34
35 void OnSuspend(int player_id) override {}
36 void OnResume(int player_id) override {}
37 void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override {
38 }
39
40 RenderFrameHost* render_frame_host() const override {
41 return render_frame_host_;
42 }
43
44 private:
45 RenderFrameHost* render_frame_host_;
46 };
47
48 struct ActionMappingEntry {
49 blink::mojom::MediaSessionAction action;
50 MediaSessionUserAction user_action;
51 };
52
53 ActionMappingEntry kActionMappings[] = {
54 {MediaSessionAction::PLAY, MediaSessionUserAction::Play},
55 {MediaSessionAction::PAUSE, MediaSessionUserAction::Pause},
56 {MediaSessionAction::PREVIOUS_TRACK, MediaSessionUserAction::PreviousTrack},
57 {MediaSessionAction::NEXT_TRACK, MediaSessionUserAction::NextTrack},
58 {MediaSessionAction::SEEK_BACKWARD, MediaSessionUserAction::SeekBackward},
59 {MediaSessionAction::SEEK_FORWARD, MediaSessionUserAction::SeekForward},
60 };
61
62 } // anonymous namespace
63
64 class MediaSessionImplUmaTest : public RenderViewHostImplTestHarness {
65 public:
66 MediaSessionImplUmaTest() = default;
67 ~MediaSessionImplUmaTest() override = default;
68
69 void SetUp() override {
70 RenderViewHostImplTestHarness::SetUp();
71 contents()->GetMainFrame()->InitializeRenderFrameIfNeeded();
72 StartPlayer();
73 }
74
75 void TearDown() override { RenderViewHostImplTestHarness::TearDown(); }
76
77 protected:
78 MediaSessionImpl* GetSession() { return MediaSessionImpl::Get(contents()); }
79
80 void StartPlayer() {
81 player_.reset(
82 new MockMediaSessionPlayerObserver(contents()->GetMainFrame()));
83 GetSession()->AddPlayer(player_.get(), kPlayerId,
84 media::MediaContentType::Persistent);
85 }
86
87 std::unique_ptr<base::HistogramSamples> GetHistogramSamplesSinceTestStart(
88 const std::string& name) {
89 return histogram_tester_.GetHistogramSamplesSinceCreation(name);
90 }
91
92 std::unique_ptr<MockMediaSessionPlayerObserver> player_;
93 base::HistogramTester histogram_tester_;
94 };
95
96 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUISuspend) {
97 GetSession()->Suspend(SuspendType::UI);
98 std::unique_ptr<base::HistogramSamples> samples(
99 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
100 EXPECT_EQ(1, samples->TotalCount());
101 EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
102 MediaSessionUserAction::PauseDefault)));
103 }
104
105 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemSuspend) {
106 GetSession()->Suspend(SuspendType::SYSTEM);
107 std::unique_ptr<base::HistogramSamples> samples(
108 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
109 EXPECT_EQ(0, samples->TotalCount());
110 }
111
112 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnContentSuspend) {
113 GetSession()->Suspend(SuspendType::CONTENT);
114 std::unique_ptr<base::HistogramSamples> samples(
115 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
116 EXPECT_EQ(0, samples->TotalCount());
117 }
118
119 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUIResume) {
120 GetSession()->Suspend(SuspendType::SYSTEM);
121 GetSession()->Resume(SuspendType::UI);
122 std::unique_ptr<base::HistogramSamples> samples(
123 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
124 EXPECT_EQ(1, samples->TotalCount());
125 EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
126 MediaSessionUserAction::PlayDefault)));
127 }
128
129 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemResume) {
130 GetSession()->Suspend(SuspendType::SYSTEM);
131 GetSession()->Resume(SuspendType::SYSTEM);
132 std::unique_ptr<base::HistogramSamples> samples(
133 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
134 EXPECT_EQ(0, samples->TotalCount());
135 }
136
137 // This should never happen but just check this to be safe.
138 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnContentResume) {
139 GetSession()->Suspend(SuspendType::SYSTEM);
140 GetSession()->Resume(SuspendType::CONTENT);
141 std::unique_ptr<base::HistogramSamples> samples(
142 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
143 EXPECT_EQ(0, samples->TotalCount());
144 }
145
146 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnUIStop) {
147 GetSession()->Stop(SuspendType::UI);
148 std::unique_ptr<base::HistogramSamples> samples(
149 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
150 EXPECT_EQ(1, samples->TotalCount());
151 EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
152 MediaSessionUserAction::StopDefault)));
153 }
154
155 // This should never happen but just check this to be safe.
156 TEST_F(MediaSessionImplUmaTest, RecordPauseDefaultOnSystemStop) {
157 GetSession()->Stop(SuspendType::SYSTEM);
158 std::unique_ptr<base::HistogramSamples> samples(
159 GetHistogramSamplesSinceTestStart("Media.Session.UserAction"));
160 EXPECT_EQ(0, samples->TotalCount());
161 }
162
163 TEST_F(MediaSessionImplUmaTest, RecordMediaSessionAction) {
164 for (const auto& mapping_entry : kActionMappings) {
165 // Uniquely create a HistogramTester for each action to check the histograms
166 // for each action independently.
167 base::HistogramTester histogram_tester;
168 GetSession()->DidReceiveAction(mapping_entry.action);
169
170 std::unique_ptr<base::HistogramSamples> samples(
171 histogram_tester.GetHistogramSamplesSinceCreation(
172 "Media.Session.UserAction"));
173 EXPECT_EQ(1, samples->TotalCount());
174 EXPECT_EQ(1, samples->GetCount(static_cast<base::HistogramBase::Sample>(
175 mapping_entry.user_action)));
176 }
177 }
178
179 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698