|  | // 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/basictypes.h" | 
|  | #include "net/base/net_export.h" | 
|  | #include "net/base/network_change_notifier.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | namespace test { | 
|  | class NetworkConnectionPeer; | 
|  | }  // namespace test | 
|  |  | 
|  | // This class returns the current network's connection description. It also | 
|  | // cache's the connection description to fix crbug.com/422516. | 
|  | class NET_EXPORT NetworkConnection | 
|  | : public NetworkChangeNotifier::IPAddressObserver, | 
|  | public NetworkChangeNotifier::ConnectionTypeObserver { | 
|  | public: | 
|  | NetworkConnection(); | 
|  | ~NetworkConnection() override {} | 
|  |  | 
|  | // 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* GetDescription(); | 
|  |  | 
|  | // It clears the cached connection_type_ and connection_description_. | 
|  | void Clear(); | 
|  |  | 
|  | // NetworkChangeNotifier::IPAddressObserver methods: | 
|  | void OnIPAddressChanged() override; | 
|  |  | 
|  | // NetworkChangeNotifier::ConnectionTypeObserver methods: | 
|  | void OnConnectionTypeChanged( | 
|  | NetworkChangeNotifier::ConnectionType type) override; | 
|  |  | 
|  | private: | 
|  | friend class test::NetworkConnectionPeer; | 
|  |  | 
|  | // Cache the connection_type and the connection description string to avoid | 
|  | // calling expensive GetWifiPHYLayerProtocol() function. | 
|  | NetworkChangeNotifier::ConnectionType connection_type_; | 
|  | const char* connection_description_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(NetworkConnection); | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_QUIC_NETWORK_CONNECTION_H_ |