Index: content/browser/media/session/audio_focus_manager_unittest.cc |
diff --git a/content/browser/media/session/audio_focus_manager_unittest.cc b/content/browser/media/session/audio_focus_manager_unittest.cc |
index 11bf186aa837b9dd44b11cda8fdcd1bd7767eef4..df66e862491718d70a5045ba82c7fbe0b1a42ab9 100644 |
--- a/content/browser/media/session/audio_focus_manager_unittest.cc |
+++ b/content/browser/media/session/audio_focus_manager_unittest.cc |
@@ -4,14 +4,30 @@ |
#include "content/browser/media/session/audio_focus_manager.h" |
+#include "base/command_line.h" |
#include "content/browser/media/session/media_session.h" |
+#include "content/browser/media/session/media_session_observer.h" |
#include "content/public/test/mock_render_process_host.h" |
#include "content/public/test/test_browser_context.h" |
#include "content/public/test/test_browser_thread.h" |
#include "content/test/test_web_contents.h" |
+#include "media/base/media_content_type.h" |
+#include "media/base/media_switches.h" |
namespace content { |
+namespace { |
+ |
+class MockMediaSessionObserver : public MediaSessionObserver { |
+ public: |
+ void OnSuspend(int player_id) override {} |
+ void OnResume(int player_id) override {} |
+ void OnSetVolumeMultiplier( |
+ int player_id, double volume_multiplier) override {} |
+}; |
+ |
+} // anonymous namespace |
+ |
using AudioFocusType = AudioFocusManager::AudioFocusType; |
using SuspendType = MediaSession::SuspendType; |
@@ -20,9 +36,12 @@ class AudioFocusManagerTest : public testing::Test { |
AudioFocusManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_) {} |
void SetUp() override { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableDefaultMediaSession); |
rph_factory_.reset(new MockRenderProcessHostFactory()); |
SiteInstanceImpl::set_render_process_host_factory(rph_factory_.get()); |
browser_context_.reset(new TestBrowserContext()); |
+ pepper_observer_.reset(new MockMediaSessionObserver()); |
} |
void TearDown() override { |
@@ -31,25 +50,55 @@ class AudioFocusManagerTest : public testing::Test { |
rph_factory_.reset(); |
} |
- WebContents* GetAudioFocusedContent() const { |
- if (!AudioFocusManager::GetInstance()->focus_entry_) |
- return nullptr; |
- return AudioFocusManager::GetInstance()->focus_entry_->web_contents(); |
+ MediaSession* GetAudioFocusedSession() const { |
+ const auto& audio_focus_stack = |
+ AudioFocusManager::GetInstance()->audio_focus_stack_; |
+ for (auto iter = audio_focus_stack.rbegin(); |
+ iter != audio_focus_stack.rend(); ++iter) { |
+ if ((*iter)->audio_focus_type() == |
+ AudioFocusManager::AudioFocusType::Gain) |
+ return (*iter); |
+ } |
+ return nullptr; |
} |
int GetTransientMaybeDuckCount() const { |
- return AudioFocusManager::GetInstance()->TransientMayDuckEntriesCount(); |
+ int count = 0; |
+ const auto& audio_focus_stack = |
+ AudioFocusManager::GetInstance()->audio_focus_stack_; |
+ for (auto iter = audio_focus_stack.rbegin(); |
+ iter != audio_focus_stack.rend(); ++iter) { |
+ if ((*iter)->audio_focus_type() == |
+ AudioFocusManager::AudioFocusType::GainTransientMayDuck) { |
+ ++count; |
+ } else { |
+ break; |
+ } |
+ } |
+ |
+ return count; |
} |
double IsSessionDucking(MediaSession* session) { |
return session->is_ducking_; // Quack! Quack! |
} |
+ void RequestAudioFocus(MediaSession* session, |
+ AudioFocusManager::AudioFocusType audio_focus_type) { |
+ session->RequestSystemAudioFocus(audio_focus_type); |
+ } |
+ |
+ void AbandonAudioFocus(MediaSession* session) { |
+ session->AbandonSystemAudioFocusIfNeeded(); |
+ } |
+ |
WebContents* CreateWebContents() { |
return TestWebContents::Create(browser_context_.get(), |
SiteInstance::SiteInstance::Create(browser_context_.get())); |
} |
+ std::unique_ptr<MediaSessionObserver> pepper_observer_; |
+ |
private: |
base::MessageLoopForUI message_loop_; |
TestBrowserThread ui_thread_; |
@@ -74,48 +123,42 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_ReplaceFocusedEntry) { |
std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); |
MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents_1.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session_1, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_2, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents_2.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session_2, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session_2, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_3, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents_3.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session_3, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session_3, GetAudioFocusedSession()); |
} |
TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_Duplicate) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
} |
TEST_F(AudioFocusManagerTest, RequestAudioFocusGain_FromTransient) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
} |
@@ -123,14 +166,13 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGain) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session)); |
} |
@@ -142,17 +184,16 @@ TEST_F(AudioFocusManagerTest, RequestAudioFocusTransient_FromGainWhileDucking) { |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_1, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(2, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
@@ -162,31 +203,30 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesFocusedEntry) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ AbandonAudioFocus(media_session); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
} |
TEST_F(AudioFocusManagerTest, AbandonAudioFocus_NoAssociatedEntry) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ AbandonAudioFocus(media_session); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
} |
TEST_F(AudioFocusManagerTest, AbandonAudioFocus_RemovesTransientEntry) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session); |
+ AbandonAudioFocus(media_session); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
} |
@@ -197,24 +237,22 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_WhileDuckingThenResume) { |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_1); |
+ AbandonAudioFocus(media_session_1); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2); |
+ AbandonAudioFocus(media_session_2); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
} |
@@ -225,17 +263,16 @@ TEST_F(AudioFocusManagerTest, AbandonAudioFocus_StopsDucking) { |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2); |
+ AbandonAudioFocus(media_session_2); |
ASSERT_EQ(0, GetTransientMaybeDuckCount()); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
} |
@@ -247,28 +284,26 @@ TEST_F(AudioFocusManagerTest, DuckWhilePlaying) { |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
} |
-TEST_F(AudioFocusManagerTest, DuckWhenStarting) { |
+TEST_F(AudioFocusManagerTest, GainSuspendsTransient) { |
std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); |
MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_TRUE(IsSessionDucking(media_session_1)); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_TRUE(media_session_2->IsSuspended()); |
} |
TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) { |
@@ -281,22 +316,21 @@ TEST_F(AudioFocusManagerTest, DuckWithMultipleTransients) { |
std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); |
MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_3, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_2); |
+ AbandonAudioFocus(media_session_2); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->AbandonAudioFocus(media_session_3); |
+ AbandonAudioFocus(media_session_3); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
} |
@@ -304,19 +338,18 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesFocus) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session, AudioFocusManager::AudioFocusType::Gain); |
- ASSERT_EQ(web_contents.get(), GetAudioFocusedContent()); |
+ RequestAudioFocus(media_session, AudioFocusManager::AudioFocusType::Gain); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
web_contents.reset(); |
- ASSERT_EQ(nullptr, GetAudioFocusedContent()); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
} |
TEST_F(AudioFocusManagerTest, WebContentsDestroyed_ReleasesTransients) { |
std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
MediaSession* media_session = MediaSession::Get(web_contents.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_EQ(1, GetTransientMaybeDuckCount()); |
@@ -331,11 +364,10 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) { |
std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
- media_session_1, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus(media_session_1, AudioFocusManager::AudioFocusType::Gain); |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
- AudioFocusManager::GetInstance()->RequestAudioFocus( |
+ RequestAudioFocus( |
media_session_2, AudioFocusManager::AudioFocusType::GainTransientMayDuck); |
ASSERT_TRUE(IsSessionDucking(media_session_1)); |
@@ -343,4 +375,61 @@ TEST_F(AudioFocusManagerTest, WebContentsDestroyed_StopsDucking) { |
ASSERT_FALSE(IsSessionDucking(media_session_1)); |
} |
+TEST_F(AudioFocusManagerTest, PepperRequestsGainFocus) { |
+ std::unique_ptr<WebContents> web_contents(CreateWebContents()); |
+ MediaSession* media_session = MediaSession::Get(web_contents.get()); |
+ |
+ media_session->AddPlayer( |
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper); |
+ ASSERT_EQ(media_session, GetAudioFocusedSession()); |
+ |
+ media_session->RemovePlayer(pepper_observer_.get(), 0); |
+ ASSERT_EQ(nullptr, GetAudioFocusedSession()); |
+} |
+ |
+TEST_F(AudioFocusManagerTest, GainDucksPepper) { |
+ std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); |
+ MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); |
+ |
+ std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
+ MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
+ |
+ media_session_1->AddPlayer( |
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper); |
+ |
+ RequestAudioFocus( |
+ media_session_2, AudioFocusManager::AudioFocusType::Gain); |
+ |
+ ASSERT_EQ(media_session_2, GetAudioFocusedSession()); |
+ ASSERT_TRUE(media_session_1->IsActive()); |
+ ASSERT_TRUE(IsSessionDucking(media_session_1)); |
+} |
+ |
+TEST_F(AudioFocusManagerTest, AbandoningGainFocusRevokesTopMostPepperSession) { |
+ std::unique_ptr<WebContents> web_contents_1(CreateWebContents()); |
+ MediaSession* media_session_1 = MediaSession::Get(web_contents_1.get()); |
+ |
+ std::unique_ptr<WebContents> web_contents_2(CreateWebContents()); |
+ MediaSession* media_session_2 = MediaSession::Get(web_contents_2.get()); |
+ |
+ std::unique_ptr<WebContents> web_contents_3(CreateWebContents()); |
+ MediaSession* media_session_3 = MediaSession::Get(web_contents_3.get()); |
+ |
+ media_session_1->AddPlayer( |
+ pepper_observer_.get(), 0, media::MediaContentType::Pepper); |
+ |
+ RequestAudioFocus( |
+ media_session_2, AudioFocusManager::AudioFocusType::Gain); |
+ RequestAudioFocus( |
+ media_session_3, AudioFocusManager::AudioFocusType::Gain); |
+ |
+ ASSERT_EQ(media_session_3, GetAudioFocusedSession()); |
+ ASSERT_TRUE(media_session_2->IsReallySuspended()); |
+ ASSERT_TRUE(media_session_1->IsActive()); |
+ ASSERT_TRUE(IsSessionDucking(media_session_1)); |
+ |
+ AbandonAudioFocus(media_session_3); |
+ ASSERT_EQ(media_session_1, GetAudioFocusedSession()); |
+} |
+ |
} // namespace content |