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