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

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

Issue 2382723006: Revert of Letting Flash join MediaSession (stack implementaion) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session_type
Patch Set: Created 4 years, 2 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/media/session/audio_focus_manager.h" 5 #include "content/browser/media/session/audio_focus_manager.h"
6 6
7 #include "base/command_line.h"
8 #include "content/browser/media/session/media_session.h" 7 #include "content/browser/media/session/media_session.h"
9 #include "content/browser/media/session/media_session_observer.h"
10 #include "content/public/test/mock_render_process_host.h" 8 #include "content/public/test/mock_render_process_host.h"
11 #include "content/public/test/test_browser_context.h" 9 #include "content/public/test/test_browser_context.h"
12 #include "content/public/test/test_browser_thread.h" 10 #include "content/public/test/test_browser_thread.h"
13 #include "content/test/test_web_contents.h" 11 #include "content/test/test_web_contents.h"
14 #include "media/base/media_content_type.h"
15 #include "media/base/media_switches.h"
16 12
17 namespace content { 13 namespace content {
18 14
19 namespace {
20
21 class MockMediaSessionObserver : public MediaSessionObserver {
22 public:
23 void OnSuspend(int player_id) override {}
24 void OnResume(int player_id) override {}
25 void OnSetVolumeMultiplier(
26 int player_id, double volume_multiplier) override {}
27 };
28
29 } // anonymous namespace
30
31 using AudioFocusType = AudioFocusManager::AudioFocusType; 15 using AudioFocusType = AudioFocusManager::AudioFocusType;
32 using SuspendType = MediaSession::SuspendType; 16 using SuspendType = MediaSession::SuspendType;
33 17
34 class AudioFocusManagerTest : public testing::Test { 18 class AudioFocusManagerTest : public testing::Test {
35 public: 19 public:
36 AudioFocusManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_) {} 20 AudioFocusManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_) {}
37 21
38 void SetUp() override { 22 void SetUp() override {
39 base::CommandLine::ForCurrentProcess()->AppendSwitch(
40 switches::kEnableDefaultMediaSession);
41 rph_factory_.reset(new MockRenderProcessHostFactory()); 23 rph_factory_.reset(new MockRenderProcessHostFactory());
42 SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get()); 24 SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get());
43 browser_context_.reset(new TestBrowserContext()); 25 browser_context_.reset(new TestBrowserContext());
44 pepper_observer_.reset(new MockMediaSessionObserver());
45 } 26 }
46 27
47 void TearDown() override { 28 void TearDown() override {
48 browser_context_.reset(); 29 browser_context_.reset();
49 SiteInstanceImpl::set_render_process_host_factory(nullptr); 30 SiteInstanceImpl::set_render_process_host_factory(nullptr);
50 rph_factory_.reset(); 31 rph_factory_.reset();
51 } 32 }
52 33
53 MediaSession* GetAudioFocusedSession() const { 34 WebContents* GetAudioFocusedContent() const {
54 const auto& audio_focus_stack = 35 if (!AudioFocusManager::GetInstance()->focus_entry_)
55 AudioFocusManager::GetInstance()->audio_focus_stack_; 36 return nullptr;
56 for (auto iter = audio_focus_stack.rbegin(); 37 return AudioFocusManager::GetInstance()->focus_entry_->web_contents();
57 iter != audio_focus_stack.rend(); ++iter) {
58 if ((*iter)->audio_focus_type() ==
59 AudioFocusManager::AudioFocusType::Gain)
60 return (*iter);
61 }
62 return nullptr;
63 } 38 }
64 39
65 int GetTransientMaybeDuckCount() const { 40 int GetTransientMaybeDuckCount() const {
66 int count = 0; 41 return AudioFocusManager::GetInstance()->TransientMayDuckEntriesCount();
67 const auto& audio_focus_stack =
68 AudioFocusManager::GetInstance()->audio_focus_stack_;
69 for (auto iter = audio_focus_stack.rbegin();
70 iter != audio_focus_stack.rend(); ++iter) {
71 if ((*iter)->audio_focus_type() ==
72 AudioFocusManager::AudioFocusType::GainTransientMayDuck) {
73 ++count;
74 } else {
75 break;
76 }
77 }
78
79 return count;
80 } 42 }
81 43
82 double IsSessionDucking(MediaSession* session) { 44 double IsSessionDucking(MediaSession* session) {
83 return session->is_ducking_; // Quack! Quack! 45 return session->is_ducking_; // Quack! Quack!
84 } 46 }
85 47
86 void RequestAudioFocus(MediaSession* session,
87 AudioFocusManager::AudioFocusType audio_focus_type) {
88 session->RequestSystemAudioFocus(audio_focus_type);
89 }
90
91 void AbandonAudioFocus(MediaSession* session) {
92 session->AbandonSystemAudioFocusIfNeeded();
93 }
94
95 WebContents* CreateWebContents() { 48 WebContents* CreateWebContents() {
96 return TestWebContents::Create(browser_context_.get(), 49 return TestWebContents::Create(browser_context_.get(),
97 SiteInstance::SiteInstance::Create(browser_context_.get())); 50 SiteInstance::SiteInstance::Create(browser_context_.get()));
98 } 51 }
99 52
100 std::unique_ptr<MediaSessionObserver> pepper_observer_;
101
102 private: 53 private:
103 base::MessageLoopForUI message_loop_; 54 base::MessageLoopForUI message_loop_;
104 TestBrowserThread ui_thread_; 55 TestBrowserThread ui_thread_;
105 56
106 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; 57 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_;
107 std::unique_ptr<TestBrowserContext> browser_context_; 58 std::unique_ptr<TestBrowserContext> browser_context_;
108 }; 59 };
109 60
110 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) { 61 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) {
111 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance(); 62 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance();
112 ASSERT_TRUE(!!audio_focus_manager); 63 ASSERT_TRUE(!!audio_focus_manager);
113 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance()); 64 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance());
114 } 65 }
115 66
116 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) { 67 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) {
117 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 68 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
118 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 69 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
119 70
120 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 71 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
121 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 72 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
122 73
123 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 74 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
124 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); 75 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
125 76
126 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 77 ASSERT_EQ(nullptr, GetAudioFocusedContent());
127 78
128 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 79 AudioFocusManager::GetInstance()->RequestAudioFocus(
129 ASSERT_EQ(media_session_1, GetAudioFocusedSession()); 80 media_session_1, AudioFocusManager::AudioFocusType::Gain);
81 ASSERT_EQ(web_contents_1.get(), GetAudioFocusedContent());
130 82
131 RequestAudioFocus(media_session_2, AudioFocusManager::AudioFocusType::Gain); 83 AudioFocusManager::GetInstance()->RequestAudioFocus(
132 ASSERT_EQ(media_session_2, GetAudioFocusedSession()); 84 media_session_2, AudioFocusManager::AudioFocusType::Gain);
85 ASSERT_EQ(web_contents_2.get(), GetAudioFocusedContent());
133 86
134 RequestAudioFocus(media_session_3, AudioFocusManager::AudioFocusType::Gain); 87 AudioFocusManager::GetInstance()->RequestAudioFocus(
135 ASSERT_EQ(media_session_3, GetAudioFocusedSession()); 88 media_session_3, AudioFocusManager::AudioFocusType::Gain);
89 ASSERT_EQ(web_contents_3.get(), GetAudioFocusedContent());
136 } 90 }
137 91
138 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) { 92 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) {
139 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 93 std::unique_ptr<WebContents> web_contents(CreateWebContents());
140 MediaSession* media_session = MediaSession::Get(web_contents.get()); 94 MediaSession* media_session = MediaSession::Get(web_contents.get());
141 95
142 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 96 ASSERT_EQ(nullptr, GetAudioFocusedContent());
143 97
144 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 98 AudioFocusManager::GetInstance()->RequestAudioFocus(
145 ASSERT_EQ(media_session, GetAudioFocusedSession()); 99 media_session, AudioFocusManager::AudioFocusType::Gain);
100 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
146 101
147 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 102 AudioFocusManager::GetInstance()->RequestAudioFocus(
148 ASSERT_EQ(media_session, GetAudioFocusedSession()); 103 media_session, AudioFocusManager::AudioFocusType::Gain);
104 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
149 } 105 }
150 106
151 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) { 107 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) {
152 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 108 std::unique_ptr<WebContents> web_contents(CreateWebContents());
153 MediaSession* media_session = MediaSession::Get(web_contents.get()); 109 MediaSession* media_session = MediaSession::Get(web_contents.get());
154 110
155 RequestAudioFocus( 111 AudioFocusManager::GetInstance()->RequestAudioFocus(
156 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 112 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
157 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 113 ASSERT_EQ(nullptr, GetAudioFocusedContent());
158 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 114 ASSERT_EQ(1, GetTransientMaybeDuckCount());
159 115
160 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 116 AudioFocusManager::GetInstance()->RequestAudioFocus(
161 ASSERT_EQ(media_session, GetAudioFocusedSession()); 117 media_session, AudioFocusManager::AudioFocusType::Gain);
118 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
162 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 119 ASSERT_EQ(0, GetTransientMaybeDuckCount());
163 } 120 }
164 121
165 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) { 122 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) {
166 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 123 std::unique_ptr<WebContents> web_contents(CreateWebContents());
167 MediaSession* media_session = MediaSession::Get(web_contents.get()); 124 MediaSession* media_session = MediaSession::Get(web_contents.get());
168 125
169 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 126 AudioFocusManager::GetInstance()->RequestAudioFocus(
170 ASSERT_EQ(media_session, GetAudioFocusedSession()); 127 media_session, AudioFocusManager::AudioFocusType::Gain);
128 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
171 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 129 ASSERT_EQ(0, GetTransientMaybeDuckCount());
172 130
173 RequestAudioFocus( 131 AudioFocusManager::GetInstance()->RequestAudioFocus(
174 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 132 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
175 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 133 ASSERT_EQ(nullptr, GetAudioFocusedContent());
176 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 134 ASSERT_EQ(1, GetTransientMaybeDuckCount());
177 ASSERT_FALSE(IsSessionDucking(media_session)); 135 ASSERT_FALSE(IsSessionDucking(media_session));
178 } 136 }
179 137
180 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) { 138 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) {
181 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 139 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
182 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 140 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
183 141
184 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 142 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
185 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 143 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
186 144
187 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 145 AudioFocusManager::GetInstance()->RequestAudioFocus(
146 media_session_1, AudioFocusManager::AudioFocusType::Gain);
188 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 147 ASSERT_EQ(0, GetTransientMaybeDuckCount());
189 ASSERT_FALSE(IsSessionDucking(media_session_1)); 148 ASSERT_FALSE(IsSessionDucking(media_session_1));
190 149
191 RequestAudioFocus( 150 AudioFocusManager::GetInstance()->RequestAudioFocus(
192 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 151 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
193 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 152 ASSERT_EQ(1, GetTransientMaybeDuckCount());
194 ASSERT_TRUE(IsSessionDucking(media_session_1)); 153 ASSERT_TRUE(IsSessionDucking(media_session_1));
195 154
196 RequestAudioFocus( 155 AudioFocusManager::GetInstance()->RequestAudioFocus(
197 media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 156 media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
198 ASSERT_EQ(2, GetTransientMaybeDuckCount()); 157 ASSERT_EQ(2, GetTransientMaybeDuckCount());
199 ASSERT_FALSE(IsSessionDucking(media_session_1)); 158 ASSERT_FALSE(IsSessionDucking(media_session_1));
200 } 159 }
201 160
202 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) { 161 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) {
203 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 162 std::unique_ptr<WebContents> web_contents(CreateWebContents());
204 MediaSession* media_session = MediaSession::Get(web_contents.get()); 163 MediaSession* media_session = MediaSession::Get(web_contents.get());
205 164
206 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 165 AudioFocusManager::GetInstance()->RequestAudioFocus(
207 ASSERT_EQ(media_session, GetAudioFocusedSession()); 166 media_session, AudioFocusManager::AudioFocusType::Gain);
167 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
208 168
209 AbandonAudioFocus(media_session); 169 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
210 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 170 ASSERT_EQ(nullptr, GetAudioFocusedContent());
211 } 171 }
212 172
213 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) { 173 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) {
214 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 174 std::unique_ptr<WebContents> web_contents(CreateWebContents());
215 MediaSession* media_session = MediaSession::Get(web_contents.get()); 175 MediaSession* media_session = MediaSession::Get(web_contents.get());
216 176
217 AbandonAudioFocus(media_session); 177 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
218 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 178 ASSERT_EQ(nullptr, GetAudioFocusedContent());
219 } 179 }
220 180
221 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) { 181 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) {
222 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 182 std::unique_ptr<WebContents> web_contents(CreateWebContents());
223 MediaSession* media_session = MediaSession::Get(web_contents.get()); 183 MediaSession* media_session = MediaSession::Get(web_contents.get());
224 184
225 RequestAudioFocus( 185 AudioFocusManager::GetInstance()->RequestAudioFocus(
226 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 186 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
227 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 187 ASSERT_EQ(1, GetTransientMaybeDuckCount());
228 188
229 AbandonAudioFocus(media_session); 189 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session);
230 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 190 ASSERT_EQ(0, GetTransientMaybeDuckCount());
231 } 191 }
232 192
233 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) { 193 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) {
234 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 194 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
235 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 195 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
236 196
237 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 197 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
238 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 198 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
239 199
240 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 200 AudioFocusManager::GetInstance()->RequestAudioFocus(
201 media_session_1, AudioFocusManager::AudioFocusType::Gain);
241 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 202 ASSERT_EQ(0, GetTransientMaybeDuckCount());
242 ASSERT_FALSE(IsSessionDucking(media_session_1)); 203 ASSERT_FALSE(IsSessionDucking(media_session_1));
243 204
244 RequestAudioFocus( 205 AudioFocusManager::GetInstance()->RequestAudioFocus(
245 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 206 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
246 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 207 ASSERT_EQ(1, GetTransientMaybeDuckCount());
247 ASSERT_TRUE(IsSessionDucking(media_session_1)); 208 ASSERT_TRUE(IsSessionDucking(media_session_1));
248 209
249 AbandonAudioFocus(media_session_1); 210 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_1);
250 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 211 ASSERT_EQ(1, GetTransientMaybeDuckCount());
251 212
252 AbandonAudioFocus(media_session_2); 213 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
253 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 214 ASSERT_EQ(0, GetTransientMaybeDuckCount());
254 215
255 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 216 AudioFocusManager::GetInstance()->RequestAudioFocus(
217 media_session_1, AudioFocusManager::AudioFocusType::Gain);
256 ASSERT_FALSE(IsSessionDucking(media_session_1)); 218 ASSERT_FALSE(IsSessionDucking(media_session_1));
257 } 219 }
258 220
259 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) { 221 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) {
260 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 222 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
261 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 223 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
262 224
263 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 225 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
264 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 226 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
265 227
266 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 228 AudioFocusManager::GetInstance()->RequestAudioFocus(
229 media_session_1, AudioFocusManager::AudioFocusType::Gain);
267 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 230 ASSERT_EQ(0, GetTransientMaybeDuckCount());
268 ASSERT_FALSE(IsSessionDucking(media_session_1)); 231 ASSERT_FALSE(IsSessionDucking(media_session_1));
269 232
270 RequestAudioFocus( 233 AudioFocusManager::GetInstance()->RequestAudioFocus(
271 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 234 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
272 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 235 ASSERT_EQ(1, GetTransientMaybeDuckCount());
273 ASSERT_TRUE(IsSessionDucking(media_session_1)); 236 ASSERT_TRUE(IsSessionDucking(media_session_1));
274 237
275 AbandonAudioFocus(media_session_2); 238 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
276 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 239 ASSERT_EQ(0, GetTransientMaybeDuckCount());
277 ASSERT_FALSE(IsSessionDucking(media_session_1)); 240 ASSERT_FALSE(IsSessionDucking(media_session_1));
278 } 241 }
279 242
280 TEST_F(AudioFocusManagerTest, DuckWhilePlaying) { 243 TEST_F(AudioFocusManagerTest, DuckWhilePlaying) {
281 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 244 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
282 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 245 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
283 246
284 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 247 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
285 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 248 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
286 249
287 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 250 AudioFocusManager::GetInstance()->RequestAudioFocus(
251 media_session_1, AudioFocusManager::AudioFocusType::Gain);
288 ASSERT_FALSE(IsSessionDucking(media_session_1)); 252 ASSERT_FALSE(IsSessionDucking(media_session_1));
289 253
290 RequestAudioFocus( 254 AudioFocusManager::GetInstance()->RequestAudioFocus(
291 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 255 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
292 ASSERT_TRUE(IsSessionDucking(media_session_1)); 256 ASSERT_TRUE(IsSessionDucking(media_session_1));
293 } 257 }
294 258
295 TEST_F(AudioFocusManagerTest, GainSuspendsTransient) { 259 TEST_F(AudioFocusManagerTest, DuckWhenStarting) {
296 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 260 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
297 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 261 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
298 262
299 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 263 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
300 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 264 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
301 265
302 RequestAudioFocus( 266 AudioFocusManager::GetInstance()->RequestAudioFocus(
303 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 267 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
304 268
305 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 269 AudioFocusManager::GetInstance()->RequestAudioFocus(
306 ASSERT_TRUE(media_session_2->IsSuspended()); 270 media_session_1, AudioFocusManager::AudioFocusType::Gain);
271 ASSERT_TRUE(IsSessionDucking(media_session_1));
307 } 272 }
308 273
309 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) { 274 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) {
310 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 275 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
311 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 276 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
312 277
313 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 278 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
314 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 279 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
315 280
316 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 281 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
317 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); 282 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
318 283
319 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 284 AudioFocusManager::GetInstance()->RequestAudioFocus(
285 media_session_1, AudioFocusManager::AudioFocusType::Gain);
320 ASSERT_FALSE(IsSessionDucking(media_session_1)); 286 ASSERT_FALSE(IsSessionDucking(media_session_1));
321 287
322 RequestAudioFocus( 288 AudioFocusManager::GetInstance()->RequestAudioFocus(
323 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 289 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
324 ASSERT_TRUE(IsSessionDucking(media_session_1)); 290 ASSERT_TRUE(IsSessionDucking(media_session_1));
325 291
326 RequestAudioFocus( 292 AudioFocusManager::GetInstance()->RequestAudioFocus(
327 media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 293 media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
328 ASSERT_TRUE(IsSessionDucking(media_session_1)); 294 ASSERT_TRUE(IsSessionDucking(media_session_1));
329 295
330 AbandonAudioFocus(media_session_2); 296 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2);
331 ASSERT_TRUE(IsSessionDucking(media_session_1)); 297 ASSERT_TRUE(IsSessionDucking(media_session_1));
332 298
333 AbandonAudioFocus(media_session_3); 299 AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_3);
334 ASSERT_FALSE(IsSessionDucking(media_session_1)); 300 ASSERT_FALSE(IsSessionDucking(media_session_1));
335 } 301 }
336 302
337 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) { 303 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) {
338 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 304 std::unique_ptr<WebContents> web_contents(CreateWebContents());
339 MediaSession* media_session = MediaSession::Get(web_contents.get()); 305 MediaSession* media_session = MediaSession::Get(web_contents.get());
340 306
341 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 307 AudioFocusManager::GetInstance()->RequestAudioFocus(
342 ASSERT_EQ(media_session, GetAudioFocusedSession()); 308 media_session, AudioFocusManager::AudioFocusType::Gain);
309 ASSERT_EQ(web_contents.get(), GetAudioFocusedContent());
343 310
344 web_contents.reset(); 311 web_contents.reset();
345 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 312 ASSERT_EQ(nullptr, GetAudioFocusedContent());
346 } 313 }
347 314
348 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) { 315 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) {
349 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 316 std::unique_ptr<WebContents> web_contents(CreateWebContents());
350 MediaSession* media_session = MediaSession::Get(web_contents.get()); 317 MediaSession* media_session = MediaSession::Get(web_contents.get());
351 318
352 RequestAudioFocus( 319 AudioFocusManager::GetInstance()->RequestAudioFocus(
353 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 320 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
354 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 321 ASSERT_EQ(1, GetTransientMaybeDuckCount());
355 322
356 web_contents.reset(); 323 web_contents.reset();
357 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 324 ASSERT_EQ(0, GetTransientMaybeDuckCount());
358 } 325 }
359 326
360 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) { 327 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) {
361 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 328 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
362 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 329 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
363 330
364 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 331 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
365 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 332 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
366 333
367 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 334 AudioFocusManager::GetInstance()->RequestAudioFocus(
335 media_session_1, AudioFocusManager::AudioFocusType::Gain);
368 ASSERT_FALSE(IsSessionDucking(media_session_1)); 336 ASSERT_FALSE(IsSessionDucking(media_session_1));
369 337
370 RequestAudioFocus( 338 AudioFocusManager::GetInstance()->RequestAudioFocus(
371 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 339 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
372 ASSERT_TRUE(IsSessionDucking(media_session_1)); 340 ASSERT_TRUE(IsSessionDucking(media_session_1));
373 341
374 web_contents_2.reset(); 342 web_contents_2.reset();
375 ASSERT_FALSE(IsSessionDucking(media_session_1)); 343 ASSERT_FALSE(IsSessionDucking(media_session_1));
376 } 344 }
377 345
378 TEST_F(AudioFocusManagerTest, PepperRequestsGainFocus) {
379 std::unique_ptr<WebContents> web_contents(CreateWebContents());
380 MediaSession* media_session = MediaSession::Get(web_contents.get());
381
382 media_session->AddPlayer(
383 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
384 ASSERT_EQ(media_session, GetAudioFocusedSession());
385
386 media_session->RemovePlayer(pepper_observer_.get(), 0);
387 ASSERT_EQ(nullptr, GetAudioFocusedSession());
388 }
389
390 TEST_F(AudioFocusManagerTest, GainDucksPepper) {
391 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
392 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
393
394 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
395 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
396
397 media_session_1->AddPlayer(
398 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
399
400 RequestAudioFocus(
401 media_session_2, AudioFocusManager::AudioFocusType::Gain);
402
403 ASSERT_EQ(media_session_2, GetAudioFocusedSession());
404 ASSERT_TRUE(media_session_1->IsActive());
405 ASSERT_TRUE(IsSessionDucking(media_session_1));
406 }
407
408 TEST_F(AudioFocusManagerTest, AbandoningGainFocusRevokesTopMostPepperSession) {
409 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
410 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
411
412 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
413 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
414
415 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
416 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get());
417
418 media_session_1->AddPlayer(
419 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
420
421 RequestAudioFocus(
422 media_session_2, AudioFocusManager::AudioFocusType::Gain);
423 RequestAudioFocus(
424 media_session_3, AudioFocusManager::AudioFocusType::Gain);
425
426 ASSERT_EQ(media_session_3, GetAudioFocusedSession());
427 ASSERT_TRUE(media_session_2->IsReallySuspended());
428 ASSERT_TRUE(media_session_1->IsActive());
429 ASSERT_TRUE(IsSessionDucking(media_session_1));
430
431 AbandonAudioFocus(media_session_3);
432 ASSERT_EQ(media_session_1, GetAudioFocusedSession());
433 }
434
435 } // namespace content 346 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/session/audio_focus_manager.cc ('k') | content/browser/media/session/media_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698