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

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

Issue 2453623003: Decouple MediaSession messages from WebContents (full patch) (Closed)
Patch Set: nit Created 4 years, 1 month 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" 7 #include "base/command_line.h"
8 #include "content/browser/media/session/media_session.h" 8 #include "content/browser/media/session/media_session_impl.h"
9 #include "content/browser/media/session/media_session_player_observer.h" 9 #include "content/browser/media/session/media_session_player_observer.h"
10 #include "content/public/test/mock_render_process_host.h" 10 #include "content/public/test/mock_render_process_host.h"
11 #include "content/public/test/test_browser_context.h" 11 #include "content/public/test/test_browser_context.h"
12 #include "content/public/test/test_browser_thread.h" 12 #include "content/public/test/test_browser_thread.h"
13 #include "content/test/test_web_contents.h" 13 #include "content/test/test_web_contents.h"
14 #include "media/base/media_content_type.h" 14 #include "media/base/media_content_type.h"
15 #include "media/base/media_switches.h" 15 #include "media/base/media_switches.h"
16 16
17 namespace content { 17 namespace content {
18 18
(...skipping 24 matching lines...) Expand all
43 browser_context_.reset(new TestBrowserContext()); 43 browser_context_.reset(new TestBrowserContext());
44 pepper_observer_.reset(new MockMediaSessionPlayerObserver()); 44 pepper_observer_.reset(new MockMediaSessionPlayerObserver());
45 } 45 }
46 46
47 void TearDown() override { 47 void TearDown() override {
48 browser_context_.reset(); 48 browser_context_.reset();
49 SiteInstanceImpl::set_render_process_host_factory(nullptr); 49 SiteInstanceImpl::set_render_process_host_factory(nullptr);
50 rph_factory_.reset(); 50 rph_factory_.reset();
51 } 51 }
52 52
53 MediaSession* GetAudioFocusedSession() const { 53 MediaSessionImpl* GetAudioFocusedSession() const {
54 const auto& audio_focus_stack = 54 const auto& audio_focus_stack =
55 AudioFocusManager::GetInstance()->audio_focus_stack_; 55 AudioFocusManager::GetInstance()->audio_focus_stack_;
56 for (auto iter = audio_focus_stack.rbegin(); 56 for (auto iter = audio_focus_stack.rbegin();
57 iter != audio_focus_stack.rend(); ++iter) { 57 iter != audio_focus_stack.rend(); ++iter) {
58 if ((*iter)->audio_focus_type() == 58 if ((*iter)->audio_focus_type() ==
59 AudioFocusManager::AudioFocusType::Gain) 59 AudioFocusManager::AudioFocusType::Gain)
60 return (*iter); 60 return (*iter);
61 } 61 }
62 return nullptr; 62 return nullptr;
63 } 63 }
64 64
65 int GetTransientMaybeDuckCount() const { 65 int GetTransientMaybeDuckCount() const {
66 int count = 0; 66 int count = 0;
67 const auto& audio_focus_stack = 67 const auto& audio_focus_stack =
68 AudioFocusManager::GetInstance()->audio_focus_stack_; 68 AudioFocusManager::GetInstance()->audio_focus_stack_;
69 for (auto iter = audio_focus_stack.rbegin(); 69 for (auto iter = audio_focus_stack.rbegin();
70 iter != audio_focus_stack.rend(); ++iter) { 70 iter != audio_focus_stack.rend(); ++iter) {
71 if ((*iter)->audio_focus_type() == 71 if ((*iter)->audio_focus_type() ==
72 AudioFocusManager::AudioFocusType::GainTransientMayDuck) { 72 AudioFocusManager::AudioFocusType::GainTransientMayDuck) {
73 ++count; 73 ++count;
74 } else { 74 } else {
75 break; 75 break;
76 } 76 }
77 } 77 }
78 78
79 return count; 79 return count;
80 } 80 }
81 81
82 double IsSessionDucking(MediaSession* session) { 82 double IsSessionDucking(MediaSessionImpl* session) {
83 return session->is_ducking_; // Quack! Quack! 83 return session->is_ducking_; // Quack! Quack!
84 } 84 }
85 85
86 void RequestAudioFocus(MediaSession* session, 86 void RequestAudioFocus(MediaSessionImpl* session,
87 AudioFocusManager::AudioFocusType audio_focus_type) { 87 AudioFocusManager::AudioFocusType audio_focus_type) {
88 session->RequestSystemAudioFocus(audio_focus_type); 88 session->RequestSystemAudioFocus(audio_focus_type);
89 } 89 }
90 90
91 void AbandonAudioFocus(MediaSession* session) { 91 void AbandonAudioFocus(MediaSessionImpl* session) {
92 session->AbandonSystemAudioFocusIfNeeded(); 92 session->AbandonSystemAudioFocusIfNeeded();
93 } 93 }
94 94
95 WebContents* CreateWebContents() { 95 WebContents* CreateWebContents() {
96 return TestWebContents::Create(browser_context_.get(), 96 return TestWebContents::Create(browser_context_.get(),
97 SiteInstance::SiteInstance::Create(browser_context_.get())); 97 SiteInstance::SiteInstance::Create(browser_context_.get()));
98 } 98 }
99 99
100 std::unique_ptr<MediaSessionPlayerObserver> pepper_observer_; 100 std::unique_ptr<MediaSessionPlayerObserver> pepper_observer_;
101 101
102 private: 102 private:
103 base::MessageLoopForUI message_loop_; 103 base::MessageLoopForUI message_loop_;
104 TestBrowserThread ui_thread_; 104 TestBrowserThread ui_thread_;
105 105
106 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; 106 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_;
107 std::unique_ptr<TestBrowserContext> browser_context_; 107 std::unique_ptr<TestBrowserContext> browser_context_;
108 }; 108 };
109 109
110 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) { 110 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) {
111 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance(); 111 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance();
112 ASSERT_TRUE(!!audio_focus_manager); 112 ASSERT_TRUE(!!audio_focus_manager);
113 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance()); 113 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance());
114 } 114 }
115 115
116 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) { 116 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) {
117 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 117 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
118 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 118 MediaSessionImpl* media_session_1 =
119 MediaSessionImpl::Get(web_contents_1.get());
119 120
120 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 121 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
121 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 122 MediaSessionImpl* media_session_2 =
123 MediaSessionImpl::Get(web_contents_2.get());
122 124
123 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 125 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
124 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); 126 MediaSessionImpl* media_session_3 =
127 MediaSessionImpl::Get(web_contents_3.get());
125 128
126 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 129 ASSERT_EQ(nullptr, GetAudioFocusedSession());
127 130
128 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 131 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
129 ASSERT_EQ(media_session_1, GetAudioFocusedSession()); 132 ASSERT_EQ(media_session_1, GetAudioFocusedSession());
130 133
131 RequestAudioFocus(media_session_2, AudioFocusManager::AudioFocusType::Gain); 134 RequestAudioFocus(media_session_2, AudioFocusManager::AudioFocusType::Gain);
132 ASSERT_EQ(media_session_2, GetAudioFocusedSession()); 135 ASSERT_EQ(media_session_2, GetAudioFocusedSession());
133 136
134 RequestAudioFocus(media_session_3, AudioFocusManager::AudioFocusType::Gain); 137 RequestAudioFocus(media_session_3, AudioFocusManager::AudioFocusType::Gain);
135 ASSERT_EQ(media_session_3, GetAudioFocusedSession()); 138 ASSERT_EQ(media_session_3, GetAudioFocusedSession());
136 } 139 }
137 140
138 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) { 141 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) {
139 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 142 std::unique_ptr<WebContents> web_contents(CreateWebContents());
140 MediaSession* media_session = MediaSession::Get(web_contents.get()); 143 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
141 144
142 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 145 ASSERT_EQ(nullptr, GetAudioFocusedSession());
143 146
144 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 147 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
145 ASSERT_EQ(media_session, GetAudioFocusedSession()); 148 ASSERT_EQ(media_session, GetAudioFocusedSession());
146 149
147 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 150 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
148 ASSERT_EQ(media_session, GetAudioFocusedSession()); 151 ASSERT_EQ(media_session, GetAudioFocusedSession());
149 } 152 }
150 153
151 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) { 154 TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) {
152 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 155 std::unique_ptr<WebContents> web_contents(CreateWebContents());
153 MediaSession* media_session = MediaSession::Get(web_contents.get()); 156 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
154 157
155 RequestAudioFocus( 158 RequestAudioFocus(
156 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 159 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
157 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 160 ASSERT_EQ(nullptr, GetAudioFocusedSession());
158 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 161 ASSERT_EQ(1, GetTransientMaybeDuckCount());
159 162
160 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 163 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
161 ASSERT_EQ(media_session, GetAudioFocusedSession()); 164 ASSERT_EQ(media_session, GetAudioFocusedSession());
162 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 165 ASSERT_EQ(0, GetTransientMaybeDuckCount());
163 } 166 }
164 167
165 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) { 168 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) {
166 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 169 std::unique_ptr<WebContents> web_contents(CreateWebContents());
167 MediaSession* media_session = MediaSession::Get(web_contents.get()); 170 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
168 171
169 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 172 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
170 ASSERT_EQ(media_session, GetAudioFocusedSession()); 173 ASSERT_EQ(media_session, GetAudioFocusedSession());
171 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 174 ASSERT_EQ(0, GetTransientMaybeDuckCount());
172 175
173 RequestAudioFocus( 176 RequestAudioFocus(
174 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 177 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
175 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 178 ASSERT_EQ(nullptr, GetAudioFocusedSession());
176 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 179 ASSERT_EQ(1, GetTransientMaybeDuckCount());
177 ASSERT_FALSE(IsSessionDucking(media_session)); 180 ASSERT_FALSE(IsSessionDucking(media_session));
178 } 181 }
179 182
180 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) { 183 TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) {
181 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 184 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
182 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 185 MediaSessionImpl* media_session_1 =
186 MediaSessionImpl::Get(web_contents_1.get());
183 187
184 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 188 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
185 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 189 MediaSessionImpl* media_session_2 =
190 MediaSessionImpl::Get(web_contents_2.get());
186 191
187 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 192 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
188 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 193 ASSERT_EQ(0, GetTransientMaybeDuckCount());
189 ASSERT_FALSE(IsSessionDucking(media_session_1)); 194 ASSERT_FALSE(IsSessionDucking(media_session_1));
190 195
191 RequestAudioFocus( 196 RequestAudioFocus(
192 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 197 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
193 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 198 ASSERT_EQ(1, GetTransientMaybeDuckCount());
194 ASSERT_TRUE(IsSessionDucking(media_session_1)); 199 ASSERT_TRUE(IsSessionDucking(media_session_1));
195 200
196 RequestAudioFocus( 201 RequestAudioFocus(
197 media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 202 media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
198 ASSERT_EQ(2, GetTransientMaybeDuckCount()); 203 ASSERT_EQ(2, GetTransientMaybeDuckCount());
199 ASSERT_FALSE(IsSessionDucking(media_session_1)); 204 ASSERT_FALSE(IsSessionDucking(media_session_1));
200 } 205 }
201 206
202 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) { 207 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) {
203 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 208 std::unique_ptr<WebContents> web_contents(CreateWebContents());
204 MediaSession* media_session = MediaSession::Get(web_contents.get()); 209 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
205 210
206 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 211 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
207 ASSERT_EQ(media_session, GetAudioFocusedSession()); 212 ASSERT_EQ(media_session, GetAudioFocusedSession());
208 213
209 AbandonAudioFocus(media_session); 214 AbandonAudioFocus(media_session);
210 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 215 ASSERT_EQ(nullptr, GetAudioFocusedSession());
211 } 216 }
212 217
213 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) { 218 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) {
214 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 219 std::unique_ptr<WebContents> web_contents(CreateWebContents());
215 MediaSession* media_session = MediaSession::Get(web_contents.get()); 220 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
216 221
217 AbandonAudioFocus(media_session); 222 AbandonAudioFocus(media_session);
218 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 223 ASSERT_EQ(nullptr, GetAudioFocusedSession());
219 } 224 }
220 225
221 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) { 226 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) {
222 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 227 std::unique_ptr<WebContents> web_contents(CreateWebContents());
223 MediaSession* media_session = MediaSession::Get(web_contents.get()); 228 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
224 229
225 RequestAudioFocus( 230 RequestAudioFocus(
226 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 231 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
227 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 232 ASSERT_EQ(1, GetTransientMaybeDuckCount());
228 233
229 AbandonAudioFocus(media_session); 234 AbandonAudioFocus(media_session);
230 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 235 ASSERT_EQ(0, GetTransientMaybeDuckCount());
231 } 236 }
232 237
233 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) { 238 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) {
234 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 239 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
235 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 240 MediaSessionImpl* media_session_1 =
241 MediaSessionImpl::Get(web_contents_1.get());
236 242
237 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 243 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
238 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 244 MediaSessionImpl* media_session_2 =
245 MediaSessionImpl::Get(web_contents_2.get());
239 246
240 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 247 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
241 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 248 ASSERT_EQ(0, GetTransientMaybeDuckCount());
242 ASSERT_FALSE(IsSessionDucking(media_session_1)); 249 ASSERT_FALSE(IsSessionDucking(media_session_1));
243 250
244 RequestAudioFocus( 251 RequestAudioFocus(
245 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 252 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
246 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 253 ASSERT_EQ(1, GetTransientMaybeDuckCount());
247 ASSERT_TRUE(IsSessionDucking(media_session_1)); 254 ASSERT_TRUE(IsSessionDucking(media_session_1));
248 255
249 AbandonAudioFocus(media_session_1); 256 AbandonAudioFocus(media_session_1);
250 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 257 ASSERT_EQ(1, GetTransientMaybeDuckCount());
251 258
252 AbandonAudioFocus(media_session_2); 259 AbandonAudioFocus(media_session_2);
253 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 260 ASSERT_EQ(0, GetTransientMaybeDuckCount());
254 261
255 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 262 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
256 ASSERT_FALSE(IsSessionDucking(media_session_1)); 263 ASSERT_FALSE(IsSessionDucking(media_session_1));
257 } 264 }
258 265
259 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) { 266 TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) {
260 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 267 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
261 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 268 MediaSessionImpl* media_session_1 =
269 MediaSessionImpl::Get(web_contents_1.get());
262 270
263 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 271 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
264 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 272 MediaSessionImpl* media_session_2 =
273 MediaSessionImpl::Get(web_contents_2.get());
265 274
266 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 275 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
267 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 276 ASSERT_EQ(0, GetTransientMaybeDuckCount());
268 ASSERT_FALSE(IsSessionDucking(media_session_1)); 277 ASSERT_FALSE(IsSessionDucking(media_session_1));
269 278
270 RequestAudioFocus( 279 RequestAudioFocus(
271 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 280 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
272 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 281 ASSERT_EQ(1, GetTransientMaybeDuckCount());
273 ASSERT_TRUE(IsSessionDucking(media_session_1)); 282 ASSERT_TRUE(IsSessionDucking(media_session_1));
274 283
275 AbandonAudioFocus(media_session_2); 284 AbandonAudioFocus(media_session_2);
276 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 285 ASSERT_EQ(0, GetTransientMaybeDuckCount());
277 ASSERT_FALSE(IsSessionDucking(media_session_1)); 286 ASSERT_FALSE(IsSessionDucking(media_session_1));
278 } 287 }
279 288
280 TEST_F(AudioFocusManagerTest, DuckWhilePlaying) { 289 TEST_F(AudioFocusManagerTest, DuckWhilePlaying) {
281 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 290 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
282 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 291 MediaSessionImpl* media_session_1 =
292 MediaSessionImpl::Get(web_contents_1.get());
283 293
284 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 294 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
285 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 295 MediaSessionImpl* media_session_2 =
296 MediaSessionImpl::Get(web_contents_2.get());
286 297
287 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 298 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
288 ASSERT_FALSE(IsSessionDucking(media_session_1)); 299 ASSERT_FALSE(IsSessionDucking(media_session_1));
289 300
290 RequestAudioFocus( 301 RequestAudioFocus(
291 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 302 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
292 ASSERT_TRUE(IsSessionDucking(media_session_1)); 303 ASSERT_TRUE(IsSessionDucking(media_session_1));
293 } 304 }
294 305
295 TEST_F(AudioFocusManagerTest, GainSuspendsTransient) { 306 TEST_F(AudioFocusManagerTest, GainSuspendsTransient) {
296 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 307 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
297 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 308 MediaSessionImpl* media_session_1 =
309 MediaSessionImpl::Get(web_contents_1.get());
298 310
299 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 311 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
300 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 312 MediaSessionImpl* media_session_2 =
313 MediaSessionImpl::Get(web_contents_2.get());
301 314
302 RequestAudioFocus( 315 RequestAudioFocus(
303 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 316 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
304 317
305 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 318 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
306 ASSERT_TRUE(media_session_2->IsSuspended()); 319 ASSERT_TRUE(media_session_2->IsSuspended());
307 } 320 }
308 321
309 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) { 322 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) {
310 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 323 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
311 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 324 MediaSessionImpl* media_session_1 =
325 MediaSessionImpl::Get(web_contents_1.get());
312 326
313 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 327 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
314 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 328 MediaSessionImpl* media_session_2 =
329 MediaSessionImpl::Get(web_contents_2.get());
315 330
316 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 331 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
317 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); 332 MediaSessionImpl* media_session_3 =
333 MediaSessionImpl::Get(web_contents_3.get());
318 334
319 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 335 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
320 ASSERT_FALSE(IsSessionDucking(media_session_1)); 336 ASSERT_FALSE(IsSessionDucking(media_session_1));
321 337
322 RequestAudioFocus( 338 RequestAudioFocus(
323 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 339 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
324 ASSERT_TRUE(IsSessionDucking(media_session_1)); 340 ASSERT_TRUE(IsSessionDucking(media_session_1));
325 341
326 RequestAudioFocus( 342 RequestAudioFocus(
327 media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 343 media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
328 ASSERT_TRUE(IsSessionDucking(media_session_1)); 344 ASSERT_TRUE(IsSessionDucking(media_session_1));
329 345
330 AbandonAudioFocus(media_session_2); 346 AbandonAudioFocus(media_session_2);
331 ASSERT_TRUE(IsSessionDucking(media_session_1)); 347 ASSERT_TRUE(IsSessionDucking(media_session_1));
332 348
333 AbandonAudioFocus(media_session_3); 349 AbandonAudioFocus(media_session_3);
334 ASSERT_FALSE(IsSessionDucking(media_session_1)); 350 ASSERT_FALSE(IsSessionDucking(media_session_1));
335 } 351 }
336 352
337 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) { 353 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) {
338 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 354 std::unique_ptr<WebContents> web_contents(CreateWebContents());
339 MediaSession* media_session = MediaSession::Get(web_contents.get()); 355 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
340 356
341 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); 357 RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain);
342 ASSERT_EQ(media_session, GetAudioFocusedSession()); 358 ASSERT_EQ(media_session, GetAudioFocusedSession());
343 359
344 web_contents.reset(); 360 web_contents.reset();
345 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 361 ASSERT_EQ(nullptr, GetAudioFocusedSession());
346 } 362 }
347 363
348 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) { 364 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) {
349 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 365 std::unique_ptr<WebContents> web_contents(CreateWebContents());
350 MediaSession* media_session = MediaSession::Get(web_contents.get()); 366 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
351 367
352 RequestAudioFocus( 368 RequestAudioFocus(
353 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 369 media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
354 ASSERT_EQ(1, GetTransientMaybeDuckCount()); 370 ASSERT_EQ(1, GetTransientMaybeDuckCount());
355 371
356 web_contents.reset(); 372 web_contents.reset();
357 ASSERT_EQ(0, GetTransientMaybeDuckCount()); 373 ASSERT_EQ(0, GetTransientMaybeDuckCount());
358 } 374 }
359 375
360 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) { 376 TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) {
361 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 377 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
362 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 378 MediaSessionImpl* media_session_1 =
379 MediaSessionImpl::Get(web_contents_1.get());
363 380
364 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 381 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
365 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 382 MediaSessionImpl* media_session_2 =
383 MediaSessionImpl::Get(web_contents_2.get());
366 384
367 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); 385 RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain);
368 ASSERT_FALSE(IsSessionDucking(media_session_1)); 386 ASSERT_FALSE(IsSessionDucking(media_session_1));
369 387
370 RequestAudioFocus( 388 RequestAudioFocus(
371 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 389 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
372 ASSERT_TRUE(IsSessionDucking(media_session_1)); 390 ASSERT_TRUE(IsSessionDucking(media_session_1));
373 391
374 web_contents_2.reset(); 392 web_contents_2.reset();
375 ASSERT_FALSE(IsSessionDucking(media_session_1)); 393 ASSERT_FALSE(IsSessionDucking(media_session_1));
376 } 394 }
377 395
378 TEST_F(AudioFocusManagerTest, PepperRequestsGainFocus) { 396 TEST_F(AudioFocusManagerTest, PepperRequestsGainFocus) {
379 std::unique_ptr<WebContents> web_contents(CreateWebContents()); 397 std::unique_ptr<WebContents> web_contents(CreateWebContents());
380 MediaSession* media_session = MediaSession::Get(web_contents.get()); 398 MediaSessionImpl* media_session = MediaSessionImpl::Get(web_contents.get());
381 399
382 media_session->AddPlayer( 400 media_session->AddPlayer(
383 pepper_observer_.get(), 0, media::MediaContentType::Pepper); 401 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
384 ASSERT_EQ(media_session, GetAudioFocusedSession()); 402 ASSERT_EQ(media_session, GetAudioFocusedSession());
385 403
386 media_session->RemovePlayer(pepper_observer_.get(), 0); 404 media_session->RemovePlayer(pepper_observer_.get(), 0);
387 ASSERT_EQ(nullptr, GetAudioFocusedSession()); 405 ASSERT_EQ(nullptr, GetAudioFocusedSession());
388 } 406 }
389 407
390 TEST_F(AudioFocusManagerTest, GainDucksPepper) { 408 TEST_F(AudioFocusManagerTest, GainDucksPepper) {
391 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 409 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
392 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 410 MediaSessionImpl* media_session_1 =
411 MediaSessionImpl::Get(web_contents_1.get());
393 412
394 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 413 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
395 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 414 MediaSessionImpl* media_session_2 =
415 MediaSessionImpl::Get(web_contents_2.get());
396 416
397 media_session_1->AddPlayer( 417 media_session_1->AddPlayer(
398 pepper_observer_.get(), 0, media::MediaContentType::Pepper); 418 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
399 419
400 RequestAudioFocus( 420 RequestAudioFocus(
401 media_session_2, AudioFocusManager::AudioFocusType::Gain); 421 media_session_2, AudioFocusManager::AudioFocusType::Gain);
402 422
403 ASSERT_EQ(media_session_2, GetAudioFocusedSession()); 423 ASSERT_EQ(media_session_2, GetAudioFocusedSession());
404 ASSERT_TRUE(media_session_1->IsActive()); 424 ASSERT_TRUE(media_session_1->IsActive());
405 ASSERT_TRUE(IsSessionDucking(media_session_1)); 425 ASSERT_TRUE(IsSessionDucking(media_session_1));
406 } 426 }
407 427
408 TEST_F(AudioFocusManagerTest, AbandoningGainFocusRevokesTopMostPepperSession) { 428 TEST_F(AudioFocusManagerTest, AbandoningGainFocusRevokesTopMostPepperSession) {
409 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 429 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
410 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 430 MediaSessionImpl* media_session_1 =
431 MediaSessionImpl::Get(web_contents_1.get());
411 432
412 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 433 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
413 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 434 MediaSessionImpl* media_session_2 =
435 MediaSessionImpl::Get(web_contents_2.get());
414 436
415 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 437 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
416 MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); 438 MediaSessionImpl* media_session_3 =
439 MediaSessionImpl::Get(web_contents_3.get());
417 440
418 media_session_1->AddPlayer( 441 media_session_1->AddPlayer(
419 pepper_observer_.get(), 0, media::MediaContentType::Pepper); 442 pepper_observer_.get(), 0, media::MediaContentType::Pepper);
420 443
421 RequestAudioFocus( 444 RequestAudioFocus(
422 media_session_2, AudioFocusManager::AudioFocusType::Gain); 445 media_session_2, AudioFocusManager::AudioFocusType::Gain);
423 RequestAudioFocus( 446 RequestAudioFocus(
424 media_session_3, AudioFocusManager::AudioFocusType::Gain); 447 media_session_3, AudioFocusManager::AudioFocusType::Gain);
425 448
426 ASSERT_EQ(media_session_3, GetAudioFocusedSession()); 449 ASSERT_EQ(media_session_3, GetAudioFocusedSession());
427 ASSERT_TRUE(media_session_2->IsReallySuspended()); 450 ASSERT_TRUE(media_session_2->IsReallySuspended());
428 ASSERT_TRUE(media_session_1->IsActive()); 451 ASSERT_TRUE(media_session_1->IsActive());
429 ASSERT_TRUE(IsSessionDucking(media_session_1)); 452 ASSERT_TRUE(IsSessionDucking(media_session_1));
430 453
431 AbandonAudioFocus(media_session_3); 454 AbandonAudioFocus(media_session_3);
432 ASSERT_EQ(media_session_1, GetAudioFocusedSession()); 455 ASSERT_EQ(media_session_1, GetAudioFocusedSession());
433 } 456 }
434 457
435 } // namespace content 458 } // 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