Commit 20c9c27b authored by Takumi Fujimoto's avatar Takumi Fujimoto Committed by Commit Bot

[Mirroring Service] Disable media remoting on non-Chromecast devices

Disable remoting on devices whose model names aren't "Chromecast*" or
"Eureka Dongle*" because remoting doesn't work on many other devices,
even if they support GET_CAPABILITIES.

Also fix the receiver info parsing code to parse into the right types.

Bug: 977773
Change-Id: I27190e5cf06b82d5ef806a4a9f10ed1d2da3be50
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1679350
Commit-Queue: Takumi Fujimoto <takumif@chromium.org>
Reviewed-by: default avatarYuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672716}
parent e3eb00b3
......@@ -241,13 +241,15 @@ void AddStreamObject(int stream_index,
}
// Checks whether receiver's build version is less than "1.|base_version|.xxxx".
// Returns false if given version doesn't have the format of "1.xx.xxxx".
// Returns true if given version doesn't have the format of "1.xx.xxxx", so that
// we don't assume that the receiver has the required new capabilities.
bool NeedsWorkaroundForOlder1DotXVersions(
const std::string& receiver_build_version,
int base_version) {
if (!base::StartsWith(receiver_build_version, "1.",
base::CompareCase::SENSITIVE))
return false;
base::CompareCase::SENSITIVE)) {
return true;
}
const size_t end_pos = receiver_build_version.find_first_of('.', 2);
if (end_pos == std::string::npos)
return false;
......@@ -767,12 +769,11 @@ void Session::OnAnswer(const std::vector<FrameSenderConfig>& audio_configs,
if (answer.supports_get_status) {
wifi_status_monitor =
std::make_unique<WifiStatusMonitor>(&message_dispatcher_);
// Before 1.28 Android TV Chromecast receivers respond to GET_CAPABILITIES
// even though they don't support remoting.
// Nest Hub devices do not support remoting despite having a relatively new
// build version, so we cannot filter with
// NeedsWorkaroundForOlder1DotXVersions() here.
if (initially_starting_session &&
(!NeedsWorkaroundForOlder1DotXVersions(
session_monitor_->GetReceiverBuildVersion(), 28) ||
base::StartsWith(session_params_.receiver_model_name, "Chromecast",
(base::StartsWith(session_params_.receiver_model_name, "Chromecast",
base::CompareCase::SENSITIVE) ||
base::StartsWith(session_params_.receiver_model_name, "Eureka Dongle",
base::CompareCase::SENSITIVE))) {
......
......@@ -54,7 +54,7 @@ bool ParseReceiverSetupInfo(const std::string& response,
bool is_connected = false;
bool is_on_ethernet = false;
bool has_update = false;
int32_t uptime_seconds = 0;
double uptime_seconds = 0;
const bool result =
value && value->is_dict() &&
......@@ -62,7 +62,7 @@ bool ParseReceiverSetupInfo(const std::string& response,
GetBool(*value, "connected", &is_connected) &&
GetBool(*value, "ethernet_connected", &is_on_ethernet) &&
GetBool(*value, "has_update", &has_update) &&
GetInt(*value, "uptime", &uptime_seconds) &&
GetDouble(*value, "uptime", &uptime_seconds) &&
GetString(*value, "name", receiver_name);
if (result) {
tags->SetKey("receiverVersion", base::Value(build_version));
......
......@@ -49,12 +49,12 @@ void VerifyBoolValue(const base::Value& raw_value,
EXPECT_EQ(expected_value, data);
}
void VerifyIntValue(const base::Value& raw_value,
const std::string& key,
int32_t expected_value) {
int32_t data;
EXPECT_TRUE(GetInt(raw_value, key, &data));
EXPECT_EQ(expected_value, data);
void VerifyDoubleValue(const base::Value& raw_value,
const std::string& key,
double expected_value) {
double data;
EXPECT_TRUE(GetDouble(raw_value, key, &data));
EXPECT_NEAR(expected_value, data, DBL_EPSILON * 2);
}
void VerifyWifiStatus(const base::Value& raw_value,
......@@ -375,7 +375,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) {
"\"connected\": true,"
"\"ethernet_connected\": false,"
"\"has_update\": false,"
"\"uptime\": 132536 }";
"\"uptime\": 13253.6 }";
SendReceiverSetupInfo(receiver_setup_info);
......@@ -406,7 +406,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) {
VerifyBoolValue(*tags, "receiverConnected", true);
VerifyBoolValue(*tags, "receiverOnEthernet", false);
VerifyBoolValue(*tags, "receiverHasUpdatePending", false);
VerifyIntValue(*tags, "receiverUptimeSeconds", 132536);
VerifyDoubleValue(*tags, "receiverUptimeSeconds", 13253.6);
}
} // namespace mirroring
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