Index: content/browser/media/session/media_session_impl_service_routing_unittest.cc |
diff --git a/content/browser/media/session/media_session_impl_service_routing_unittest.cc b/content/browser/media/session/media_session_impl_service_routing_unittest.cc |
index 447c219f367aa3c65c0e160df99811aedce38b17..e156cd67f86c6bf73b2ffe7a1dc50f4a2280ef20 100644 |
--- a/content/browser/media/session/media_session_impl_service_routing_unittest.cc |
+++ b/content/browser/media/session/media_session_impl_service_routing_unittest.cc |
@@ -8,12 +8,18 @@ |
#include <memory> |
#include "base/memory/ptr_util.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "content/browser/media/session/media_session_player_observer.h" |
#include "content/browser/media/session/media_session_service_impl.h" |
+#include "content/browser/media/session/mock_media_session_observer.h" |
#include "content/test/test_render_view_host.h" |
#include "content/test/test_web_contents.h" |
#include "media/base/media_content_type.h" |
+using ::testing::_; |
+using ::testing::AnyNumber; |
+using ::testing::Eq; |
+ |
namespace content { |
namespace { |
@@ -58,6 +64,8 @@ class MediaSessionImplServiceRoutingTest |
RenderViewHostImplTestHarness::SetUp(); |
contents()->GetMainFrame()->InitializeRenderFrameIfNeeded(); |
+ mock_media_session_observer_.reset( |
+ new MockMediaSessionObserver(MediaSessionImpl::Get(contents()))); |
main_frame_ = contents()->GetMainFrame(); |
sub_frame_ = main_frame_->AppendChild("sub_frame"); |
@@ -67,12 +75,17 @@ class MediaSessionImplServiceRoutingTest |
} |
void TearDown() override { |
+ mock_media_session_observer_.reset(); |
services_.clear(); |
RenderViewHostImplTestHarness::TearDown(); |
} |
protected: |
+ MockMediaSessionObserver* mock_media_session_observer() { |
+ return mock_media_session_observer_.get(); |
+ } |
+ |
void CreateServiceForFrame(TestRenderFrameHost* frame) { |
services_[frame] = base::MakeUnique<MockMediaSessionServiceImpl>(frame); |
} |
@@ -106,6 +119,8 @@ class MediaSessionImplServiceRoutingTest |
std::unique_ptr<MockMediaSessionPlayerObserver> player_in_main_frame_; |
std::unique_ptr<MockMediaSessionPlayerObserver> player_in_sub_frame_; |
+ std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_; |
+ |
using ServiceMap = std::map<TestRenderFrameHost*, |
std::unique_ptr<MockMediaSessionServiceImpl>>; |
ServiceMap services_; |
@@ -203,4 +218,105 @@ TEST_F(MediaSessionImplServiceRoutingTest, |
ASSERT_EQ(services_[sub_frame_].get(), ComputeServiceForRouting()); |
} |
+TEST_F(MediaSessionImplServiceRoutingTest, |
+ DontNotifyMetadataAndActionsChangeWhenUncontrollable) { |
+ EXPECT_CALL(*mock_media_session_observer(), MediaSessionMetadataChanged(_)) |
+ .Times(0); |
+ EXPECT_CALL(*mock_media_session_observer(), MediaSessionActionsChanged(_)) |
+ .Times(0); |
+ |
+ CreateServiceForFrame(main_frame_); |
+ |
+ services_[main_frame_]->SetMetadata(MediaMetadata()); |
+ services_[main_frame_]->EnableAction(blink::mojom::MediaSessionAction::PLAY); |
+} |
+ |
+TEST_F(MediaSessionImplServiceRoutingTest, |
+ NotifyMetadataAndActionsChangeWhenControllable) { |
+ MediaMetadata expected_metadata; |
+ expected_metadata.title = base::ASCIIToUTF16("title"); |
+ expected_metadata.artist = base::ASCIIToUTF16("artist"); |
+ expected_metadata.album = base::ASCIIToUTF16("album"); |
+ |
+ std::set<blink::mojom::MediaSessionAction> empty_actions; |
+ std::set<blink::mojom::MediaSessionAction> expected_actions; |
+ expected_actions.insert(blink::mojom::MediaSessionAction::PLAY); |
+ |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionMetadataChanged(Eq(base::nullopt))) |
+ .Times(AnyNumber()); |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionActionsChanged(Eq(empty_actions))) |
+ .Times(AnyNumber()); |
+ |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionMetadataChanged(Eq(expected_metadata))) |
+ .Times(1); |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionActionsChanged(Eq(expected_actions))) |
+ .Times(1); |
+ |
+ CreateServiceForFrame(main_frame_); |
+ StartPlayerForFrame(main_frame_); |
+ |
+ services_[main_frame_]->SetMetadata(expected_metadata); |
+ services_[main_frame_]->EnableAction(blink::mojom::MediaSessionAction::PLAY); |
+} |
+ |
+TEST_F(MediaSessionImplServiceRoutingTest, |
+ NotifyMetadataAndActionsChangeWhenTurningControllable) { |
+ MediaMetadata expected_metadata; |
+ expected_metadata.title = base::ASCIIToUTF16("title"); |
+ expected_metadata.artist = base::ASCIIToUTF16("artist"); |
+ expected_metadata.album = base::ASCIIToUTF16("album"); |
+ |
+ std::set<blink::mojom::MediaSessionAction> expected_actions; |
+ expected_actions.insert(blink::mojom::MediaSessionAction::PLAY); |
+ |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionMetadataChanged(Eq(expected_metadata))) |
+ .Times(1); |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionActionsChanged(Eq(expected_actions))) |
+ .Times(1); |
+ |
+ CreateServiceForFrame(main_frame_); |
+ |
+ services_[main_frame_]->SetMetadata(expected_metadata); |
+ services_[main_frame_]->EnableAction(blink::mojom::MediaSessionAction::PLAY); |
+ |
+ StartPlayerForFrame(main_frame_); |
+} |
+ |
+TEST_F(MediaSessionImplServiceRoutingTest, |
+ DontNotifyMetadataAndActionsChangeWhenTurningUncontrollable) { |
+ MediaMetadata expected_metadata; |
+ expected_metadata.title = base::ASCIIToUTF16("title"); |
+ expected_metadata.artist = base::ASCIIToUTF16("artist"); |
+ expected_metadata.album = base::ASCIIToUTF16("album"); |
+ |
+ std::set<blink::mojom::MediaSessionAction> empty_actions; |
+ std::set<blink::mojom::MediaSessionAction> expected_actions; |
+ expected_actions.insert(blink::mojom::MediaSessionAction::PLAY); |
+ |
+ EXPECT_CALL(*mock_media_session_observer(), MediaSessionMetadataChanged(_)) |
+ .Times(AnyNumber()); |
+ EXPECT_CALL(*mock_media_session_observer(), MediaSessionActionsChanged(_)) |
+ .Times(AnyNumber()); |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionMetadataChanged(Eq(base::nullopt))) |
+ .Times(0); |
+ EXPECT_CALL(*mock_media_session_observer(), |
+ MediaSessionActionsChanged(Eq(empty_actions))) |
+ .Times(0); |
+ |
+ CreateServiceForFrame(main_frame_); |
+ |
+ services_[main_frame_]->SetMetadata(expected_metadata); |
+ services_[main_frame_]->EnableAction(blink::mojom::MediaSessionAction::PLAY); |
+ |
+ StartPlayerForFrame(main_frame_); |
+ ClearPlayersForFrame(main_frame_); |
+} |
+ |
} // namespace content |