Commit 99d03055 authored by mark a. foltz's avatar mark a. foltz Committed by Commit Bot

[Media Router] Fix Cast MEDIA_STATUS updates.

The Cast SDK expects a MEDIA_STATUS message with an IDLE player after
stopping media.  This updates the Cast MRP to send it.

Bug: 1040185
Change-Id: Ieae8f30906026d2c9d067aecc31a61bcf9027eb9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2087700Reviewed-by: default avatarTakumi Fujimoto <takumif@chromium.org>
Commit-Queue: mark a. foltz <mfoltz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748261}
parent e38f0c99
......@@ -105,6 +105,7 @@ void CastSessionTracker::HandleReceiverStatusMessage(
void CastSessionTracker::HandleMediaStatusMessage(const MediaSinkInternal& sink,
const base::Value& message) {
DVLOG(2) << "Initial MEDIA_STATUS: " << message;
auto session_it = sessions_by_sink_id_.find(sink.sink().id());
if (session_it == sessions_by_sink_id_.end()) {
DVLOG(2) << "Got media status message, but no session for: "
......@@ -131,17 +132,7 @@ void CastSessionTracker::HandleMediaStatusMessage(const MediaSinkInternal& sink,
return;
}
// First filter out any idle media objects.
updated_status->EraseListValueIf([](const base::Value& media) {
const std::string* player_state = media.FindStringKey("playerState");
return player_state && *player_state == "IDLE";
});
base::Value::ListView media_list = updated_status->GetList();
if (media_list.size() > 1) {
DVLOG(2) << "Media list unexpectedly contains more than one live media: "
<< media_list.size() << ", session: " << session_id;
}
// Backfill messages from receivers to make them compatible with Cast SDK.
for (auto& media : media_list) {
......@@ -158,7 +149,7 @@ void CastSessionTracker::HandleMediaStatusMessage(const MediaSinkInternal& sink,
CopySavedMediaFieldsToMediaList(session, media_list);
DVLOG(2) << "Final updated status: " << updated_status;
DVLOG(2) << "Final updated MEDIA_STATUS: " << *updated_status;
session->UpdateMedia(*updated_status);
base::Optional<int> request_id =
......
......@@ -169,9 +169,6 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageBasic) {
AddSinkAndSendReceiverStatusResponse();
// Expect that:
//
// - Any 'status' entries with 'playerState' equal to "IDLE" are filtered out.
//
// - The session ID is copied into the output message and all values in in the
// 'status' list.
//
......@@ -187,8 +184,10 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageBasic) {
"sessionId": "theSessionId",
"supportedMediaCommands": [],
},
],
})"),
{
"playerState": "IDLE",
"sessionId": "theSessionId"
}]})"),
base::Optional<int>()));
// This should call session_tracker_.HandleMediaStatusMessage(...).
......@@ -211,6 +210,10 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageBasic) {
"playerState": "anything but IDLE",
"sessionId": "theSessionId",
"supportedMediaCommands": [],
},
{
"playerState": "IDLE",
"sessionId": "theSessionId"
}])"));
}
......@@ -219,8 +222,6 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageFancy) {
// Expect that:
//
// - Any 'status' entries with 'playerState' equal to "IDLE" are filtered out.
//
// - The session ID is copied into the output message and all values in in the
// 'status' list.
//
......@@ -241,7 +242,10 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageFancy) {
"supportedMediaCommands": ["pause"],
"xyzzy": "xyzzyValue1",
},
],
{
"playerState": "IDLE",
"sessionId": "theSessionId"
}],
"xyzzy": "xyzzyValue2",
})"),
base::make_optional(12345)));
......@@ -270,6 +274,10 @@ TEST_F(CastSessionTrackerTest, HandleMediaStatusMessageFancy) {
"sessionId": "theSessionId",
"supportedMediaCommands": ["pause"],
"xyzzy": "xyzzyValue1",
},
{
"playerState": "IDLE",
"sessionId": "theSessionId"
}])"));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment