diff options
author | Ben Murdoch <benm@google.com> | 2010-07-29 17:14:53 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-08-04 14:29:45 +0100 |
commit | c407dc5cd9bdc5668497f21b26b09d988ab439de (patch) | |
tree | 7eaf8707c0309516bdb042ad976feedaf72b0bb1 /net/socket/tcp_client_socket_pool.cc | |
parent | 0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff) | |
download | external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.zip external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.gz external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.bz2 |
Merge Chromium src@r53293
Change-Id: Ia79acf8670f385cee48c45b0a75371d8e950af34
Diffstat (limited to 'net/socket/tcp_client_socket_pool.cc')
-rw-r--r-- | net/socket/tcp_client_socket_pool.cc | 109 |
1 files changed, 72 insertions, 37 deletions
diff --git a/net/socket/tcp_client_socket_pool.cc b/net/socket/tcp_client_socket_pool.cc index 3ea6700..2caa3fb 100644 --- a/net/socket/tcp_client_socket_pool.cc +++ b/net/socket/tcp_client_socket_pool.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 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. @@ -9,7 +9,7 @@ #include "base/message_loop.h" #include "base/string_util.h" #include "base/time.h" -#include "net/base/load_log.h" +#include "net/base/net_log.h" #include "net/base/net_errors.h" #include "net/socket/client_socket_factory.h" #include "net/socket/client_socket_handle.h" @@ -20,6 +20,23 @@ using base::TimeDelta; namespace net { +TCPSocketParams::TCPSocketParams(const HostPortPair& host_port_pair, + RequestPriority priority, const GURL& referrer, + bool disable_resolver_cache) + : destination_(host_port_pair.host, host_port_pair.port) { + Initialize(priority, referrer, disable_resolver_cache); +} + +// TODO(willchan): Update all unittests so we don't need this. +TCPSocketParams::TCPSocketParams(const std::string& host, int port, + RequestPriority priority, const GURL& referrer, + bool disable_resolver_cache) + : destination_(host, port) { + Initialize(priority, referrer, disable_resolver_cache); +} + +TCPSocketParams::~TCPSocketParams() {} + // TCPConnectJobs will time out after this many seconds. Note this is the total // time, including both host resolution and TCP connect() times. // @@ -29,18 +46,19 @@ namespace net { // timeout. Even worse, the per-connect timeout threshold varies greatly // between systems (anywhere from 20 seconds to 190 seconds). // See comment #12 at http://crbug.com/23364 for specifics. -static const int kTCPConnectJobTimeoutInSeconds = 240; // 4 minutes. +static const int kTCPConnectJobTimeoutInSeconds = 240; // 4 minutes. TCPConnectJob::TCPConnectJob( const std::string& group_name, - const HostResolver::RequestInfo& resolve_info, + const scoped_refptr<TCPSocketParams>& params, base::TimeDelta timeout_duration, ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, Delegate* delegate, - LoadLog* load_log) - : ConnectJob(group_name, timeout_duration, delegate, load_log), - resolve_info_(resolve_info), + NetLog* net_log) + : ConnectJob(group_name, timeout_duration, delegate, + BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), + params_(params), client_socket_factory_(client_socket_factory), ALLOW_THIS_IN_INITIALIZER_LIST( callback_(this, @@ -112,7 +130,8 @@ int TCPConnectJob::DoLoop(int result) { int TCPConnectJob::DoResolveHost() { next_state_ = kStateResolveHostComplete; - return resolver_.Resolve(resolve_info_, &addresses_, &callback_, load_log()); + return resolver_.Resolve(params_->destination(), &addresses_, &callback_, + net_log()); } int TCPConnectJob::DoResolveHostComplete(int result) { @@ -123,9 +142,10 @@ int TCPConnectJob::DoResolveHostComplete(int result) { int TCPConnectJob::DoTCPConnect() { next_state_ = kStateTCPConnectComplete; - set_socket(client_socket_factory_->CreateTCPClientSocket(addresses_)); + set_socket(client_socket_factory_->CreateTCPClientSocket( + addresses_, net_log().net_log())); connect_start_time_ = base::TimeTicks::Now(); - return socket()->Connect(&callback_, load_log()); + return socket()->Connect(&callback_); } int TCPConnectJob::DoTCPConnectComplete(int result) { @@ -158,60 +178,75 @@ int TCPConnectJob::DoTCPConnectComplete(int result) { ConnectJob* TCPClientSocketPool::TCPConnectJobFactory::NewConnectJob( const std::string& group_name, const PoolBase::Request& request, - ConnectJob::Delegate* delegate, - LoadLog* load_log) const { - return new TCPConnectJob( - group_name, request.params(), - base::TimeDelta::FromSeconds(kTCPConnectJobTimeoutInSeconds), - client_socket_factory_, host_resolver_, delegate, load_log); + ConnectJob::Delegate* delegate) const { + return new TCPConnectJob(group_name, request.params(), ConnectionTimeout(), + client_socket_factory_, host_resolver_, delegate, + net_log_); +} + +base::TimeDelta + TCPClientSocketPool::TCPConnectJobFactory::ConnectionTimeout() const { + return base::TimeDelta::FromSeconds(kTCPConnectJobTimeoutInSeconds); } TCPClientSocketPool::TCPClientSocketPool( int max_sockets, int max_sockets_per_group, + const scoped_refptr<ClientSocketPoolHistograms>& histograms, HostResolver* host_resolver, ClientSocketFactory* client_socket_factory, - NetworkChangeNotifier* network_change_notifier) - : base_(max_sockets, max_sockets_per_group, - base::TimeDelta::FromSeconds(kUnusedIdleSocketTimeout), + NetLog* net_log) + : base_(max_sockets, max_sockets_per_group, histograms, + base::TimeDelta::FromSeconds( + ClientSocketPool::unused_idle_socket_timeout()), base::TimeDelta::FromSeconds(kUsedIdleSocketTimeout), - new TCPConnectJobFactory(client_socket_factory, host_resolver), - network_change_notifier) {} + new TCPConnectJobFactory(client_socket_factory, + host_resolver, net_log)) { + base_.EnableBackupJobs(); +} TCPClientSocketPool::~TCPClientSocketPool() {} int TCPClientSocketPool::RequestSocket( const std::string& group_name, - const void* resolve_info, + const void* params, RequestPriority priority, ClientSocketHandle* handle, CompletionCallback* callback, - LoadLog* load_log) { - const HostResolver::RequestInfo* casted_resolve_info = - static_cast<const HostResolver::RequestInfo*>(resolve_info); - - if (LoadLog::IsUnbounded(load_log)) { - LoadLog::AddString( - load_log, - StringPrintf("Requested TCP socket to: %s [port %d]", - casted_resolve_info->hostname().c_str(), - casted_resolve_info->port())); + const BoundNetLog& net_log) { + const scoped_refptr<TCPSocketParams>* casted_params = + static_cast<const scoped_refptr<TCPSocketParams>*>(params); + + if (net_log.HasListener()) { + // TODO(eroman): Split out the host and port parameters. + net_log.AddEvent( + NetLog::TYPE_TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKET, + new NetLogStringParameter( + "host_and_port", + StringPrintf("%s [port %d]", + casted_params->get()->destination().hostname().c_str(), + casted_params->get()->destination().port()))); } - return base_.RequestSocket( - group_name, *casted_resolve_info, priority, handle, callback, load_log); + return base_.RequestSocket(group_name, *casted_params, priority, handle, + callback, net_log); } void TCPClientSocketPool::CancelRequest( const std::string& group_name, - const ClientSocketHandle* handle) { + ClientSocketHandle* handle) { base_.CancelRequest(group_name, handle); } void TCPClientSocketPool::ReleaseSocket( const std::string& group_name, - ClientSocket* socket) { - base_.ReleaseSocket(group_name, socket); + ClientSocket* socket, + int id) { + base_.ReleaseSocket(group_name, socket, id); +} + +void TCPClientSocketPool::Flush() { + base_.Flush(); } void TCPClientSocketPool::CloseIdleSockets() { |