Index: chrome/browser/io_thread_unittest.cc |
diff --git a/chrome/browser/io_thread_unittest.cc b/chrome/browser/io_thread_unittest.cc |
index 8ac33d274239e62b8f983496912297d5433d43fb..93042c9b709958b68e32edb01c2adcaeb1af66b5 100644 |
--- a/chrome/browser/io_thread_unittest.cc |
+++ b/chrome/browser/io_thread_unittest.cc |
@@ -4,6 +4,9 @@ |
#include <stddef.h> |
+#include <map> |
+#include <string> |
+ |
#include "base/at_exit.h" |
#include "base/command_line.h" |
#include "base/macros.h" |
@@ -29,6 +32,8 @@ |
#include "net/http/http_auth_preferences.h" |
#include "net/http/http_auth_scheme.h" |
#include "net/http/http_network_session.h" |
+#include "net/nqe/effective_connection_type.h" |
+#include "net/nqe/network_quality_estimator.h" |
#include "net/quic/chromium/quic_stream_factory.h" |
#include "net/quic/core/quic_tag.h" |
#include "net/quic/core/quic_versions.h" |
@@ -82,6 +87,12 @@ class IOThreadTestWithIOThreadObject : public testing::Test { |
EXPECT_EQ(expected, http_auth_preferences->NegotiateEnablePort()); |
} |
+ void CheckEffectiveConnectionType(net::EffectiveConnectionType expected) { |
+ ASSERT_EQ(expected, |
+ io_thread_->globals() |
+ ->network_quality_estimator->GetEffectiveConnectionType()); |
+ } |
+ |
#if defined(OS_ANDROID) |
void CheckAuthAndroidNegoitateAccountType(std::string expected) { |
auto* http_auth_preferences = |
@@ -127,6 +138,9 @@ class IOThreadTestWithIOThreadObject : public testing::Test { |
chromeos::DBusThreadManager::Initialize(); |
chromeos::NetworkHandler::Initialize(); |
#endif |
+ } |
+ |
+ void CreateThreads() { |
// The IOThread constructor registers the IOThread object with as the |
// BrowserThreadDelegate for the io thread. |
io_thread_.reset(new IOThread(&pref_service_, &policy_service_, nullptr, |
@@ -153,6 +167,7 @@ class IOThreadTestWithIOThreadObject : public testing::Test { |
chromeos::DBusThreadManager::Shutdown(); |
#endif |
} |
+ |
TestingPrefServiceSimple* pref_service() { return &pref_service_; } |
void RunOnIOThreadBlocking(const base::Closure& task) { |
@@ -185,6 +200,7 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateNegotiateDisableCnameLookup) { |
// the HttpAuthPreferences are correctly initialized and running on the |
// IO thread. The other preferences are tested by the HttpAuthPreferences |
// unit tests. |
+ CreateThreads(); |
pref_service()->SetBoolean(prefs::kDisableAuthNegotiateCnameLookup, false); |
RunOnIOThreadBlocking( |
base::Bind(&IOThreadTestWithIOThreadObject::CheckCnameLookup, |
@@ -196,6 +212,7 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateNegotiateDisableCnameLookup) { |
} |
TEST_F(IOThreadTestWithIOThreadObject, UpdateEnableAuthNegotiatePort) { |
+ CreateThreads(); |
pref_service()->SetBoolean(prefs::kEnableAuthNegotiatePort, false); |
RunOnIOThreadBlocking( |
base::Bind(&IOThreadTestWithIOThreadObject::CheckNegotiateEnablePort, |
@@ -207,6 +224,7 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateEnableAuthNegotiatePort) { |
} |
TEST_F(IOThreadTestWithIOThreadObject, UpdateServerWhitelist) { |
+ CreateThreads(); |
GURL url("http://test.example.com"); |
pref_service()->SetString(prefs::kAuthServerWhitelist, "xxx"); |
@@ -221,6 +239,7 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateServerWhitelist) { |
} |
TEST_F(IOThreadTestWithIOThreadObject, UpdateDelegateWhitelist) { |
+ CreateThreads(); |
GURL url("http://test.example.com"); |
pref_service()->SetString(prefs::kAuthNegotiateDelegateWhitelist, ""); |
@@ -237,6 +256,7 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateDelegateWhitelist) { |
#if defined(OS_ANDROID) |
// AuthAndroidNegotiateAccountType is only used on Android. |
TEST_F(IOThreadTestWithIOThreadObject, UpdateAuthAndroidNegotiateAccountType) { |
+ CreateThreads(); |
pref_service()->SetString(prefs::kAuthAndroidNegotiateAccountType, "acc1"); |
RunOnIOThreadBlocking(base::Bind( |
&IOThreadTestWithIOThreadObject::CheckAuthAndroidNegoitateAccountType, |
@@ -248,6 +268,63 @@ TEST_F(IOThreadTestWithIOThreadObject, UpdateAuthAndroidNegotiateAccountType) { |
} |
#endif |
+TEST_F(IOThreadTestWithIOThreadObject, ForceECTFromCommandLine) { |
+ CreateThreads(); |
+ base::CommandLine::Init(0, nullptr); |
+ ASSERT_TRUE(base::CommandLine::InitializedForCurrentProcess()); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
+ "--force-effective-connection-type", "Slow-2G"); |
+ |
+ RunOnIOThreadBlocking(base::Bind( |
+ &IOThreadTestWithIOThreadObject::CheckEffectiveConnectionType, |
+ base::Unretained(this), net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G)); |
+} |
+ |
+TEST_F(IOThreadTestWithIOThreadObject, ForceECTUsingFieldTrial) { |
+ base::CommandLine::Init(0, nullptr); |
+ ASSERT_TRUE(base::CommandLine::InitializedForCurrentProcess()); |
+ |
+ variations::testing::ClearAllVariationParams(); |
+ std::map<std::string, std::string> variation_params; |
+ variation_params["force_effective_connection_type"] = "2G"; |
+ ASSERT_TRUE(variations::AssociateVariationParams( |
+ "NetworkQualityEstimator", "Enabled", variation_params)); |
+ |
+ base::FieldTrialList field_trial_list(nullptr); |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("NetworkQualityEstimator", |
+ "Enabled")); |
+ |
+ // Create threads after the field trial has been set. |
+ CreateThreads(); |
+ |
+ RunOnIOThreadBlocking( |
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckEffectiveConnectionType, |
+ base::Unretained(this), net::EFFECTIVE_CONNECTION_TYPE_2G)); |
+} |
+ |
+TEST_F(IOThreadTestWithIOThreadObject, ECTFromCommandLineOverridesFieldTrial) { |
+ base::CommandLine::Init(0, nullptr); |
+ ASSERT_TRUE(base::CommandLine::InitializedForCurrentProcess()); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
+ "--force-effective-connection-type", "Slow-2G"); |
+ |
+ variations::testing::ClearAllVariationParams(); |
+ std::map<std::string, std::string> variation_params; |
+ variation_params["force_effective_connection_type"] = "2G"; |
+ ASSERT_TRUE(variations::AssociateVariationParams( |
+ "NetworkQualityEstimator", "Enabled", variation_params)); |
+ |
+ base::FieldTrialList field_trial_list(nullptr); |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("NetworkQualityEstimator", |
+ "Enabled")); |
+ |
+ // Create threads after the field trial has been set. |
+ CreateThreads(); |
+ RunOnIOThreadBlocking(base::Bind( |
+ &IOThreadTestWithIOThreadObject::CheckEffectiveConnectionType, |
+ base::Unretained(this), net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G)); |
+} |
+ |
class ConfigureParamsFromFieldTrialsAndCommandLineTest |
: public ::testing::Test { |
public: |