| 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 1fc812189feb70e3189b7700a763a87e55d1a808..9707330afec853a1a947286fa2b5e678c57a7707 100644
|
| --- a/content/browser/media/android/media_session_browsertest.cc
|
| +++ b/content/browser/media/android/media_session_browsertest.cc
|
| @@ -8,10 +8,20 @@
|
| #include <vector>
|
|
|
| #include "content/browser/media/android/media_session_observer.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/browser/web_contents_observer.h"
|
| #include "content/public/test/content_browser_test.h"
|
| #include "content/shell/browser/shell.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
|
|
| -namespace content {
|
| +using content::WebContents;
|
| +using content::WebContentsObserver;
|
| +using content::MediaSession;
|
| +using content::MediaSessionObserver;
|
| +
|
| +using ::testing::Expectation;
|
| +
|
| +namespace {
|
|
|
| class MockMediaSessionObserver : public MediaSessionObserver {
|
| public:
|
| @@ -70,73 +80,111 @@ class MockMediaSessionObserver : public MediaSessionObserver {
|
| int received_suspend_calls_;
|
| };
|
|
|
| -class MediaSessionBrowserTest : public ContentBrowserTest {
|
| +class MockWebContentsObserver : public WebContentsObserver {
|
| + public:
|
| + MockWebContentsObserver(WebContents* web_contents)
|
| + : WebContentsObserver(web_contents) {}
|
| +
|
| + MOCK_METHOD2(MediaSessionStateChanged,
|
| + void(bool is_controllable, bool is_suspended));
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class MediaSessionBrowserTest : public content::ContentBrowserTest {
|
| protected:
|
| MediaSessionBrowserTest() = default;
|
|
|
| - void DisableNativeBackend(MediaSession* media_session) {
|
| - media_session->ResetJavaRefForTest();
|
| + void SetUpOnMainThread() override {
|
| + ContentBrowserTest::SetUpOnMainThread();
|
| +
|
| + mock_web_contents_observer_.reset(
|
| + new MockWebContentsObserver(shell()->web_contents()));
|
| + media_session_ = MediaSession::Get(shell()->web_contents());
|
| + media_session_->ResetJavaRefForTest();
|
| + ASSERT_TRUE(media_session_);
|
| + }
|
| +
|
| + void TearDownOnMainThread() override {
|
| + mock_web_contents_observer_.reset();
|
| +
|
| + media_session_->RemoveAllPlayersForTest();
|
| + media_session_ = nullptr;
|
| +
|
| + ContentBrowserTest::TearDownOnMainThread();
|
| }
|
|
|
| - void StartNewPlayer(MediaSession* media_session,
|
| - MockMediaSessionObserver* media_session_observer,
|
| + void StartNewPlayer(MockMediaSessionObserver* media_session_observer,
|
| MediaSession::Type type) {
|
| - bool result = media_session->AddPlayer(
|
| + bool result = AddPlayer(
|
| media_session_observer,
|
| media_session_observer->StartNewPlayer(),
|
| type);
|
| EXPECT_TRUE(result);
|
| }
|
|
|
| - void SuspendSession(MediaSession* media_session) {
|
| - media_session->OnSuspend(true);
|
| + bool AddPlayer(MockMediaSessionObserver* media_session_observer,
|
| + int player_id,
|
| + MediaSession::Type type) {
|
| + return media_session_->AddPlayer(media_session_observer, player_id, type);
|
| }
|
|
|
| - void ResumeSession(MediaSession* media_session) {
|
| - media_session->OnResume();
|
| + void RemovePlayer(MockMediaSessionObserver* media_session_observer,
|
| + int player_id) {
|
| + media_session_->RemovePlayer(media_session_observer, player_id);
|
| }
|
|
|
| - bool HasAudioFocus(MediaSession* media_session) {
|
| - return media_session->IsActiveForTest();
|
| + void RemovePlayers(MockMediaSessionObserver* media_session_observer) {
|
| + media_session_->RemovePlayers(media_session_observer);
|
| }
|
|
|
| - MediaSession::Type GetSessionType(MediaSession* media_session) {
|
| - return media_session->audio_focus_type_for_test();
|
| + void OnSuspendSession(bool isTemporary) {
|
| + media_session_->OnSuspend(nullptr, nullptr, isTemporary);
|
| }
|
|
|
| - private:
|
| + void OnResumeSession() { media_session_->OnResume(nullptr, nullptr); }
|
| +
|
| + bool HasAudioFocus() { return media_session_->IsActiveForTest(); }
|
| +
|
| + MediaSession::Type GetSessionType() {
|
| + return media_session_->audio_focus_type_for_test();
|
| + }
|
| +
|
| + bool IsControllable() { return media_session_->IsControllable(); }
|
| +
|
| + bool IsSuspended() { return media_session_->IsSuspended(); }
|
| +
|
| + void ResumeSession() { media_session_->Resume(); }
|
| +
|
| + void SuspendSession() { media_session_->Suspend(); }
|
| +
|
| + MockWebContentsObserver* mock_web_contents_observer() {
|
| + return mock_web_contents_observer_.get();
|
| + }
|
| +
|
| + protected:
|
| + MediaSession* media_session_;
|
| + scoped_ptr<MockWebContentsObserver> mock_web_contents_observer_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(MediaSessionBrowserTest);
|
| };
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| PlayersFromSameObserverDoNotStopEachOtherInSameSession) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_TRUE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(2));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| PlayersFromManyObserverDoNotStopEachOtherInSameSession) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
|
| new MockMediaSessionObserver);
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
|
| @@ -144,198 +192,129 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_3(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer_1.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_2.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_3.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
|
| +
|
| + StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_3.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_TRUE(media_session_observer_1->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer_2->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer_3->IsPlaying(0));
|
| -
|
| - media_session->RemovePlayers(media_session_observer_1.get());
|
| - media_session->RemovePlayers(media_session_observer_2.get());
|
| - media_session->RemovePlayers(media_session_observer_3.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| SuspendedMediaSessionStopsPlayers) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - SuspendSession(media_session);
|
| + OnSuspendSession(true);
|
|
|
| EXPECT_FALSE(media_session_observer->IsPlaying(0));
|
| EXPECT_FALSE(media_session_observer->IsPlaying(1));
|
| EXPECT_FALSE(media_session_observer->IsPlaying(2));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| ResumedMediaSessionRestartsPlayers) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - SuspendSession(media_session);
|
| - ResumeSession(media_session);
|
| + OnSuspendSession(true);
|
| + OnResumeSession();
|
|
|
| EXPECT_TRUE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(2));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| StartedPlayerOnSuspendedSessionPlaysAlone) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_TRUE(media_session_observer->IsPlaying(0));
|
|
|
| - SuspendSession(media_session);
|
| + OnSuspendSession(true);
|
|
|
| EXPECT_FALSE(media_session_observer->IsPlaying(0));
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_FALSE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_FALSE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(2));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, AudioFocusInitialState) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + EXPECT_FALSE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, StartPlayerGivesFocus) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| -
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + EXPECT_TRUE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, SuspendGivesAwayAudioFocus) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| -
|
| - SuspendSession(media_session);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + OnSuspendSession(true);
|
|
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + EXPECT_FALSE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumeGivesBackAudioFocus) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - SuspendSession(media_session);
|
| - ResumeSession(media_session);
|
| + OnSuspendSession(true);
|
| + OnResumeSession();
|
|
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + EXPECT_TRUE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| - RemovingLastPlayerDropsAudioFocus_1) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| + RemovingLastPlayerDropsAudioFocus) {
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayer(media_session_observer.get(), 0);
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| - media_session->RemovePlayer(media_session_observer.get(), 1);
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| - media_session->RemovePlayer(media_session_observer.get(), 2);
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| + EXPECT_TRUE(HasAudioFocus());
|
| + RemovePlayer(media_session_observer.get(), 1);
|
| + EXPECT_TRUE(HasAudioFocus());
|
| + RemovePlayer(media_session_observer.get(), 2);
|
| + EXPECT_FALSE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| - RemovingLastPlayerDropsAudioFocus_2) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| + RemovingLastPlayerFromManyObserversDropsAudioFocus) {
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
|
| new MockMediaSessionObserver);
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
|
| @@ -343,202 +322,455 @@ IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_3(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer_1.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_2.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_3.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_3.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayer(media_session_observer_1.get(), 0);
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| - media_session->RemovePlayer(media_session_observer_2.get(), 0);
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| - media_session->RemovePlayer(media_session_observer_3.get(), 0);
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + RemovePlayer(media_session_observer_1.get(), 0);
|
| + EXPECT_TRUE(HasAudioFocus());
|
| + RemovePlayer(media_session_observer_2.get(), 0);
|
| + EXPECT_TRUE(HasAudioFocus());
|
| + RemovePlayer(media_session_observer_3.get(), 0);
|
| + EXPECT_FALSE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| - RemovingLastPlayerDropsAudioFocus_3) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| + RemovingAllPlayersFromObserversDropsAudioFocus) {
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_1(
|
| new MockMediaSessionObserver);
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer_2(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer_1.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_1.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_2.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer_2.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_1.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer_2.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayers(media_session_observer_1.get());
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| - media_session->RemovePlayers(media_session_observer_2.get());
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + RemovePlayers(media_session_observer_1.get());
|
| + EXPECT_TRUE(HasAudioFocus());
|
| + RemovePlayers(media_session_observer_2.get());
|
| + EXPECT_FALSE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ResumePlayGivesAudioFocus) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayer(media_session_observer.get(), 0);
|
| - EXPECT_FALSE(HasAudioFocus(media_session));
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| + EXPECT_FALSE(HasAudioFocus());
|
|
|
| - EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 0,
|
| - MediaSession::Type::Content));
|
| - EXPECT_TRUE(HasAudioFocus(media_session));
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + EXPECT_TRUE(
|
| + AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content));
|
| + EXPECT_TRUE(HasAudioFocus());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| - ResumeSuspendAreSentOnlyOncePerPlayers_1) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| + ResumeSuspendAreSentOnlyOncePerPlayers) {
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| EXPECT_EQ(0, media_session_observer->received_suspend_calls());
|
| EXPECT_EQ(0, media_session_observer->received_resume_calls());
|
|
|
| - SuspendSession(media_session);
|
| + OnSuspendSession(true);
|
| EXPECT_EQ(3, media_session_observer->received_suspend_calls());
|
|
|
| - ResumeSession(media_session);
|
| + OnResumeSession();
|
| EXPECT_EQ(3, media_session_observer->received_resume_calls());
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| - ResumeSuspendAreSentOnlyOncePerPlayers_2) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| + ResumeSuspendAreSentOnlyOncePerPlayersAddedTwice) {
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| // Adding the three players above again.
|
| - EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 0,
|
| - MediaSession::Type::Content));
|
| - EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 1,
|
| - MediaSession::Type::Content));
|
| - EXPECT_TRUE(media_session->AddPlayer(media_session_observer.get(), 2,
|
| - MediaSession::Type::Content));
|
| + EXPECT_TRUE(
|
| + AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content));
|
| + EXPECT_TRUE(
|
| + AddPlayer(media_session_observer.get(), 1, MediaSession::Type::Content));
|
| + EXPECT_TRUE(
|
| + AddPlayer(media_session_observer.get(), 2, MediaSession::Type::Content));
|
|
|
| EXPECT_EQ(0, media_session_observer->received_suspend_calls());
|
| EXPECT_EQ(0, media_session_observer->received_resume_calls());
|
|
|
| - SuspendSession(media_session);
|
| + OnSuspendSession(true);
|
| EXPECT_EQ(3, media_session_observer->received_suspend_calls());
|
|
|
| - ResumeSession(media_session);
|
| + OnResumeSession();
|
| EXPECT_EQ(3, media_session_observer->received_resume_calls());
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| RemovingTheSamePlayerTwiceIsANoop) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
|
|
| - media_session->RemovePlayer(media_session_observer.get(), 0);
|
| - media_session->RemovePlayer(media_session_observer.get(), 0);
|
| -
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, MediaSessionType) {
|
| - MediaSession* media_session = MediaSession::Get(shell()->web_contents());
|
| - ASSERT_TRUE(media_session);
|
| - DisableNativeBackend(media_session);
|
| -
|
| scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| new MockMediaSessionObserver);
|
|
|
| // Starting a player with a given type should set the session to that type.
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Transient);
|
| - EXPECT_EQ(MediaSession::Type::Transient, GetSessionType(media_session));
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| + EXPECT_EQ(MediaSession::Type::Transient, GetSessionType());
|
|
|
| // Adding a player of the same type should have no effect on the type.
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Transient);
|
| - EXPECT_EQ(MediaSession::Type::Transient, GetSessionType(media_session));
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| + EXPECT_EQ(MediaSession::Type::Transient, GetSessionType());
|
|
|
| // Adding a player of Content type should override the current type.
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Content);
|
| - EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
|
|
|
| // Adding a player of the Transient type should have no effect on the type.
|
| - StartNewPlayer(media_session, media_session_observer.get(),
|
| - MediaSession::Type::Transient);
|
| - EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| + EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
|
|
|
| EXPECT_TRUE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(2));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(3));
|
|
|
| - SuspendSession(media_session);
|
| + OnSuspendSession(true);
|
|
|
| EXPECT_FALSE(media_session_observer->IsPlaying(0));
|
| EXPECT_FALSE(media_session_observer->IsPlaying(1));
|
| EXPECT_FALSE(media_session_observer->IsPlaying(2));
|
| EXPECT_FALSE(media_session_observer->IsPlaying(3));
|
|
|
| - EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
|
| + EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
|
|
|
| - ResumeSession(media_session);
|
| + OnResumeSession();
|
|
|
| EXPECT_TRUE(media_session_observer->IsPlaying(0));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(1));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(2));
|
| EXPECT_TRUE(media_session_observer->IsPlaying(3));
|
|
|
| - EXPECT_EQ(MediaSession::Type::Content, GetSessionType(media_session));
|
| + EXPECT_EQ(MediaSession::Type::Content, GetSessionType());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShowForContent) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + // Starting a player with a content type should show the media controls.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsNoShowForTransient) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + // Starting a player with a transient type should not show the media controls.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsHideWhenStopped) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, true))
|
| + .After(showControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + RemovePlayers(media_session_observer.get());
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsShownAcceptTransient) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + // Transient player join the session without affecting the controls.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsShownAfterContentAdded) {
|
| + Expectation dontShowControls = EXPECT_CALL(
|
| + *mock_web_contents_observer(), MediaSessionStateChanged(false, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false))
|
| + .After(dontShowControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| +
|
| + // The controls are shown when the content player is added.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsStayIfOnlyOnePlayerHasBeenPaused) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| +
|
| + // Removing only content player doesn't hide the controls since the session
|
| + // is still active.
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsHideWhenTheLastPlayerIsStopped) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, true))
|
| + .After(showControls);
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + RemovePlayer(media_session_observer.get(), 0);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +
|
| + RemovePlayer(media_session_observer.get(), 1);
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsHideWhenAllThePlayersAreRemoved) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, true))
|
| + .After(showControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + RemovePlayers(media_session_observer.get());
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + SuspendTemporaryUpdatesControls) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, true))
|
| + .After(showControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + OnSuspendSession(true);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, ControlsUpdatedWhenResumed) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, true))
|
| + .After(showControls);
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false))
|
| + .After(pauseControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + OnSuspendSession(true);
|
| + OnResumeSession();
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsHideWhenSessionSuspendedPermanently) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, true))
|
| + .After(showControls);
|
|
|
| - media_session->RemovePlayers(media_session_observer.get());
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + OnSuspendSession(false);
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsHideWhenSessionChangesFromContentToTransient) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, true))
|
| + .After(showControls);
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(false, false))
|
| + .After(pauseControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + OnSuspendSession(true);
|
| +
|
| + // This should reset the session and change it to a transient, so
|
| + // hide the controls.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Transient);
|
| +
|
| + EXPECT_FALSE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsUpdatedWhenNewPlayerResetsSession) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, true))
|
| + .After(showControls);
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false))
|
| + .After(pauseControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + OnSuspendSession(true);
|
| +
|
| + // This should reset the session and update the controls.
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| }
|
|
|
| -} // namespace content
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsResumedWhenPlayerIsResumed) {
|
| + Expectation showControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| + Expectation pauseControls = EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, true))
|
| + .After(showControls);
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false))
|
| + .After(pauseControls);
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + OnSuspendSession(true);
|
| +
|
| + // This should resume the session and update the controls.
|
| + AddPlayer(media_session_observer.get(), 0, MediaSession::Type::Content);
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsNotUpdatedDueToResumeSessionAction) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + SuspendSession();
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_TRUE(IsSuspended());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest,
|
| + ControlsNotUpdatedDueToSuspendSessionAction) {
|
| + EXPECT_CALL(*mock_web_contents_observer(),
|
| + MediaSessionStateChanged(true, false));
|
| +
|
| + scoped_ptr<MockMediaSessionObserver> media_session_observer(
|
| + new MockMediaSessionObserver);
|
| +
|
| + StartNewPlayer(media_session_observer.get(), MediaSession::Type::Content);
|
| + SuspendSession();
|
| + ResumeSession();
|
| +
|
| + EXPECT_TRUE(IsControllable());
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
|
|