Chromium Code Reviews| Index: content/browser/media/session/media_session_impl_browsertest.cc |
| diff --git a/content/browser/media/session/media_session_impl_browsertest.cc b/content/browser/media/session/media_session_impl_browsertest.cc |
| index 755bfac19cb2df12615a5523067e96346a2b8495..60ff64ebe3ccc316e0a1a1a7884d25e0a2c755be 100644 |
| --- a/content/browser/media/session/media_session_impl_browsertest.cc |
| +++ b/content/browser/media/session/media_session_impl_browsertest.cc |
| @@ -33,6 +33,7 @@ using content::MediaSessionUmaHelper; |
| using content::MockMediaSessionPlayerObserver; |
| using ::testing::Expectation; |
| +using ::testing::_; |
| namespace { |
| @@ -41,11 +42,13 @@ const double kDuckingVolumeMultiplier = 0.2; |
| class MockAudioFocusDelegate : public AudioFocusDelegate { |
| public: |
| - bool RequestAudioFocus(content::AudioFocusManager::AudioFocusType) override { |
| - return true; |
| + MockAudioFocusDelegate() { |
| + ON_CALL(*this, RequestAudioFocus(_)).WillByDefault(::testing::Return(true)); |
| } |
| - void AbandonAudioFocus() override {} |
| + MOCK_METHOD1(RequestAudioFocus, |
| + bool(content::AudioFocusManager::AudioFocusType)); |
| + MOCK_METHOD0(AbandonAudioFocus, void()); |
| }; |
| class MockMediaSessionObserver : public MediaSessionObserver { |
| @@ -70,8 +73,9 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest { |
| media_session_ = MediaSessionImpl::Get(shell()->web_contents()); |
| mock_media_session_observer_.reset( |
| new MockMediaSessionObserver(media_session_)); |
| + mock_audio_focus_delegate_ = new MockAudioFocusDelegate(); |
| media_session_->SetDelegateForTests( |
| - std::unique_ptr<AudioFocusDelegate>(new MockAudioFocusDelegate())); |
| + std::unique_ptr<AudioFocusDelegate>(mock_audio_focus_delegate_)); |
|
dcheng
2016/11/08 06:59:38
Nit: base::WrapUnique
Zhiqiang Zhang (Slow)
2016/11/10 15:07:18
Done.
|
| ASSERT_TRUE(media_session_); |
| } |
| @@ -144,6 +148,10 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest { |
| return mock_media_session_observer_.get(); |
| } |
| + MockAudioFocusDelegate* mock_audio_focus_delegate() { |
| + return mock_audio_focus_delegate_; |
| + } |
| + |
| std::unique_ptr<MediaSessionImpl> CreateDummyMediaSession() { |
| return std::unique_ptr<MediaSessionImpl>(new MediaSessionImpl(nullptr)); |
| } |
| @@ -155,6 +163,7 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest { |
| protected: |
| MediaSessionImpl* media_session_; |
| std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_; |
| + MockAudioFocusDelegate* mock_audio_focus_delegate_; |
| DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest); |
| }; |
| @@ -888,6 +897,67 @@ IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| } |
| IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| + ControlsDontShowWhenOneShotIsPresent) { |
| + EXPECT_CALL(*mock_media_session_observer(), |
| + MediaSessionStateChanged(false, false)); |
| + |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
|
dcheng
2016/11/08 06:59:38
Optional nit: auto player_observer = base::MakeUni
Zhiqiang Zhang (Slow)
2016/11/10 15:07:18
Done.
|
| + new MockMediaSessionPlayerObserver); |
| + |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + |
| + EXPECT_FALSE(IsControllable()); |
| + EXPECT_FALSE(IsSuspended()); |
| + |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); |
| + EXPECT_FALSE(IsControllable()); |
| + EXPECT_FALSE(IsSuspended()); |
| + |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); |
| + EXPECT_FALSE(IsControllable()); |
| + EXPECT_FALSE(IsSuspended()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| + ControlsShowAfterRemoveOneShot) { |
| + Expectation uncontrollable = EXPECT_CALL( |
| + *mock_media_session_observer(), MediaSessionStateChanged(false, false)); |
| + |
| + EXPECT_CALL(*mock_media_session_observer(), |
| + MediaSessionStateChanged(true, false)) |
| + .After(uncontrollable); |
| + |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| + new MockMediaSessionPlayerObserver); |
| + |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); |
| + |
| + RemovePlayer(player_observer.get(), 0); |
| + |
| + EXPECT_TRUE(IsControllable()); |
| + EXPECT_FALSE(IsSuspended()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| + DontSuspendWhenOneShotIsPresent) { |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| + new MockMediaSessionPlayerObserver); |
| + |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); |
| + |
| + SystemSuspend(false); |
| + |
| + EXPECT_FALSE(IsControllable()); |
| + EXPECT_FALSE(IsSuspended()); |
| + |
| + EXPECT_EQ(0, player_observer->received_suspend_calls()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| DontResumeBySystemUISuspendedSessions) { |
| std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| new MockMediaSessionPlayerObserver); |
| @@ -945,6 +1015,41 @@ IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, ResumeSuspendFromSystem) { |
| EXPECT_FALSE(IsSuspended()); |
| } |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, OneShotTakesGainFocus) { |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| + new MockMediaSessionPlayerObserver); |
| + EXPECT_CALL( |
| + *mock_audio_focus_delegate(), |
| + RequestAudioFocus(content::AudioFocusManager::AudioFocusType::Gain)) |
| + .Times(1); |
| + EXPECT_CALL(*mock_audio_focus_delegate(), |
| + RequestAudioFocus(::testing::Ne( |
| + content::AudioFocusManager::AudioFocusType::Gain))) |
| + .Times(0); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Transient); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, RemovingOneShotDropsFocus) { |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| + new MockMediaSessionPlayerObserver); |
| + EXPECT_CALL(*mock_audio_focus_delegate(), AbandonAudioFocus()); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + RemovePlayer(player_observer.get(), 0); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| + RemovingOneShotWhileStillHavingOtherPlayersKeepsFocus) { |
| + std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |
| + new MockMediaSessionPlayerObserver); |
| + EXPECT_CALL(*mock_audio_focus_delegate(), AbandonAudioFocus()) |
| + .Times(1); // Called in TearDown |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::OneShot); |
| + StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); |
| + RemovePlayer(player_observer.get(), 0); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, |
| UMA_Suspended_SystemTransient) { |
| std::unique_ptr<MockMediaSessionPlayerObserver> player_observer( |