Index: net/nqe/network_id.h |
diff --git a/net/nqe/network_id.h b/net/nqe/network_id.h |
index 4620ce3bd92b9f81ad5804cf810149aba8a4368e..083a55fad4c9f3c439446c8ed85fd51ac0543a00 100644 |
--- a/net/nqe/network_id.h |
+++ b/net/nqe/network_id.h |
@@ -8,13 +8,36 @@ |
#include <string> |
#include <tuple> |
+#include "base/strings/string_number_conversions.h" |
#include "net/base/net_export.h" |
#include "net/base/network_change_notifier.h" |
namespace { |
+ |
const char kValueSeparator[] = ","; |
+ |
+// Parses |connection_type_string| as a NetworkChangeNotifier::ConnectionType. |
+// |connection_type_string| must contain the |
+// NetworkChangeNotifier::ConnectionType enum as an interger. |
+net::NetworkChangeNotifier::ConnectionType ConvertStringToConnectionType( |
+ const std::string& connection_type_string) { |
+ int connection_type_int = |
+ static_cast<int>(net::NetworkChangeNotifier::CONNECTION_UNKNOWN); |
+ bool connection_type_available = |
+ base::StringToInt(connection_type_string, &connection_type_int); |
+ |
+ if (!connection_type_available || connection_type_int < 0 || |
+ connection_type_int >= |
+ static_cast<int>(net::NetworkChangeNotifier::CONNECTION_LAST)) { |
+ DCHECK(false); |
+ return net::NetworkChangeNotifier::CONNECTION_UNKNOWN; |
+ } |
+ return static_cast<net::NetworkChangeNotifier::ConnectionType>( |
+ connection_type_int); |
} |
+} // namespace |
+ |
namespace net { |
namespace nqe { |
namespace internal { |
@@ -26,11 +49,29 @@ namespace internal { |
// same name (e.g., different Wi-Fi networks with same SSID). |
// This is a protected member to expose it to tests. |
struct NET_EXPORT_PRIVATE NetworkID { |
+ static NetworkID FromString(const std::string& network_id) { |
+ size_t separator_index = network_id.find(kValueSeparator); |
+ DCHECK_NE(std::string::npos, separator_index); |
+ if (separator_index == std::string::npos) { |
+ return NetworkID(NetworkChangeNotifier::CONNECTION_UNKNOWN, |
+ std::string()); |
+ } |
+ |
+ return NetworkID( |
+ ConvertStringToConnectionType(network_id.substr(separator_index + 1)), |
+ network_id.substr(0, separator_index)); |
+ } |
NetworkID(NetworkChangeNotifier::ConnectionType type, const std::string& id) |
: type(type), id(id) {} |
NetworkID(const NetworkID& other) : type(other.type), id(other.id) {} |
~NetworkID() {} |
+ bool operator==(const NetworkID& other) const { |
+ return type == other.type && id == other.id; |
+ } |
+ |
+ bool operator!=(const NetworkID& other) const { return !operator==(other); } |
+ |
NetworkID& operator=(const NetworkID& other) { |
type = other.type; |
id = other.id; |
@@ -43,8 +84,7 @@ struct NET_EXPORT_PRIVATE NetworkID { |
} |
std::string ToString() const { |
- return id + kValueSeparator + |
- NetworkChangeNotifier::ConnectionTypeToString(type); |
+ return id + kValueSeparator + base::IntToString(static_cast<int>(type)); |
} |
// Connection type of the network. |