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