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( |