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