| OLD | NEW |
| 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 "base/run_loop.h" |
| 8 #include "content/browser/media/session/media_session_impl.h" | 9 #include "content/browser/media/session/media_session_impl.h" |
| 9 #include "content/browser/media/session/media_session_player_observer.h" | 10 #include "content/browser/media/session/media_session_player_observer.h" |
| 10 #include "content/public/test/mock_render_process_host.h" | 11 #include "content/public/test/mock_render_process_host.h" |
| 11 #include "content/public/test/test_browser_context.h" | 12 #include "content/public/test/test_browser_context.h" |
| 12 #include "content/public/test/test_browser_thread.h" | 13 #include "content/public/test/test_browser_thread_bundle.h" |
| 13 #include "content/test/test_web_contents.h" | 14 #include "content/test/test_web_contents.h" |
| 14 #include "media/base/media_content_type.h" | 15 #include "media/base/media_content_type.h" |
| 15 #include "media/base/media_switches.h" | 16 #include "media/base/media_switches.h" |
| 16 | 17 |
| 17 namespace content { | 18 namespace content { |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver { | 22 class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver { |
| 22 public: | 23 public: |
| 23 void OnSuspend(int player_id) override {} | 24 void OnSuspend(int player_id) override {} |
| 24 void OnResume(int player_id) override {} | 25 void OnResume(int player_id) override {} |
| 25 void OnSetVolumeMultiplier( | 26 void OnSetVolumeMultiplier( |
| 26 int player_id, double volume_multiplier) override {} | 27 int player_id, double volume_multiplier) override {} |
| 27 RenderFrameHost* GetRenderFrameHost() const override { return nullptr; } | 28 RenderFrameHost* GetRenderFrameHost() const override { return nullptr; } |
| 28 }; | 29 }; |
| 29 | 30 |
| 30 } // anonymous namespace | 31 } // anonymous namespace |
| 31 | 32 |
| 32 using AudioFocusType = AudioFocusManager::AudioFocusType; | 33 using AudioFocusType = AudioFocusManager::AudioFocusType; |
| 33 using SuspendType = MediaSession::SuspendType; | 34 using SuspendType = MediaSession::SuspendType; |
| 34 | 35 |
| 35 class AudioFocusManagerTest : public testing::Test { | 36 class AudioFocusManagerTest : public testing::Test { |
| 36 public: | 37 public: |
| 37 AudioFocusManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_) {} | 38 AudioFocusManagerTest() = default; |
| 38 | 39 |
| 39 void SetUp() override { | 40 void SetUp() override { |
| 40 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 41 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 41 switches::kEnableDefaultMediaSession); | 42 switches::kEnableDefaultMediaSession); |
| 42 rph_factory_.reset(new MockRenderProcessHostFactory()); | 43 rph_factory_.reset(new MockRenderProcessHostFactory()); |
| 43 SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get()); | 44 SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get()); |
| 44 browser_context_.reset(new TestBrowserContext()); | 45 browser_context_.reset(new TestBrowserContext()); |
| 45 pepper_observer_.reset(new MockMediaSessionPlayerObserver()); | 46 pepper_observer_.reset(new MockMediaSessionPlayerObserver()); |
| 46 } | 47 } |
| 47 | 48 |
| 48 void TearDown() override { | 49 void TearDown() override { |
| 50 // Run pending tasks. |
| 51 base::RunLoop().RunUntilIdle(); |
| 52 |
| 49 browser_context_.reset(); | 53 browser_context_.reset(); |
| 50 SiteInstanceImpl::set_render_process_host_factory(nullptr); | 54 SiteInstanceImpl::set_render_process_host_factory(nullptr); |
| 51 rph_factory_.reset(); | 55 rph_factory_.reset(); |
| 52 } | 56 } |
| 53 | 57 |
| 54 MediaSessionImpl* GetAudioFocusedSession() const { | 58 MediaSessionImpl* GetAudioFocusedSession() const { |
| 55 const auto& audio_focus_stack = | 59 const auto& audio_focus_stack = |
| 56 AudioFocusManager::GetInstance()->audio_focus_stack_; | 60 AudioFocusManager::GetInstance()->audio_focus_stack_; |
| 57 for (auto iter = audio_focus_stack.rbegin(); | 61 for (auto iter = audio_focus_stack.rbegin(); |
| 58 iter != audio_focus_stack.rend(); ++iter) { | 62 iter != audio_focus_stack.rend(); ++iter) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 } | 98 } |
| 95 | 99 |
| 96 WebContents* CreateWebContents() { | 100 WebContents* CreateWebContents() { |
| 97 return TestWebContents::Create(browser_context_.get(), | 101 return TestWebContents::Create(browser_context_.get(), |
| 98 SiteInstance::SiteInstance::Create(browser_context_.get())); | 102 SiteInstance::SiteInstance::Create(browser_context_.get())); |
| 99 } | 103 } |
| 100 | 104 |
| 101 std::unique_ptr<MediaSessionPlayerObserver> pepper_observer_; | 105 std::unique_ptr<MediaSessionPlayerObserver> pepper_observer_; |
| 102 | 106 |
| 103 private: | 107 private: |
| 104 base::MessageLoopForUI message_loop_; | 108 TestBrowserThreadBundle test_browser_thread_bundle_; |
| 105 TestBrowserThread ui_thread_; | |
| 106 | 109 |
| 107 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; | 110 std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; |
| 108 std::unique_ptr<TestBrowserContext> browser_context_; | 111 std::unique_ptr<TestBrowserContext> browser_context_; |
| 109 }; | 112 }; |
| 110 | 113 |
| 111 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) { | 114 TEST_F(AudioFocusManagerTest, InstanceAvailableAndSame) { |
| 112 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance(); | 115 AudioFocusManager* audio_focus_manager = AudioFocusManager::GetInstance(); |
| 113 ASSERT_TRUE(!!audio_focus_manager); | 116 ASSERT_TRUE(!!audio_focus_manager); |
| 114 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance()); | 117 ASSERT_EQ(audio_focus_manager, AudioFocusManager::GetInstance()); |
| 115 } | 118 } |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 ASSERT_EQ(media_session_3, GetAudioFocusedSession()); | 453 ASSERT_EQ(media_session_3, GetAudioFocusedSession()); |
| 451 ASSERT_TRUE(media_session_2->IsReallySuspended()); | 454 ASSERT_TRUE(media_session_2->IsReallySuspended()); |
| 452 ASSERT_TRUE(media_session_1->IsActive()); | 455 ASSERT_TRUE(media_session_1->IsActive()); |
| 453 ASSERT_TRUE(IsSessionDucking(media_session_1)); | 456 ASSERT_TRUE(IsSessionDucking(media_session_1)); |
| 454 | 457 |
| 455 AbandonAudioFocus(media_session_3); | 458 AbandonAudioFocus(media_session_3); |
| 456 ASSERT_EQ(media_session_1, GetAudioFocusedSession()); | 459 ASSERT_EQ(media_session_1, GetAudioFocusedSession()); |
| 457 } | 460 } |
| 458 | 461 |
| 459 } // namespace content | 462 } // namespace content |
| OLD | NEW |