|  | // Copyright (c) 2012 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. | 
|  |  | 
|  | #include "net/quic/network_connection.h" | 
|  |  | 
|  | #include "net/base/net_util.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | NetworkConnection::NetworkConnection() | 
|  | : connection_type_(NetworkChangeNotifier::CONNECTION_UNKNOWN), | 
|  | connection_description_(nullptr) { | 
|  | } | 
|  |  | 
|  | const char* NetworkConnection::GetDescription() { | 
|  | NetworkChangeNotifier::ConnectionType type = | 
|  | NetworkChangeNotifier::GetConnectionType(); | 
|  | if (connection_description_ != nullptr && type == connection_type_) | 
|  | return connection_description_; | 
|  |  | 
|  | DVLOG(1) << "Updating NetworkConnection's Cached Data"; | 
|  |  | 
|  | connection_description_ = NetworkChangeNotifier::ConnectionTypeToString(type); | 
|  | connection_type_ = type; | 
|  | if (connection_type_ == NetworkChangeNotifier::CONNECTION_UNKNOWN || | 
|  | connection_type_ == NetworkChangeNotifier::CONNECTION_WIFI) { | 
|  | // This function only seems usefully defined on Windows currently. | 
|  | WifiPHYLayerProtocol wifi_type = GetWifiPHYLayerProtocol(); | 
|  | switch (wifi_type) { | 
|  | case WIFI_PHY_LAYER_PROTOCOL_NONE: | 
|  | // No wifi support or no associated AP. | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_ANCIENT: | 
|  | // An obsolete modes introduced by the original 802.11, e.g. IR, FHSS. | 
|  | connection_description_ = "CONNECTION_WIFI_ANCIENT"; | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_A: | 
|  | // 802.11a, OFDM-based rates. | 
|  | connection_description_ = "CONNECTION_WIFI_802.11a"; | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_B: | 
|  | // 802.11b, DSSS or HR DSSS. | 
|  | connection_description_ = "CONNECTION_WIFI_802.11b"; | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_G: | 
|  | // 802.11g, same rates as 802.11a but compatible with 802.11b. | 
|  | connection_description_ = "CONNECTION_WIFI_802.11g"; | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_N: | 
|  | // 802.11n, HT rates. | 
|  | connection_description_ = "CONNECTION_WIFI_802.11n"; | 
|  | break; | 
|  | case WIFI_PHY_LAYER_PROTOCOL_UNKNOWN: | 
|  | // Unclassified mode or failure to identify. | 
|  | break; | 
|  | } | 
|  | } | 
|  | return connection_description_; | 
|  | } | 
|  |  | 
|  | void NetworkConnection::Clear() { | 
|  | connection_type_ = NetworkChangeNotifier::CONNECTION_UNKNOWN; | 
|  | connection_description_ = nullptr; | 
|  | } | 
|  |  | 
|  | void NetworkConnection::OnIPAddressChanged() { | 
|  | Clear(); | 
|  | } | 
|  |  | 
|  | void NetworkConnection::OnConnectionTypeChanged( | 
|  | NetworkChangeNotifier::ConnectionType type) { | 
|  | Clear(); | 
|  | } | 
|  |  | 
|  | }  // namespace net |