| Index: components/network_session_configurator/network_session_configurator_unittest.cc
|
| diff --git a/chrome/browser/io_thread_unittest.cc b/components/network_session_configurator/network_session_configurator_unittest.cc
|
| similarity index 67%
|
| copy from chrome/browser/io_thread_unittest.cc
|
| copy to components/network_session_configurator/network_session_configurator_unittest.cc
|
| index dca30be5f2ae7a5fd0095a847674183a65abfbe8..4eed4d34d330b76848874b782299060f4803a70d 100644
|
| --- a/chrome/browser/io_thread_unittest.cc
|
| +++ b/components/network_session_configurator/network_session_configurator_unittest.cc
|
| @@ -1,90 +1,57 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2016 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 <stddef.h>
|
| +#include "components/network_session_configurator/network_session_configurator.h"
|
| +
|
| +#include <map>
|
| +#include <memory>
|
|
|
| -#include "base/at_exit.h"
|
| -#include "base/command_line.h"
|
| -#include "base/macros.h"
|
| #include "base/metrics/field_trial.h"
|
| -#include "base/run_loop.h"
|
| #include "base/test/mock_entropy_provider.h"
|
| -#include "build/build_config.h"
|
| -#include "chrome/browser/io_thread.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "components/policy/core/common/mock_policy_service.h"
|
| -#include "components/prefs/pref_registry_simple.h"
|
| -#include "components/prefs/pref_service.h"
|
| -#include "components/prefs/testing_pref_service.h"
|
| -#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
|
| -#include "components/proxy_config/proxy_config_pref_names.h"
|
| +#include "components/network_session_configurator/switches.h"
|
| #include "components/variations/variations_associated_data.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "net/cert_net/nss_ocsp.h"
|
| -#include "net/http/http_auth_preferences.h"
|
| -#include "net/http/http_auth_scheme.h"
|
| -#include "net/http/http_network_session.h"
|
| +#include "net/http/http_stream_factory.h"
|
| #include "net/quic/quic_protocol.h"
|
| -#include "net/quic/quic_stream_factory.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -#if defined(ENABLE_EXTENSIONS)
|
| -#include "chrome/browser/extensions/event_router_forwarder.h"
|
| -#endif
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -#include "chromeos/dbus/dbus_thread_manager.h"
|
| -#include "chromeos/network/network_handler.h"
|
| -#endif
|
| -
|
| namespace test {
|
|
|
| -using ::testing::ReturnRef;
|
| -
|
| -// Class used for accessing IOThread methods (friend of IOThread).
|
| -class IOThreadPeer {
|
| - public:
|
| - static net::HttpAuthPreferences* GetAuthPreferences(IOThread* io_thread) {
|
| - return io_thread->globals()->http_auth_preferences.get();
|
| - }
|
| -};
|
| -
|
| class NetworkSessionConfiguratorTest : public testing::Test {
|
| public:
|
| NetworkSessionConfiguratorTest()
|
| - : is_spdy_allowed_by_policy_(true), is_quic_allowed_by_policy_(true) {
|
| + : is_spdy_allowed_by_policy_(true),
|
| + is_quic_allowed_by_policy_(true),
|
| + quic_user_agent_id_("Chrome/52.0.2709.0 Linux x86_64") {
|
| field_trial_list_.reset(
|
| new base::FieldTrialList(new base::MockEntropyProvider()));
|
| variations::testing::ClearAllVariationParams();
|
| }
|
|
|
| void ParseFieldTrials() {
|
| - network_session_configurator_.ParseFieldTrials(
|
| - is_spdy_allowed_by_policy_, is_quic_allowed_by_policy_, ¶ms_);
|
| + network_session_configurator::ParseFieldTrials(
|
| + is_spdy_allowed_by_policy_, is_quic_allowed_by_policy_,
|
| + quic_user_agent_id_, ¶ms_);
|
| }
|
|
|
| void ParseFieldTrialsAndCommandLine() {
|
| - network_session_configurator_.ParseFieldTrialsAndCommandLine(
|
| - is_spdy_allowed_by_policy_, is_quic_allowed_by_policy_, ¶ms_);
|
| + network_session_configurator::ParseFieldTrialsAndCommandLine(
|
| + is_spdy_allowed_by_policy_, is_quic_allowed_by_policy_,
|
| + quic_user_agent_id_, ¶ms_);
|
| }
|
|
|
| bool is_spdy_allowed_by_policy_;
|
| bool is_quic_allowed_by_policy_;
|
| + std::string quic_user_agent_id_;
|
| std::unique_ptr<base::FieldTrialList> field_trial_list_;
|
| net::HttpNetworkSession::Params params_;
|
| -
|
| - private:
|
| - IOThread::NetworkSessionConfigurator network_session_configurator_;
|
| };
|
|
|
| TEST_F(NetworkSessionConfiguratorTest, Defaults) {
|
| ParseFieldTrialsAndCommandLine();
|
|
|
| EXPECT_FALSE(params_.ignore_certificate_errors);
|
| + EXPECT_EQ("Chrome/52.0.2709.0 Linux x86_64", params_.quic_user_agent_id);
|
| EXPECT_EQ(0u, params_.testing_fixed_http_port);
|
| EXPECT_EQ(0u, params_.testing_fixed_https_port);
|
| EXPECT_FALSE(params_.enable_spdy31);
|
| @@ -251,7 +218,6 @@ TEST_F(NetworkSessionConfiguratorTest, EnableQuicFromFieldTrialGroup) {
|
| EXPECT_FALSE(params_.enable_alternative_service_with_different_host);
|
| EXPECT_EQ(0, params_.quic_max_number_of_lossy_connections);
|
| EXPECT_EQ(1.0f, params_.quic_packet_loss_threshold);
|
| - EXPECT_FALSE(params_.quic_delay_tcp_race);
|
| EXPECT_FALSE(params_.quic_close_sessions_on_ip_change);
|
| EXPECT_EQ(net::kIdleConnectionTimeoutSeconds,
|
| params_.quic_idle_connection_timeout_seconds);
|
| @@ -265,6 +231,25 @@ TEST_F(NetworkSessionConfiguratorTest, EnableQuicFromFieldTrialGroup) {
|
| params_.quic_supported_versions);
|
| }
|
|
|
| +TEST_F(NetworkSessionConfiguratorTest, DisableQuicFromCommandLine) {
|
| + base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitch("disable-quic");
|
| +
|
| + ParseFieldTrialsAndCommandLine();
|
| +
|
| + EXPECT_FALSE(params_.enable_quic);
|
| +}
|
| +
|
| +TEST_F(NetworkSessionConfiguratorTest, EnableQuicForDataReductionProxy) {
|
| + base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
|
| + base::FieldTrialList::CreateFieldTrial("DataReductionProxyUseQuic",
|
| + "Enabled");
|
| +
|
| + ParseFieldTrialsAndCommandLine();
|
| +
|
| + EXPECT_TRUE(params_.enable_quic);
|
| +}
|
| +
|
| TEST_F(NetworkSessionConfiguratorTest,
|
| DisableQuicWhenConnectionTimesOutWithOpenStreamsFromFieldTrialParams) {
|
| std::map<std::string, std::string> field_trial_params;
|
| @@ -577,17 +562,6 @@ TEST_F(NetworkSessionConfiguratorTest, QuicReceiveBufferSize) {
|
| EXPECT_EQ(2097152, params_.quic_socket_receive_buffer_size);
|
| }
|
|
|
| -TEST_F(NetworkSessionConfiguratorTest, QuicDelayTcpConnection) {
|
| - std::map<std::string, std::string> field_trial_params;
|
| - field_trial_params["delay_tcp_race"] = "true";
|
| - variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params);
|
| - base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
|
| -
|
| - ParseFieldTrials();
|
| -
|
| - EXPECT_TRUE(params_.quic_delay_tcp_race);
|
| -}
|
| -
|
| TEST_F(NetworkSessionConfiguratorTest, QuicOriginsToForceQuicOn) {
|
| base::CommandLine::ForCurrentProcess()->AppendSwitch("enable-quic");
|
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| @@ -631,7 +605,7 @@ TEST_F(NetworkSessionConfiguratorTest, QuicWhitelistFromParams) {
|
| }
|
|
|
| TEST_F(NetworkSessionConfiguratorTest, QuicDisallowedByPolicy) {
|
| - base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableQuic);
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitch("enable-quic");
|
| is_quic_allowed_by_policy_ = false;
|
|
|
| ParseFieldTrialsAndCommandLine();
|
| @@ -647,189 +621,4 @@ TEST_F(NetworkSessionConfiguratorTest, TCPFastOpenHttpsEnabled) {
|
| EXPECT_TRUE(params_.enable_tcp_fast_open_for_ssl);
|
| }
|
|
|
| -class IOThreadTestWithIOThreadObject : public testing::Test {
|
| - public:
|
| - // These functions need to be public, since it is difficult to bind to
|
| - // protected functions in a test (the code would need to explicitly contain
|
| - // the name of the actual test class).
|
| - void CheckCnameLookup(bool expected) {
|
| - auto http_auth_preferences =
|
| - IOThreadPeer::GetAuthPreferences(io_thread_.get());
|
| - ASSERT_NE(nullptr, http_auth_preferences);
|
| - EXPECT_EQ(expected, http_auth_preferences->NegotiateDisableCnameLookup());
|
| - }
|
| -
|
| - void CheckNegotiateEnablePort(bool expected) {
|
| - auto http_auth_preferences =
|
| - IOThreadPeer::GetAuthPreferences(io_thread_.get());
|
| - ASSERT_NE(nullptr, http_auth_preferences);
|
| - EXPECT_EQ(expected, http_auth_preferences->NegotiateEnablePort());
|
| - }
|
| -
|
| -#if defined(OS_ANDROID)
|
| - void CheckAuthAndroidNegoitateAccountType(std::string expected) {
|
| - auto http_auth_preferences =
|
| - IOThreadPeer::GetAuthPreferences(io_thread_.get());
|
| - ASSERT_NE(nullptr, http_auth_preferences);
|
| - EXPECT_EQ(expected,
|
| - http_auth_preferences->AuthAndroidNegotiateAccountType());
|
| - }
|
| -#endif
|
| -
|
| - void CheckCanUseDefaultCredentials(bool expected, const GURL& url) {
|
| - auto http_auth_preferences =
|
| - IOThreadPeer::GetAuthPreferences(io_thread_.get());
|
| - EXPECT_EQ(expected, http_auth_preferences->CanUseDefaultCredentials(url));
|
| - }
|
| -
|
| - void CheckCanDelegate(bool expected, const GURL& url) {
|
| - auto http_auth_preferences =
|
| - IOThreadPeer::GetAuthPreferences(io_thread_.get());
|
| - EXPECT_EQ(expected, http_auth_preferences->CanDelegate(url));
|
| - }
|
| -
|
| - protected:
|
| - IOThreadTestWithIOThreadObject()
|
| - : thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD |
|
| - content::TestBrowserThreadBundle::DONT_START_THREADS) {
|
| -#if defined(ENABLE_EXTENSIONS)
|
| - event_router_forwarder_ = new extensions::EventRouterForwarder;
|
| -#endif
|
| - PrefRegistrySimple* pref_registry = pref_service_.registry();
|
| - IOThread::RegisterPrefs(pref_registry);
|
| - PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry);
|
| - ssl_config::SSLConfigServiceManager::RegisterPrefs(pref_registry);
|
| -
|
| - // Set up default function behaviour.
|
| - EXPECT_CALL(policy_service_,
|
| - GetPolicies(policy::PolicyNamespace(
|
| - policy::POLICY_DOMAIN_CHROME, std::string())))
|
| - .WillRepeatedly(ReturnRef(policy_map_));
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| - // Needed by IOThread constructor.
|
| - chromeos::DBusThreadManager::Initialize();
|
| - chromeos::NetworkHandler::Initialize();
|
| -#endif
|
| - // 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,
|
| -#if defined(ENABLE_EXTENSIONS)
|
| - event_router_forwarder_.get()
|
| -#else
|
| - nullptr
|
| -#endif
|
| - ));
|
| - // Now that IOThread object is registered starting the threads will
|
| - // call the IOThread::Init(). This sets up the environment needed for
|
| - // these tests.
|
| - thread_bundle_.Start();
|
| - }
|
| -
|
| - ~IOThreadTestWithIOThreadObject() override {
|
| -#if defined(USE_NSS_CERTS)
|
| - // Reset OCSPIOLoop thread checks, so that the test runner can run
|
| - // futher tests in the same process.
|
| - RunOnIOThreadBlocking(base::Bind(&net::ResetNSSHttpIOForTesting));
|
| -#endif
|
| -#if defined(OS_CHROMEOS)
|
| - chromeos::NetworkHandler::Shutdown();
|
| - chromeos::DBusThreadManager::Shutdown();
|
| -#endif
|
| - }
|
| - TestingPrefServiceSimple* pref_service() { return &pref_service_; }
|
| -
|
| - void RunOnIOThreadBlocking(const base::Closure& task) {
|
| - base::RunLoop run_loop;
|
| - content::BrowserThread::PostTaskAndReply(
|
| - content::BrowserThread::IO, FROM_HERE, task, run_loop.QuitClosure());
|
| - run_loop.Run();
|
| - }
|
| -
|
| - private:
|
| - base::ShadowingAtExitManager at_exit_manager_;
|
| - TestingPrefServiceSimple pref_service_;
|
| -#if defined(ENABLE_EXTENSIONS)
|
| - scoped_refptr<extensions::EventRouterForwarder> event_router_forwarder_;
|
| -#endif
|
| - policy::PolicyMap policy_map_;
|
| - policy::MockPolicyService policy_service_;
|
| - // The ordering of the declarations of |io_thread_object_| and
|
| - // |thread_bundle_| matters. An IOThread cannot be deleted until all of
|
| - // the globals have been reset to their initial state via CleanUp. As
|
| - // TestBrowserThreadBundle's destructor is responsible for calling
|
| - // CleanUp(), the IOThread must be declared before the bundle, so that
|
| - // the bundle is deleted first.
|
| - std::unique_ptr<IOThread> io_thread_;
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| -};
|
| -
|
| -TEST_F(IOThreadTestWithIOThreadObject, UpdateNegotiateDisableCnameLookup) {
|
| - // This test uses the kDisableAuthNegotiateCnameLookup to check that
|
| - // the HttpAuthPreferences are correctly initialized and running on the
|
| - // IO thread. The other preferences are tested by the HttpAuthPreferences
|
| - // unit tests.
|
| - pref_service()->SetBoolean(prefs::kDisableAuthNegotiateCnameLookup, false);
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCnameLookup,
|
| - base::Unretained(this), false));
|
| - pref_service()->SetBoolean(prefs::kDisableAuthNegotiateCnameLookup, true);
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCnameLookup,
|
| - base::Unretained(this), true));
|
| -}
|
| -
|
| -TEST_F(IOThreadTestWithIOThreadObject, UpdateEnableAuthNegotiatePort) {
|
| - pref_service()->SetBoolean(prefs::kEnableAuthNegotiatePort, false);
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckNegotiateEnablePort,
|
| - base::Unretained(this), false));
|
| - pref_service()->SetBoolean(prefs::kEnableAuthNegotiatePort, true);
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckNegotiateEnablePort,
|
| - base::Unretained(this), true));
|
| -}
|
| -
|
| -TEST_F(IOThreadTestWithIOThreadObject, UpdateServerWhitelist) {
|
| - GURL url("http://test.example.com");
|
| -
|
| - pref_service()->SetString(prefs::kAuthServerWhitelist, "xxx");
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCanUseDefaultCredentials,
|
| - base::Unretained(this), false, url));
|
| -
|
| - pref_service()->SetString(prefs::kAuthServerWhitelist, "*");
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCanUseDefaultCredentials,
|
| - base::Unretained(this), true, url));
|
| -}
|
| -
|
| -TEST_F(IOThreadTestWithIOThreadObject, UpdateDelegateWhitelist) {
|
| - GURL url("http://test.example.com");
|
| -
|
| - pref_service()->SetString(prefs::kAuthNegotiateDelegateWhitelist, "");
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCanDelegate,
|
| - base::Unretained(this), false, url));
|
| -
|
| - pref_service()->SetString(prefs::kAuthNegotiateDelegateWhitelist, "*");
|
| - RunOnIOThreadBlocking(
|
| - base::Bind(&IOThreadTestWithIOThreadObject::CheckCanDelegate,
|
| - base::Unretained(this), true, url));
|
| -}
|
| -
|
| -#if defined(OS_ANDROID)
|
| -// AuthAndroidNegotiateAccountType is only used on Android.
|
| -TEST_F(IOThreadTestWithIOThreadObject, UpdateAuthAndroidNegotiateAccountType) {
|
| - pref_service()->SetString(prefs::kAuthAndroidNegotiateAccountType, "acc1");
|
| - RunOnIOThreadBlocking(base::Bind(
|
| - &IOThreadTestWithIOThreadObject::CheckAuthAndroidNegoitateAccountType,
|
| - base::Unretained(this), "acc1"));
|
| - pref_service()->SetString(prefs::kAuthAndroidNegotiateAccountType, "acc2");
|
| - RunOnIOThreadBlocking(base::Bind(
|
| - &IOThreadTestWithIOThreadObject::CheckAuthAndroidNegoitateAccountType,
|
| - base::Unretained(this), "acc2"));
|
| -}
|
| -#endif
|
| -
|
| } // namespace test
|
|
|