1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 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_QUIC_NETWORK_CONNECTION_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_NETWORK_CONNECTION_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 9*6777b538SAndroid Build Coastguard Worker #include "net/base/network_change_notifier.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker namespace net { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker // This class stores information about the current network type and 14*6777b538SAndroid Build Coastguard Worker // provides a textual description of it. 15*6777b538SAndroid Build Coastguard Worker class NET_EXPORT NetworkConnection 16*6777b538SAndroid Build Coastguard Worker : public NetworkChangeNotifier::IPAddressObserver, 17*6777b538SAndroid Build Coastguard Worker public NetworkChangeNotifier::ConnectionTypeObserver { 18*6777b538SAndroid Build Coastguard Worker public: 19*6777b538SAndroid Build Coastguard Worker NetworkConnection(); 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker NetworkConnection(const NetworkConnection&) = delete; 22*6777b538SAndroid Build Coastguard Worker NetworkConnection& operator=(const NetworkConnection&) = delete; 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker ~NetworkConnection() override; 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker // Returns the underlying connection type. connection_type()27*6777b538SAndroid Build Coastguard Worker NetworkChangeNotifier::ConnectionType connection_type() { 28*6777b538SAndroid Build Coastguard Worker return connection_type_; 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Return a string equivalent of current connection type. Callers don't need 32*6777b538SAndroid Build Coastguard Worker // to make a copy of the returned C-string value. If the connection type is 33*6777b538SAndroid Build Coastguard Worker // CONNECTION_WIFI, then we'll tease out some details when we are on WiFi, and 34*6777b538SAndroid Build Coastguard Worker // hopefully leave only ethernet (with no WiFi available) in the 35*6777b538SAndroid Build Coastguard Worker // CONNECTION_UNKNOWN category. This *might* err if there is both ethernet, 36*6777b538SAndroid Build Coastguard Worker // as well as WiFi, where WiFi was not being used that much. Most platforms 37*6777b538SAndroid Build Coastguard Worker // don't distinguish Wifi vs Ethernet, and call everything CONNECTION_UNKNOWN 38*6777b538SAndroid Build Coastguard Worker // :-(. For non CONNECTIION_WIFI, this returns the C-string returned by 39*6777b538SAndroid Build Coastguard Worker // NetworkChangeNotifier::ConnectionTypeToString. connection_description()40*6777b538SAndroid Build Coastguard Worker const char* connection_description() { return connection_description_; } 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker // NetworkChangeNotifier::IPAddressObserver methods: 43*6777b538SAndroid Build Coastguard Worker void OnIPAddressChanged() override; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // NetworkChangeNotifier::ConnectionTypeObserver methods: 46*6777b538SAndroid Build Coastguard Worker void OnConnectionTypeChanged( 47*6777b538SAndroid Build Coastguard Worker NetworkChangeNotifier::ConnectionType type) override; 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker private: 50*6777b538SAndroid Build Coastguard Worker // Cache the connection type to avoid calling the potentially expensive 51*6777b538SAndroid Build Coastguard Worker // NetworkChangeNotifier::GetConnectionType() function. 52*6777b538SAndroid Build Coastguard Worker NetworkChangeNotifier::ConnectionType connection_type_ = 53*6777b538SAndroid Build Coastguard Worker NetworkChangeNotifier::CONNECTION_UNKNOWN; 54*6777b538SAndroid Build Coastguard Worker // Cache the connection description string to avoid calling the expensive 55*6777b538SAndroid Build Coastguard Worker // GetWifiPHYLayerProtocol() function. 56*6777b538SAndroid Build Coastguard Worker const char* connection_description_ = nullptr; 57*6777b538SAndroid Build Coastguard Worker }; 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker } // namespace net 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker #endif // NET_QUIC_NETWORK_CONNECTION_H_ 62