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

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

Issue 1159113006: [Android] A prototype of the interactive media notification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved OnMediaSessionStateChanged to WebContentsImpl Created 5 years, 5 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
« no previous file with comments | « content/browser/media/android/media_session.cc ('k') | content/browser/web_contents/web_contents_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
+}
« no previous file with comments | « content/browser/media/android/media_session.cc ('k') | content/browser/web_contents/web_contents_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698