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

Unified Diff: content/browser/media/android/media_session_browsertest.cc

Issue 1671603002: Mute audio for Spitzer playbacks that haven't received focus yet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
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());
}
« no previous file with comments | « content/browser/media/android/media_session.cc ('k') | content/browser/media/android/media_session_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698