OLD | NEW |
---|---|
(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* GetRenderFrameHost() const override { | |
mlamouri (slow - plz ping)
2017/04/10 12:37:18
style: render_frame_host()
Zhiqiang Zhang (Slow)
2017/04/10 15:43:05
Done.
| |
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* session() { return MediaSessionImpl::Get(contents()); } | |
mlamouri (slow - plz ping)
2017/04/10 12:37:18
style: GetSession()
Zhiqiang Zhang (Slow)
2017/04/10 15:43:05
Done.
| |
79 | |
80 void StartPlayer() { | |
81 player_.reset( | |
82 new MockMediaSessionPlayerObserver(contents()->GetMainFrame())); | |
83 session()->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 session()->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 session()->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 session()->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 session()->Suspend(SuspendType::SYSTEM); | |
121 session()->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 session()->Suspend(SuspendType::SYSTEM); | |
131 session()->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 session()->Suspend(SuspendType::SYSTEM); | |
140 session()->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 session()->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 session()->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 session()->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 | |
OLD | NEW |