summaryrefslogtreecommitdiffstats
path: root/net/socket/tcp_client_socket_pool.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-07-29 17:14:53 +0100
committerBen Murdoch <benm@google.com>2010-08-04 14:29:45 +0100
commitc407dc5cd9bdc5668497f21b26b09d988ab439de (patch)
tree7eaf8707c0309516bdb042ad976feedaf72b0bb1 /net/socket/tcp_client_socket_pool.cc
parent0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff)
downloadexternal_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.cc109
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() {