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

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

Issue 2612293003: [MediaSession] Don't reset metadata and actions when the session goes uncontrollable (Closed)
Patch Set: rebased Created 3 years, 11 months 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_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

Powered by Google App Engine
This is Rietveld 408576698