Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: net/nqe/network_id.h

Issue 2369673004: Wire NQE Prefs to Profile (Closed)
Patch Set: Addressed bengr comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_NQE_NETWORK_ID_H_ 5 #ifndef NET_NQE_NETWORK_ID_H_
6 #define NET_NQE_NETWORK_ID_H_ 6 #define NET_NQE_NETWORK_ID_H_
7 7
8 #include <string> 8 #include <string>
9 #include <tuple> 9 #include <tuple>
10 10
11 #include "base/strings/string_number_conversions.h"
11 #include "net/base/net_export.h" 12 #include "net/base/net_export.h"
12 #include "net/base/network_change_notifier.h" 13 #include "net/base/network_change_notifier.h"
13 14
14 namespace { 15 namespace {
16
15 const char kValueSeparator[] = ","; 17 const char kValueSeparator[] = ",";
18
19 // Parses |connection_type_string| as a NetworkChangeNotifier::ConnectionType.
20 // |connection_type_string| must contain the
21 // NetworkChangeNotifier::ConnectionType enum as an interger.
22 net::NetworkChangeNotifier::ConnectionType ConvertStringToConnectionType(
23 const std::string& connection_type_string) {
24 int connection_type_int =
25 static_cast<int>(net::NetworkChangeNotifier::CONNECTION_UNKNOWN);
26 bool connection_type_available =
27 base::StringToInt(connection_type_string, &connection_type_int);
28
29 if (!connection_type_available || connection_type_int < 0 ||
30 connection_type_int >=
31 static_cast<int>(net::NetworkChangeNotifier::CONNECTION_LAST)) {
32 DCHECK(false);
33 return net::NetworkChangeNotifier::CONNECTION_UNKNOWN;
34 }
35 return static_cast<net::NetworkChangeNotifier::ConnectionType>(
36 connection_type_int);
16 } 37 }
17 38
39 } // namespace
40
18 namespace net { 41 namespace net {
19 namespace nqe { 42 namespace nqe {
20 namespace internal { 43 namespace internal {
21 44
22 // NetworkID is used to uniquely identify a network. 45 // NetworkID is used to uniquely identify a network.
23 // For the purpose of network quality estimation and caching, a network is 46 // For the purpose of network quality estimation and caching, a network is
24 // uniquely identified by a combination of |type| and 47 // uniquely identified by a combination of |type| and
25 // |id|. This approach is unable to distinguish networks with 48 // |id|. This approach is unable to distinguish networks with
26 // same name (e.g., different Wi-Fi networks with same SSID). 49 // same name (e.g., different Wi-Fi networks with same SSID).
27 // This is a protected member to expose it to tests. 50 // This is a protected member to expose it to tests.
28 struct NET_EXPORT_PRIVATE NetworkID { 51 struct NET_EXPORT_PRIVATE NetworkID {
52 static NetworkID FromString(const std::string& network_id) {
53 size_t separator_index = network_id.find(kValueSeparator);
54 DCHECK_NE(std::string::npos, separator_index);
55 if (separator_index == std::string::npos) {
56 return NetworkID(NetworkChangeNotifier::CONNECTION_UNKNOWN,
57 std::string());
58 }
59
60 return NetworkID(
61 ConvertStringToConnectionType(network_id.substr(separator_index + 1)),
62 network_id.substr(0, separator_index));
63 }
29 NetworkID(NetworkChangeNotifier::ConnectionType type, const std::string& id) 64 NetworkID(NetworkChangeNotifier::ConnectionType type, const std::string& id)
30 : type(type), id(id) {} 65 : type(type), id(id) {}
31 NetworkID(const NetworkID& other) : type(other.type), id(other.id) {} 66 NetworkID(const NetworkID& other) : type(other.type), id(other.id) {}
32 ~NetworkID() {} 67 ~NetworkID() {}
33 68
69 bool operator==(const NetworkID& other) const {
70 return type == other.type && id == other.id;
71 }
72
73 bool operator!=(const NetworkID& other) const { return !operator==(other); }
74
34 NetworkID& operator=(const NetworkID& other) { 75 NetworkID& operator=(const NetworkID& other) {
35 type = other.type; 76 type = other.type;
36 id = other.id; 77 id = other.id;
37 return *this; 78 return *this;
38 } 79 }
39 80
40 // Overloaded to support ordered collections. 81 // Overloaded to support ordered collections.
41 bool operator<(const NetworkID& other) const { 82 bool operator<(const NetworkID& other) const {
42 return std::tie(type, id) < std::tie(other.type, other.id); 83 return std::tie(type, id) < std::tie(other.type, other.id);
43 } 84 }
44 85
45 std::string ToString() const { 86 std::string ToString() const {
46 return id + kValueSeparator + 87 return id + kValueSeparator + base::IntToString(static_cast<int>(type));
47 NetworkChangeNotifier::ConnectionTypeToString(type);
48 } 88 }
49 89
50 // Connection type of the network. 90 // Connection type of the network.
51 NetworkChangeNotifier::ConnectionType type; 91 NetworkChangeNotifier::ConnectionType type;
52 92
53 // Name of this network. This is set to: 93 // Name of this network. This is set to:
54 // - Wi-Fi SSID if the device is connected to a Wi-Fi access point and the 94 // - Wi-Fi SSID if the device is connected to a Wi-Fi access point and the
55 // SSID name is available, or 95 // SSID name is available, or
56 // - MCC/MNC code of the cellular carrier if the device is connected to a 96 // - MCC/MNC code of the cellular carrier if the device is connected to a
57 // cellular network, or 97 // cellular network, or
58 // - "Ethernet" in case the device is connected to ethernet. 98 // - "Ethernet" in case the device is connected to ethernet.
59 // - An empty string in all other cases or if the network name is not 99 // - An empty string in all other cases or if the network name is not
60 // exposed by platform APIs. 100 // exposed by platform APIs.
61 std::string id; 101 std::string id;
62 }; 102 };
63 103
64 } // namespace internal 104 } // namespace internal
65 } // namespace nqe 105 } // namespace nqe
66 } // namespace net 106 } // namespace net
67 107
68 #endif // NET_NQE_NETWORK_QUALITY_ESTIMATOR_H_ 108 #endif // NET_NQE_NETWORK_QUALITY_ESTIMATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698