1 // Copyright 2016 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/nqe/effective_connection_type.h" 6 7 #include "base/notreached.h" 8 9 namespace { 10 11 const char kDeprectedEffectiveConnectionTypeSlow2G[] = "Slow2G"; 12 13 } // namespace 14 15 namespace net { 16 17 const char kEffectiveConnectionTypeUnknown[] = "Unknown"; 18 const char kEffectiveConnectionTypeOffline[] = "Offline"; 19 const char kEffectiveConnectionTypeSlow2G[] = "Slow-2G"; 20 const char kEffectiveConnectionType2G[] = "2G"; 21 const char kEffectiveConnectionType3G[] = "3G"; 22 const char kEffectiveConnectionType4G[] = "4G"; 23 GetNameForEffectiveConnectionType(EffectiveConnectionType type)24const char* GetNameForEffectiveConnectionType(EffectiveConnectionType type) { 25 switch (type) { 26 case EFFECTIVE_CONNECTION_TYPE_UNKNOWN: 27 return kEffectiveConnectionTypeUnknown; 28 case EFFECTIVE_CONNECTION_TYPE_OFFLINE: 29 return kEffectiveConnectionTypeOffline; 30 case EFFECTIVE_CONNECTION_TYPE_SLOW_2G: 31 return kEffectiveConnectionTypeSlow2G; 32 case EFFECTIVE_CONNECTION_TYPE_2G: 33 return kEffectiveConnectionType2G; 34 case EFFECTIVE_CONNECTION_TYPE_3G: 35 return kEffectiveConnectionType3G; 36 case EFFECTIVE_CONNECTION_TYPE_4G: 37 return kEffectiveConnectionType4G; 38 case EFFECTIVE_CONNECTION_TYPE_LAST: 39 NOTREACHED(); 40 return ""; 41 } 42 NOTREACHED(); 43 return ""; 44 } 45 GetEffectiveConnectionTypeForName(base::StringPiece connection_type_name)46absl::optional<EffectiveConnectionType> GetEffectiveConnectionTypeForName( 47 base::StringPiece connection_type_name) { 48 if (connection_type_name == kEffectiveConnectionTypeUnknown) 49 return EFFECTIVE_CONNECTION_TYPE_UNKNOWN; 50 if (connection_type_name == kEffectiveConnectionTypeOffline) 51 return EFFECTIVE_CONNECTION_TYPE_OFFLINE; 52 if (connection_type_name == kEffectiveConnectionTypeSlow2G) 53 return EFFECTIVE_CONNECTION_TYPE_SLOW_2G; 54 // Return EFFECTIVE_CONNECTION_TYPE_SLOW_2G if the deprecated string 55 // representation is in use. 56 if (connection_type_name == kDeprectedEffectiveConnectionTypeSlow2G) 57 return EFFECTIVE_CONNECTION_TYPE_SLOW_2G; 58 if (connection_type_name == kEffectiveConnectionType2G) 59 return EFFECTIVE_CONNECTION_TYPE_2G; 60 if (connection_type_name == kEffectiveConnectionType3G) 61 return EFFECTIVE_CONNECTION_TYPE_3G; 62 if (connection_type_name == kEffectiveConnectionType4G) 63 return EFFECTIVE_CONNECTION_TYPE_4G; 64 return absl::nullopt; 65 } 66 DeprecatedGetNameForEffectiveConnectionType(EffectiveConnectionType type)67const char* DeprecatedGetNameForEffectiveConnectionType( 68 EffectiveConnectionType type) { 69 switch (type) { 70 case EFFECTIVE_CONNECTION_TYPE_SLOW_2G: 71 return kDeprectedEffectiveConnectionTypeSlow2G; 72 default: 73 return GetNameForEffectiveConnectionType(type); 74 } 75 } 76 77 } // namespace net 78