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, ...@@ -241,13 +241,15 @@ void AddStreamObject(int stream_index,
} }
// Checks whether receiver's build version is less than "1.|base_version|.xxxx". // 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( bool NeedsWorkaroundForOlder1DotXVersions(
const std::string& receiver_build_version, const std::string& receiver_build_version,
int base_version) { int base_version) {
if (!base::StartsWith(receiver_build_version, "1.", if (!base::StartsWith(receiver_build_version, "1.",
base::CompareCase::SENSITIVE)) base::CompareCase::SENSITIVE)) {
return false; return true;
}
const size_t end_pos = receiver_build_version.find_first_of('.', 2); const size_t end_pos = receiver_build_version.find_first_of('.', 2);
if (end_pos == std::string::npos) if (end_pos == std::string::npos)
return false; return false;
...@@ -767,12 +769,11 @@ void Session::OnAnswer(const std::vector<FrameSenderConfig>& audio_configs, ...@@ -767,12 +769,11 @@ void Session::OnAnswer(const std::vector<FrameSenderConfig>& audio_configs,
if (answer.supports_get_status) { if (answer.supports_get_status) {
wifi_status_monitor = wifi_status_monitor =
std::make_unique<WifiStatusMonitor>(&message_dispatcher_); std::make_unique<WifiStatusMonitor>(&message_dispatcher_);
// Before 1.28 Android TV Chromecast receivers respond to GET_CAPABILITIES // Nest Hub devices do not support remoting despite having a relatively new
// even though they don't support remoting. // build version, so we cannot filter with
// NeedsWorkaroundForOlder1DotXVersions() here.
if (initially_starting_session && if (initially_starting_session &&
(!NeedsWorkaroundForOlder1DotXVersions( (base::StartsWith(session_params_.receiver_model_name, "Chromecast",
session_monitor_->GetReceiverBuildVersion(), 28) ||
base::StartsWith(session_params_.receiver_model_name, "Chromecast",
base::CompareCase::SENSITIVE) || base::CompareCase::SENSITIVE) ||
base::StartsWith(session_params_.receiver_model_name, "Eureka Dongle", base::StartsWith(session_params_.receiver_model_name, "Eureka Dongle",
base::CompareCase::SENSITIVE))) { base::CompareCase::SENSITIVE))) {
......
...@@ -54,7 +54,7 @@ bool ParseReceiverSetupInfo(const std::string& response, ...@@ -54,7 +54,7 @@ bool ParseReceiverSetupInfo(const std::string& response,
bool is_connected = false; bool is_connected = false;
bool is_on_ethernet = false; bool is_on_ethernet = false;
bool has_update = false; bool has_update = false;
int32_t uptime_seconds = 0; double uptime_seconds = 0;
const bool result = const bool result =
value && value->is_dict() && value && value->is_dict() &&
...@@ -62,7 +62,7 @@ bool ParseReceiverSetupInfo(const std::string& response, ...@@ -62,7 +62,7 @@ bool ParseReceiverSetupInfo(const std::string& response,
GetBool(*value, "connected", &is_connected) && GetBool(*value, "connected", &is_connected) &&
GetBool(*value, "ethernet_connected", &is_on_ethernet) && GetBool(*value, "ethernet_connected", &is_on_ethernet) &&
GetBool(*value, "has_update", &has_update) && GetBool(*value, "has_update", &has_update) &&
GetInt(*value, "uptime", &uptime_seconds) && GetDouble(*value, "uptime", &uptime_seconds) &&
GetString(*value, "name", receiver_name); GetString(*value, "name", receiver_name);
if (result) { if (result) {
tags->SetKey("receiverVersion", base::Value(build_version)); tags->SetKey("receiverVersion", base::Value(build_version));
......
...@@ -49,12 +49,12 @@ void VerifyBoolValue(const base::Value& raw_value, ...@@ -49,12 +49,12 @@ void VerifyBoolValue(const base::Value& raw_value,
EXPECT_EQ(expected_value, data); EXPECT_EQ(expected_value, data);
} }
void VerifyIntValue(const base::Value& raw_value, void VerifyDoubleValue(const base::Value& raw_value,
const std::string& key, const std::string& key,
int32_t expected_value) { double expected_value) {
int32_t data; double data;
EXPECT_TRUE(GetInt(raw_value, key, &data)); EXPECT_TRUE(GetDouble(raw_value, key, &data));
EXPECT_EQ(expected_value, data); EXPECT_NEAR(expected_value, data, DBL_EPSILON * 2);
} }
void VerifyWifiStatus(const base::Value& raw_value, void VerifyWifiStatus(const base::Value& raw_value,
...@@ -375,7 +375,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) { ...@@ -375,7 +375,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) {
"\"connected\": true," "\"connected\": true,"
"\"ethernet_connected\": false," "\"ethernet_connected\": false,"
"\"has_update\": false," "\"has_update\": false,"
"\"uptime\": 132536 }"; "\"uptime\": 13253.6 }";
SendReceiverSetupInfo(receiver_setup_info); SendReceiverSetupInfo(receiver_setup_info);
...@@ -406,7 +406,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) { ...@@ -406,7 +406,7 @@ TEST_F(SessionMonitorTest, ReceiverSetupInfo) {
VerifyBoolValue(*tags, "receiverConnected", true); VerifyBoolValue(*tags, "receiverConnected", true);
VerifyBoolValue(*tags, "receiverOnEthernet", false); VerifyBoolValue(*tags, "receiverOnEthernet", false);
VerifyBoolValue(*tags, "receiverHasUpdatePending", false); VerifyBoolValue(*tags, "receiverHasUpdatePending", false);
VerifyIntValue(*tags, "receiverUptimeSeconds", 132536); VerifyDoubleValue(*tags, "receiverUptimeSeconds", 13253.6);
} }
} // namespace mirroring } // 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