| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_QUIC_NETWORK_CONNECTION_H_ |
| #define NET_QUIC_NETWORK_CONNECTION_H_ |
| |
| #include "base/macros.h" |
| #include "net/base/net_export.h" |
| #include "net/base/network_change_notifier.h" |
| |
| namespace net { |
| |
| // This class stores information about the current network type and |
| // provides a textual description of it. |
| class NET_EXPORT NetworkConnection |
| : public NetworkChangeNotifier::IPAddressObserver, |
| public NetworkChangeNotifier::ConnectionTypeObserver { |
| public: |
| NetworkConnection(); |
| ~NetworkConnection() override; |
| |
| // Returns the underlying connection type. |
| NetworkChangeNotifier::ConnectionType connection_type() { |
| return connection_type_; |
| } |
| |
| // Return a string equivalent of current connection type. Callers don't need |
| // to make a copy of the returned C-string value. If the connection type is |
| // CONNECTION_WIFI, then we'll tease out some details when we are on WiFi, and |
| // hopefully leave only ethernet (with no WiFi available) in the |
| // CONNECTION_UNKNOWN category. This *might* err if there is both ethernet, |
| // as well as WiFi, where WiFi was not being used that much. Most platforms |
| // don't distinguish Wifi vs Etherenet, and call everything CONNECTION_UNKNOWN |
| // :-(. Fo non CONNECTIION_WIFI, this returns the C-string returned by |
| // NetworkChangeNotifier::ConnectionTypeToString. |
| const char* connection_description() { return connection_description_; } |
| |
| // NetworkChangeNotifier::IPAddressObserver methods: |
| void OnIPAddressChanged() override; |
| |
| // NetworkChangeNotifier::ConnectionTypeObserver methods: |
| void OnConnectionTypeChanged( |
| NetworkChangeNotifier::ConnectionType type) override; |
| |
| private: |
| // Cache the connection type to avoid calling the potentially expensive |
| // NetworkChangeNotifier::GetConnectionType() function. |
| NetworkChangeNotifier::ConnectionType connection_type_; |
| // Cache the connection description string to avoid calling the expensive |
| // GetWifiPHYLayerProtocol() function. |
| const char* connection_description_; |
| |
| DISALLOW_COPY_AND_ASSIGN(NetworkConnection); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_QUIC_NETWORK_CONNECTION_H_ |