Index: content/browser/media/android/media_session_browsertest.cc |
diff --git a/content/browser/media/android/media_session_browsertest.cc b/content/browser/media/android/media_session_browsertest.cc |
index f613c6783dee5511742b30ccf61da74556ea586e..d0bf2e4d509d4165d21c67c943f08a8545678bee 100644 |
--- a/content/browser/media/android/media_session_browsertest.cc |
+++ b/content/browser/media/android/media_session_browsertest.cc |
@@ -133,14 +133,17 @@ class MediaSessionBrowserTest : public content::ContentBrowserTest { |
mock_web_contents_observer_.reset( |
new MockWebContentsObserver(shell()->web_contents())); |
media_session_ = MediaSession::Get(shell()->web_contents()); |
- media_session_->ResetJavaRefForTest(); |
+ // Reset |j_media_session_| ref to prevent calling the Java backend. |
+ media_session_->j_media_session_.Reset(); |
+ |
ASSERT_TRUE(media_session_); |
} |
void TearDownOnMainThread() override { |
mock_web_contents_observer_.reset(); |
- media_session_->RemoveAllPlayersForTest(); |
+ media_session_->players_.clear(); |
+ media_session_->AbandonSystemAudioFocusIfNeeded(); |
media_session_ = nullptr; |
ContentBrowserTest::TearDownOnMainThread(); |
@@ -175,10 +178,12 @@ class MediaSessionBrowserTest : public content::ContentBrowserTest { |
media_session_->OnPlayerPaused(media_session_observer, player_id); |
} |
- bool HasAudioFocus() { return media_session_->IsActiveForTest(); } |
+ bool HasAudioFocus() const { |
+ return media_session_->audio_focus_state_ == MediaSession::State::ACTIVE; |
+ } |
- MediaSession::Type GetSessionType() { |
- return media_session_->audio_focus_type_for_test(); |
+ MediaSession::Type GetSessionType() const { |
+ return media_session_->audio_focus_type_; |
} |
bool IsControllable() { return media_session_->IsControllable(); } |
@@ -215,7 +220,11 @@ class MediaSessionBrowserTest : public content::ContentBrowserTest { |
} |
MediaSessionUmaHelper* GetMediaSessionUMAHelper() { |
- return media_session_->uma_helper_for_test(); |
+ return &media_session_->uma_helper_; |
+ } |
+ |
+ void SetSystemAudioFocusResponse(bool value) { |
+ media_session_->default_system_audio_focus_response_ = value; |
} |
protected: |
@@ -334,6 +343,44 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
EXPECT_EQ(volume_multiplier, media_session_observer->GetVolumeMultiplier(2)); |
} |
+IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, |
+ VolumeMultiplierOnlySetOnSuccess) { |
+ scoped_ptr<MockMediaSessionObserver> media_session_observer( |
+ new MockMediaSessionObserver); |
+ |
+ // Start a new player and initialize it's volume multiplier to zero. |
+ const int player_id = media_session_observer->StartNewPlayer(); |
+ media_session_observer->OnSetVolumeMultiplier(player_id, 0); |
+ |
+ // Force the MediaSession to deny the player request. |
+ SetSystemAudioFocusResponse(false); |
+ |
+ // Verify AddPlayer fails and that the volume multiplier is unchanged. |
+ EXPECT_FALSE(AddPlayer(media_session_observer.get(), player_id, |
+ MediaSession::Type::Content)); |
+ EXPECT_DOUBLE_EQ(0, media_session_observer->GetVolumeMultiplier(player_id)); |
+ |
+ // Repeat the test with transient type session. |
+ EXPECT_FALSE(AddPlayer(media_session_observer.get(), player_id, |
+ MediaSession::Type::Transient)); |
+ EXPECT_DOUBLE_EQ(0, media_session_observer->GetVolumeMultiplier(player_id)); |
+ |
+ // Reset the MediaSession to allow the player request. |
+ SetSystemAudioFocusResponse(true); |
+ EXPECT_TRUE(AddPlayer(media_session_observer.get(), player_id, |
+ MediaSession::Type::Content)); |
+ EXPECT_DOUBLE_EQ(1, media_session_observer->GetVolumeMultiplier(player_id)); |
+ |
+ // Start a second player with a volume multiplier of zero then verify that it |
+ // receives a multiplier update even when there's an existing active focus. |
+ ASSERT_TRUE(HasAudioFocus()); |
+ const int player_id2 = media_session_observer->StartNewPlayer(); |
+ media_session_observer->OnSetVolumeMultiplier(player_id2, 0); |
+ EXPECT_TRUE(AddPlayer(media_session_observer.get(), player_id2, |
+ MediaSession::Type::Content)); |
+ EXPECT_DOUBLE_EQ(1, media_session_observer->GetVolumeMultiplier(player_id2)); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) { |
EXPECT_FALSE(HasAudioFocus()); |
} |