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

Unified Diff: content/browser/media/session/media_session_impl_browsertest.cc

Issue 2583463002: [MediaSession] Add playbackState attribute to Blink MediaSession and use it to determine playback s… (Closed)
Patch Set: rebased Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/media/session/media_session_impl_browsertest.cc
diff --git a/content/browser/media/session/media_session_impl_browsertest.cc b/content/browser/media/session/media_session_impl_browsertest.cc
index c9ecbb30fd118d83ed456aabbb49efa2b9b460d6..1fddbe252e0e27e78a87e6e09b1aa057e0f0f0bb 100644
--- a/content/browser/media/session/media_session_impl_browsertest.cc
+++ b/content/browser/media/session/media_session_impl_browsertest.cc
@@ -15,6 +15,7 @@
#include "base/test/histogram_tester.h"
#include "base/test/simple_test_tick_clock.h"
#include "content/browser/media/session/audio_focus_delegate.h"
+#include "content/browser/media/session/media_session_service_impl.h"
#include "content/browser/media/session/mock_media_session_player_observer.h"
#include "content/public/browser/media_session.h"
#include "content/public/browser/media_session_observer.h"
@@ -62,6 +63,13 @@ class MockMediaSessionObserver : public MediaSessionObserver {
MOCK_METHOD0(MediaSessionDestroyed, void());
};
+class MockMediaSessionServiceImpl : public content::MediaSessionServiceImpl {
+ public:
+ explicit MockMediaSessionServiceImpl(content::RenderFrameHost* rfh)
+ : MediaSessionServiceImpl(rfh) {}
+ ~MockMediaSessionServiceImpl() override = default;
+};
+
} // namespace
class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
@@ -82,8 +90,9 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
void TearDownOnMainThread() override {
mock_media_session_observer_.reset();
-
media_session_->RemoveAllPlayersForTest();
+ mock_media_session_service_.reset();
+
media_session_ = nullptr;
ContentBrowserTest::TearDownOnMainThread();
@@ -145,6 +154,16 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
void SystemStopDucking() { media_session_->StopDucking(); }
+ void EnsureMediaSessionService() {
+ mock_media_session_service_.reset(new MockMediaSessionServiceImpl(
+ shell()->web_contents()->GetMainFrame()));
+ mock_media_session_service_->SetMetadata(content::MediaMetadata());
+ }
+
+ void SetPlaybackState(blink::mojom::MediaSessionPlaybackState state) {
+ mock_media_session_service_->SetPlaybackState(state);
+ }
+
MockMediaSessionObserver* mock_media_session_observer() {
return mock_media_session_observer_.get();
}
@@ -165,6 +184,7 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
MediaSessionImpl* media_session_;
std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_;
MockAudioFocusDelegate* mock_audio_focus_delegate_;
+ std::unique_ptr<MockMediaSessionServiceImpl> mock_media_session_service_;
DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest);
};
@@ -1027,6 +1047,95 @@ IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
}
IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
+ ActualPlaybackStateWhilePlayerPaused) {
+ EnsureMediaSessionService();
+ auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>(
+ shell()->web_contents()->GetMainFrame());
+
+ ::testing::Sequence s;
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, true))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, true))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, true))
+ .InSequence(s);
+
+ StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
+ OnPlayerPaused(player_observer.get(), 0);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PLAYING);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PAUSED);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::NONE);
+
+ // Verify before test exists. Otherwise the sequence will expire and cause
+ // weird problems.
+ ::testing::Mock::VerifyAndClear(mock_media_session_observer());
+}
+
+IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
+ ActualPlaybackStateWhilePlayerPlaying) {
+ EnsureMediaSessionService();
+ auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>(
+ shell()->web_contents()->GetMainFrame());
+ ::testing::Sequence s;
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+
+ StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PLAYING);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PAUSED);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::NONE);
+
+ // Verify before test exists. Otherwise the sequence will expire and cause
+ // weird problems.
+ ::testing::Mock::VerifyAndClear(mock_media_session_observer());
+}
+
+IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
+ ActualPlaybackStateWhilePlayerRemoved) {
+ EnsureMediaSessionService();
+ auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>(
+ shell()->web_contents()->GetMainFrame());
+
+ ::testing::Sequence s;
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(true, false))
+ .InSequence(s);
+ EXPECT_CALL(*mock_media_session_observer(),
+ MediaSessionStateChanged(false, _))
+ .InSequence(s);
+
+ StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
+ RemovePlayer(player_observer.get(), 0);
+
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PLAYING);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::PAUSED);
+ SetPlaybackState(blink::mojom::MediaSessionPlaybackState::NONE);
+
+ // Verify before test exists. Otherwise the sequence will expire and cause
+ // weird problems.
+ ::testing::Mock::VerifyAndClear(mock_media_session_observer());
+}
+
+IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
UMA_Suspended_SystemTransient) {
auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
base::HistogramTester tester;
« no previous file with comments | « content/browser/media/session/media_session_impl.cc ('k') | content/browser/media/session/media_session_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698