| 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..9132ffd8881a0c963454a2ce8c1bb528562cd670 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,6 +90,7 @@ class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
|
|
|
| void TearDownOnMainThread() override {
|
| mock_media_session_observer_.reset();
|
| + mock_media_session_service_.reset();
|
|
|
| media_session_->RemoveAllPlayersForTest();
|
| media_session_ = nullptr;
|
| @@ -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,84 @@ 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);
|
| +}
|
| +
|
| +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);
|
| +}
|
| +
|
| +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);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
|
| UMA_Suspended_SystemTransient) {
|
| auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
|
| base::HistogramTester tester;
|
|
|