From 2884a4619edeac1787e2b1d1b57e913f7e442cae Mon Sep 17 00:00:00 2001 From: "ericroman@google.com" <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> Date: Mon, 15 Jun 2009 05:08:42 +0000 Subject: * Move the global "DnsResolutionObserver" code depended on by DNS prefetcher, into HostResolver. This has the advantage that consumers of DNS no longer have to remember to call "DidFinishDnsResolutionWithStatus()" followed by "DidStartDnsResolution()" in order for the prefetcher to observe the resolution. Instead it just happens automatically, and subscribers register via HostResolver::AddObserver() on a particular resolver instance. * To accomodate the prefetcher's observer, HostResolver::Resolve() needs an additional "referrer" parameter. This is slightly awkward since "referrer" has nothing to do with the actual resolve request. To simplify plumbing through this and other optional parameters, Resolve() was changed to take a "RequestInfo&" parameter in place of say {hostname, port, flags}. * Added an option to HostResolver::Resolve() for disallowing cached responses (RequestInfo::allow_cached_response). This will be used when you refresh a page, to bypass the host cache. The code to do this has been added to HttpNetworkTransaction, but is commented out pending an appropriate unit-test to verify it. BUG=14056 Review URL: http://codereview.chromium.org/125107 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18371 0039d316-1c4b-4281-b951-d872f2087c98 --- net/base/tcp_client_socket_pool.cc | 41 +++++++++++++------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) (limited to 'net/base/tcp_client_socket_pool.cc') diff --git a/net/base/tcp_client_socket_pool.cc b/net/base/tcp_client_socket_pool.cc index 4a52c10..c5e961e 100644 --- a/net/base/tcp_client_socket_pool.cc +++ b/net/base/tcp_client_socket_pool.cc @@ -58,11 +58,9 @@ TCPClientSocketPool::ConnectingSocket::~ConnectingSocket() { } int TCPClientSocketPool::ConnectingSocket::Connect( - const std::string& host, - int port) { + const HostResolver::RequestInfo& resolve_info) { CHECK(!canceled_); - DidStartDnsResolution(host, this); - int rv = resolver_.Resolve(host, port, &addresses_, &callback_); + int rv = resolver_.Resolve(resolve_info, &addresses_, &callback_); if (rv != ERR_IO_PENDING) rv = OnIOCompleteInternal(rv, true /* synchronous */); return rv; @@ -186,26 +184,20 @@ void TCPClientSocketPool::InsertRequestIntoQueue( pending_requests->insert(it, r); } -int TCPClientSocketPool::RequestSocket(const std::string& group_name, - const std::string& host, - int port, - int priority, - ClientSocketHandle* handle, - CompletionCallback* callback) { - DCHECK(!host.empty()); +int TCPClientSocketPool::RequestSocket( + const std::string& group_name, + const HostResolver::RequestInfo& resolve_info, + int priority, + ClientSocketHandle* handle, + CompletionCallback* callback) { + DCHECK(!resolve_info.hostname().empty()); DCHECK_GE(priority, 0); Group& group = group_map_[group_name]; // Can we make another active socket now? if (group.active_socket_count == max_sockets_per_group_) { - Request r; - r.handle = handle; CHECK(callback); - r.callback = callback; - r.priority = priority; - r.host = host; - r.port = port; - r.load_state = LOAD_STATE_IDLE; + Request r(handle, callback, priority, resolve_info, LOAD_STATE_IDLE); InsertRequestIntoQueue(r, &group.pending_requests); return ERR_IO_PENDING; } @@ -234,20 +226,15 @@ int TCPClientSocketPool::RequestSocket(const std::string& group_name, if (ContainsKey(connecting_socket_map_, handle)) connecting_socket_map_[handle]->Cancel(); - Request r; - r.handle = handle; CHECK(callback); - r.callback = callback; - r.priority = priority; - r.host = host; - r.port = port; - r.load_state = LOAD_STATE_RESOLVING_HOST; + Request r(handle, callback, priority, resolve_info, + LOAD_STATE_RESOLVING_HOST); group_map_[group_name].connecting_requests[handle] = r; // connecting_socket will delete itself. ConnectingSocket* connecting_socket = new ConnectingSocket(group_name, handle, client_socket_factory_, this); - int rv = connecting_socket->Connect(host, port); + int rv = connecting_socket->Connect(resolve_info); return rv; } @@ -419,7 +406,7 @@ void TCPClientSocketPool::DoReleaseSocket(const std::string& group_name, group.pending_requests.pop_front(); int rv = RequestSocket( - group_name, r.host, r.port, r.priority, r.handle, r.callback); + group_name, r.resolve_info, r.priority, r.handle, r.callback); if (rv != ERR_IO_PENDING) r.callback->Run(rv); return; -- cgit v1.1