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

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

Issue 2274873003: Letting Flash join MediaSession (stack implementaion) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session_type
Patch Set: fixed existing tests (need new tests when behavior is decided) Created 4 years, 3 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 "content/browser/media/session/media_session.h" 7 #include "content/browser/media/session/media_session.h"
8 #include "content/public/test/mock_render_process_host.h" 8 #include "content/public/test/mock_render_process_host.h"
9 #include "content/public/test/test_browser_context.h" 9 #include "content/public/test/test_browser_context.h"
10 #include "content/public/test/test_browser_thread.h" 10 #include "content/public/test/test_browser_thread.h"
(...skipping 14 matching lines...) Expand all
25 browser_context_.reset(new TestBrowserContext()); 25 browser_context_.reset(new TestBrowserContext());
26 } 26 }
27 27
28 void TearDown() override { 28 void TearDown() override {
29 browser_context_.reset(); 29 browser_context_.reset();
30 SiteInstanceImpl::set_render_process_host_factory(nullptr); 30 SiteInstanceImpl::set_render_process_host_factory(nullptr);
31 rph_factory_.reset(); 31 rph_factory_.reset();
32 } 32 }
33 33
34 WebContents* GetAudioFocusedContent() const { 34 WebContents* GetAudioFocusedContent() const {
35 if (!AudioFocusManager::GetInstance()->focus_entry_) 35 const auto& audio_focus_stack =
36 return nullptr; 36 AudioFocusManager::GetInstance()->audio_focus_stack_;
37 return AudioFocusManager::GetInstance()->focus_entry_->web_contents(); 37 for (auto iter = audio_focus_stack.rbegin();
38 iter != audio_focus_stack.rend(); ++iter) {
39 if ((*iter)->type() == AudioFocusManager::AudioFocusType::Gain)
40 return (*iter)->web_contents();
41 }
42 return nullptr;
38 } 43 }
39 44
40 int GetTransientMaybeDuckCount() const { 45 int GetTransientMaybeDuckCount() const {
41 return AudioFocusManager::GetInstance()->TransientMayDuckEntriesCount(); 46 int count = 0;
47 const auto& audio_focus_stack =
48 AudioFocusManager::GetInstance()->audio_focus_stack_;
49 for (auto iter = audio_focus_stack.rbegin();
50 iter != audio_focus_stack.rend(); ++iter) {
51 if ((*iter)->type() ==
52 AudioFocusManager::AudioFocusType::GainTransientMayDuck) {
53 ++count;
54 } else {
55 break;
56 }
57 }
58
59 return count;
42 } 60 }
43 61
44 double IsSessionDucking(MediaSession* session) { 62 double IsSessionDucking(MediaSession* session) {
45 return session->is_ducking_; // Quack! Quack! 63 return session->is_ducking_; // Quack! Quack!
46 } 64 }
47 65
66 void SetAudioFocusState(MediaSession* session,
67 MediaSession::State audio_focus_state) {
68 session->audio_focus_state_ = audio_focus_state;
69 }
70
48 WebContents* CreateWebContents() { 71 WebContents* CreateWebContents() {
49 return TestWebContents::Create(browser_context_.get(), 72 return TestWebContents::Create(browser_context_.get(),
50 SiteInstance::SiteInstance::Create(browser_context_.get())); 73 SiteInstance::SiteInstance::Create(browser_context_.get()));
51 } 74 }
52 75
53 private: 76 private:
54 base::MessageLoopForUI message_loop_; 77 base::MessageLoopForUI message_loop_;
55 TestBrowserThread ui_thread_; 78 TestBrowserThread ui_thread_;
56 79
57 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; 80 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 272
250 AudioFocusManager::GetInstance()->RequestAudioFocus( 273 AudioFocusManager::GetInstance()->RequestAudioFocus(
251 media_session_1, AudioFocusManager::AudioFocusType::Gain); 274 media_session_1, AudioFocusManager::AudioFocusType::Gain);
252 ASSERT_FALSE(IsSessionDucking(media_session_1)); 275 ASSERT_FALSE(IsSessionDucking(media_session_1));
253 276
254 AudioFocusManager::GetInstance()->RequestAudioFocus( 277 AudioFocusManager::GetInstance()->RequestAudioFocus(
255 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 278 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
256 ASSERT_TRUE(IsSessionDucking(media_session_1)); 279 ASSERT_TRUE(IsSessionDucking(media_session_1));
257 } 280 }
258 281
259 TEST_F(AudioFocusManagerTest, DuckWhenStarting) { 282 TEST_F(AudioFocusManagerTest, GainSuspendsTransient) {
260 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 283 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
261 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 284 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
262 285
263 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 286 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
264 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 287 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
265 288
289 SetAudioFocusState(media_session_2, MediaSession::State::ACTIVE);
290
266 AudioFocusManager::GetInstance()->RequestAudioFocus( 291 AudioFocusManager::GetInstance()->RequestAudioFocus(
267 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 292 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
268 293
269 AudioFocusManager::GetInstance()->RequestAudioFocus( 294 AudioFocusManager::GetInstance()->RequestAudioFocus(
270 media_session_1, AudioFocusManager::AudioFocusType::Gain); 295 media_session_1, AudioFocusManager::AudioFocusType::Gain);
271 ASSERT_TRUE(IsSessionDucking(media_session_1)); 296 ASSERT_TRUE(media_session_2->IsSuspended());
297
298 // Clean up
299 SetAudioFocusState(media_session_2, MediaSession::State::INACTIVE);
272 } 300 }
273 301
274 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) { 302 TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) {
275 std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); 303 std::unique_ptr<WebContents> web_contents_1(CreateWebContents());
276 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); 304 MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get());
277 305
278 std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); 306 std::unique_ptr<WebContents> web_contents_2(CreateWebContents());
279 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); 307 MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get());
280 308
281 std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); 309 std::unique_ptr<WebContents> web_contents_3(CreateWebContents());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 365
338 AudioFocusManager::GetInstance()->RequestAudioFocus( 366 AudioFocusManager::GetInstance()->RequestAudioFocus(
339 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); 367 media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck);
340 ASSERT_TRUE(IsSessionDucking(media_session_1)); 368 ASSERT_TRUE(IsSessionDucking(media_session_1));
341 369
342 web_contents_2.reset(); 370 web_contents_2.reset();
343 ASSERT_FALSE(IsSessionDucking(media_session_1)); 371 ASSERT_FALSE(IsSessionDucking(media_session_1));
344 } 372 }
345 373
346 } // namespace content 374 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698