Add flag to override Effective Connection Type
Add flag to override Effective Connection Type (ECT) returned by
Network Quality Estimator (NQE). If ECT is overridden using both the
flag and the field trial, then the value set by the flag takes the
precedence.
BUG=716221
Review-Url: https://codereview.chromium.org/2850003002
Cr-Commit-Position: refs/heads/master@{#469432}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9d5062f7..62ceb693 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -85,6 +85,7 @@
#include "media/media_features.h"
#include "media/midi/midi_switches.h"
#include "net/cert/cert_verify_proc_android.h"
+#include "net/nqe/effective_connection_type.h"
#include "ppapi/features/features.h"
#include "printing/features/features.h"
#include "services/device/public/cpp/device_features.h"
@@ -715,6 +716,36 @@
#endif
};
+const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
+ {flags_ui::kGenericExperimentChoiceDefault, "", ""},
+ {flag_descriptions::kEffectiveConnectionTypeUnknownDescription,
+ switches::kForceEffectiveConnectionType,
+ net::kEffectiveConnectionTypeUnknown},
+ {flag_descriptions::kEffectiveConnectionTypeOfflineDescription,
+ switches::kForceEffectiveConnectionType,
+ net::kEffectiveConnectionTypeOffline},
+ {flag_descriptions::kEffectiveConnectionTypeSlow2GDescription,
+ switches::kForceEffectiveConnectionType,
+ net::kEffectiveConnectionTypeSlow2G},
+ {flag_descriptions::kEffectiveConnectionType2GDescription,
+ switches::kForceEffectiveConnectionType, net::kEffectiveConnectionType2G},
+ {flag_descriptions::kEffectiveConnectionType3GDescription,
+ switches::kForceEffectiveConnectionType, net::kEffectiveConnectionType3G},
+ {flag_descriptions::kEffectiveConnectionType4GDescription,
+ switches::kForceEffectiveConnectionType, net::kEffectiveConnectionType4G},
+};
+
+// Ensure that all effective connection types returned by Network Quality
+// Estimator (NQE) are also exposed via flags.
+static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 1 ==
+ arraysize(kForceEffectiveConnectionTypeChoices),
+ "ECT enum value is not handled.");
+static_assert(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN == 0,
+ "ECT enum value is not handled.");
+static_assert(net::EFFECTIVE_CONNECTION_TYPE_4G + 1 ==
+ net::EFFECTIVE_CONNECTION_TYPE_LAST,
+ "ECT enum value is not handled.");
+
const FeatureEntry::FeatureParam kNoStatePrefetchEnabled[] = {
{prerender::kNoStatePrefetchFeatureModeParameterName,
prerender::kNoStatePrefetchFeatureModeParameterPrefetch}};
@@ -2782,6 +2813,11 @@
flag_descriptions::kAutoplayPolicyDescription, kOsAll,
MULTI_VALUE_TYPE(kAutoplayPolicyChoices)},
+ {"force-effective-connection-type",
+ flag_descriptions::kForceEffectiveConnectionTypeName,
+ flag_descriptions::kForceEffectiveConnectionTypeDescription, kOsAll,
+ MULTI_VALUE_TYPE(kForceEffectiveConnectionTypeChoices)},
+
{"enable-heap-profiling", flag_descriptions::kEnableHeapProfilingName,
flag_descriptions::kEnableHeapProfilingDescription, kOsAll,
MULTI_VALUE_TYPE(kEnableHeapProfilingChoices)},