1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_NQE_NETWORK_ID_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_NQE_NETWORK_ID_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/network_change_notifier.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace net::nqe::internal { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // NetworkID is used to uniquely identify a network. 16*6777b538SAndroid Build Coastguard Worker // For the purpose of network quality estimation and caching, a network is 17*6777b538SAndroid Build Coastguard Worker // uniquely identified by a combination of |type| and 18*6777b538SAndroid Build Coastguard Worker // |id|. This approach is unable to distinguish networks with 19*6777b538SAndroid Build Coastguard Worker // same name (e.g., different Wi-Fi networks with same SSID). 20*6777b538SAndroid Build Coastguard Worker // This is a protected member to expose it to tests. 21*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT_PRIVATE NetworkID { 22*6777b538SAndroid Build Coastguard Worker static NetworkID FromString(const std::string& network_id); 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker NetworkID(NetworkChangeNotifier::ConnectionType type, 25*6777b538SAndroid Build Coastguard Worker const std::string& id, 26*6777b538SAndroid Build Coastguard Worker int32_t signal_strength); 27*6777b538SAndroid Build Coastguard Worker NetworkID(const NetworkID& other); 28*6777b538SAndroid Build Coastguard Worker ~NetworkID(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker bool operator==(const NetworkID& other) const; 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker bool operator!=(const NetworkID& other) const; 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker NetworkID& operator=(const NetworkID& other); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Overloaded to support ordered collections. 37*6777b538SAndroid Build Coastguard Worker bool operator<(const NetworkID& other) const; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker std::string ToString() const; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // Connection type of the network. 42*6777b538SAndroid Build Coastguard Worker NetworkChangeNotifier::ConnectionType type; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // Name of this network. This is set to: 45*6777b538SAndroid Build Coastguard Worker // - Wi-Fi SSID if the device is connected to a Wi-Fi access point and the 46*6777b538SAndroid Build Coastguard Worker // SSID name is available, or 47*6777b538SAndroid Build Coastguard Worker // - MCC/MNC code of the cellular carrier if the device is connected to a 48*6777b538SAndroid Build Coastguard Worker // cellular network, or 49*6777b538SAndroid Build Coastguard Worker // - "Ethernet" in case the device is connected to ethernet. 50*6777b538SAndroid Build Coastguard Worker // - An empty string in all other cases or if the network name is not 51*6777b538SAndroid Build Coastguard Worker // exposed by platform APIs. 52*6777b538SAndroid Build Coastguard Worker std::string id; 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker // Signal strength of the network. Set to INT32_MIN when the value is 55*6777b538SAndroid Build Coastguard Worker // unavailable. Otherwise, must be between 0 and 4 (both inclusive). This may 56*6777b538SAndroid Build Coastguard Worker // take into account many different radio technology inputs. 0 represents very 57*6777b538SAndroid Build Coastguard Worker // poor signal strength while 4 represents a very strong signal strength. The 58*6777b538SAndroid Build Coastguard Worker // range is capped between 0 and 4 to ensure that a change in the value 59*6777b538SAndroid Build Coastguard Worker // indicates a non-negligible change in the signal quality. 60*6777b538SAndroid Build Coastguard Worker // 61*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1495477): This should use std::optional instead of a magic 62*6777b538SAndroid Build Coastguard Worker // value. 63*6777b538SAndroid Build Coastguard Worker int32_t signal_strength; 64*6777b538SAndroid Build Coastguard Worker }; 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker } // namespace net::nqe::internal 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker #endif // NET_NQE_NETWORK_ID_H_ 69