shill: WiFiProvider: Accept WiFi.HexSSID property
Accept WiFi.HexSSID interchangeably with WiFi.SSID for purposes
of configuring new services or finding existing services.
BUG=chromium:291075
TEST=Unit tests
Change-Id: Ic761a1b8f77b6ee136faa6325ea027857e51fda8
Reviewed-on: https://chromium-review.googlesource.com/172636
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Reviewed-by: Philipp Neubeck <pneubeck@chromium.org>
Tested-by: Philipp Neubeck <pneubeck@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
diff --git a/wifi_provider.cc b/wifi_provider.cc
index 2db5d41..f2fd08b 100644
--- a/wifi_provider.cc
+++ b/wifi_provider.cc
@@ -479,21 +479,30 @@
return false;
}
- if (!args.ContainsString(kSSIDProperty)) {
+ vector<uint8_t> ssid;
+ if (args.ContainsString(kWifiHexSsid)) {
+ string ssid_hex_string = args.GetString(kWifiHexSsid);
+ if (!base::HexStringToBytes(ssid_hex_string, &ssid)) {
+ Error::PopulateAndLog(error, Error::kInvalidArguments,
+ "Hex SSID parameter is not valid");
+ return false;
+ }
+ } else if (args.ContainsString(kSSIDProperty)) {
+ string ssid_string = args.GetString(kSSIDProperty);
+ ssid = vector<uint8_t>(ssid_string.begin(), ssid_string.end());
+ } else {
Error::PopulateAndLog(error, Error::kInvalidArguments,
kManagerErrorSSIDRequired);
return false;
}
- string ssid = args.GetString(kSSIDProperty);
-
- if (ssid.length() < 1) {
+ if (ssid.size() < 1) {
Error::PopulateAndLog(error, Error::kInvalidNetworkName,
kManagerErrorSSIDTooShort);
return false;
}
- if (ssid.length() > IEEE_80211::kMaxSSIDLen) {
+ if (ssid.size() > IEEE_80211::kMaxSSIDLen) {
Error::PopulateAndLog(error, Error::kInvalidNetworkName,
kManagerErrorSSIDTooLong);
return false;
@@ -508,7 +517,7 @@
return false;
}
- *ssid_bytes = vector<uint8_t>(ssid.begin(), ssid.end());
+ *ssid_bytes = ssid;
*mode = mode_test;
*security_method = security_method_test;
diff --git a/wifi_provider_unittest.cc b/wifi_provider_unittest.cc
index 1ea0717..b78d6ba 100644
--- a/wifi_provider_unittest.cc
+++ b/wifi_provider_unittest.cc
@@ -198,6 +198,8 @@
KeyValueStore *args) {
args->SetString(kTypeProperty, kTypeWifi);
if (ssid) {
+ // TODO(pstew): When Chrome switches to using kWifiHexSsid primarily for
+ // GetService and friends, we should switch to doing so here ourselves.
args->SetString(kSSIDProperty, ssid);
}
if (mode) {
@@ -697,6 +699,35 @@
EXPECT_EQ(2, GetServices().size());
}
+TEST_F(WiFiProviderTest, GetServiceByHexSsid) {
+ EXPECT_CALL(manager_, RegisterService(_)).Times(1);
+ const string kSSID("bar");
+ const string kHexSsid(base::HexEncode(kSSID.c_str(), kSSID.length()));
+
+ KeyValueStore args;
+ args.SetString(kTypeProperty, kTypeWifi);
+ args.SetString(kWifiHexSsid, kHexSsid);
+ args.SetString(kSecurityProperty, kSecurityPsk);
+ args.SetBool(kWifiHiddenSsid, false);
+
+ Error error;
+ WiFiServiceRefPtr service = GetWiFiService(args, &error);
+ Mock::VerifyAndClearExpectations(&manager_);
+ EXPECT_TRUE(error.IsSuccess());
+ const string service_ssid(service->ssid().begin(), service->ssid().end());
+ EXPECT_EQ(kSSID, service_ssid);
+ EXPECT_EQ(kModeManaged, service->mode());
+ EXPECT_TRUE(service->IsSecurityMatch(kSecurityPsk));
+ EXPECT_FALSE(service->hidden_ssid());
+
+
+ // While here, make sure FindSimilarService also supports kWifiHexSsid.
+ Error find_error;
+ ServiceRefPtr find_service = provider_.FindSimilarService(args, &find_error);
+ EXPECT_TRUE(find_error.IsSuccess());
+ EXPECT_EQ(service.get(), find_service.get());
+}
+
TEST_F(WiFiProviderTest, FindSimilarService) {
// Since CreateTemporyService uses exactly the same validation as
// GetService, don't bother with testing invalid parameters.
diff --git a/wifi_service.cc b/wifi_service.cc
index be00c61..6723e59 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -139,6 +139,7 @@
IgnoreParameterForConfigure(kModeProperty);
IgnoreParameterForConfigure(kSSIDProperty);
IgnoreParameterForConfigure(kSecurityProperty);
+ IgnoreParameterForConfigure(kWifiHexSsid);
InitializeCustomMetrics();
diff --git a/wifi_service_unittest.cc b/wifi_service_unittest.cc
index deb3b99..558215d 100644
--- a/wifi_service_unittest.cc
+++ b/wifi_service_unittest.cc
@@ -1056,6 +1056,7 @@
args.SetString(kTypeProperty, kTypeWifi);
args.SetString(kSSIDProperty, simple_ssid_string());
args.SetString(kSecurityProperty, kSecurityNone);
+ args.SetString(kWifiHexSsid, "This is ignored even if it is invalid hex.");
const string kGUID = "aguid";
args.SetString(kGuidProperty, kGUID);