• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)24 const 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)46 absl::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)67 const 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