summaryrefslogtreecommitdiffstats
path: root/net/ftp
diff options
context:
space:
mode:
authorericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-12 00:49:38 +0000
committerericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-12 00:49:38 +0000
commit8a00f00ab5d68ffcc998fd04d2ca343af7cdf190 (patch)
treefd464ba49db4271c76c1cf8f769a22120ad631af /net/ftp
parent77ae132c1bfdd986228b6f1c0d8c63baa441afdf (diff)
downloadchromium_src-8a00f00ab5d68ffcc998fd04d2ca343af7cdf190.zip
chromium_src-8a00f00ab5d68ffcc998fd04d2ca343af7cdf190.tar.gz
chromium_src-8a00f00ab5d68ffcc998fd04d2ca343af7cdf190.tar.bz2
* Avoid doing concurrent DNS resolves of the same hostname in HostResolver.
* Add a 1 minute cache for host resolves. * Refactor HostResolver to handle multiple requests. * Make HostResolver a dependency of URLRequestContext. operate the HostResolver in async mode for proxy resolver (bridging to IO thread). TEST=unittests BUG=13163 Review URL: http://codereview.chromium.org/118100 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18236 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/ftp')
-rw-r--r--net/ftp/ftp_network_layer.cc11
-rw-r--r--net/ftp/ftp_network_layer.h5
-rw-r--r--net/ftp/ftp_network_session.h7
-rw-r--r--net/ftp/ftp_network_transaction.cc1
-rw-r--r--net/ftp/ftp_network_transaction.h3
5 files changed, 18 insertions, 9 deletions
diff --git a/net/ftp/ftp_network_layer.cc b/net/ftp/ftp_network_layer.cc
index e05b67f..fa0e87c 100644
--- a/net/ftp/ftp_network_layer.cc
+++ b/net/ftp/ftp_network_layer.cc
@@ -10,17 +10,18 @@
namespace net {
-FtpNetworkLayer::FtpNetworkLayer()
- : suspended_(false) {
- session_ = new FtpNetworkSession();
+FtpNetworkLayer::FtpNetworkLayer(HostResolver* host_resolver)
+ : session_(new FtpNetworkSession(host_resolver)),
+ suspended_(false) {
}
FtpNetworkLayer::~FtpNetworkLayer() {
}
// static
-FtpTransactionFactory* FtpNetworkLayer::CreateFactory() {
- return new FtpNetworkLayer();
+FtpTransactionFactory* FtpNetworkLayer::CreateFactory(
+ HostResolver* host_resolver) {
+ return new FtpNetworkLayer(host_resolver);
}
FtpTransaction* FtpNetworkLayer::CreateTransaction() {
diff --git a/net/ftp/ftp_network_layer.h b/net/ftp/ftp_network_layer.h
index 71bd3b9..2d37eae 100644
--- a/net/ftp/ftp_network_layer.h
+++ b/net/ftp/ftp_network_layer.h
@@ -12,13 +12,14 @@ namespace net {
class FtpNetworkSession;
class FtpAuthCache;
+class HostResolver;
class FtpNetworkLayer : public FtpTransactionFactory {
public:
- FtpNetworkLayer();
+ explicit FtpNetworkLayer(HostResolver* host_resolver);
~FtpNetworkLayer();
- static FtpTransactionFactory* CreateFactory();
+ static FtpTransactionFactory* CreateFactory(HostResolver* host_resolver);
// FtpTransactionFactory methods:
virtual FtpTransaction* CreateTransaction();
diff --git a/net/ftp/ftp_network_session.h b/net/ftp/ftp_network_session.h
index 13ab216..29c34d2 100644
--- a/net/ftp/ftp_network_session.h
+++ b/net/ftp/ftp_network_session.h
@@ -10,14 +10,19 @@
namespace net {
+class HostResolver;
+
// This class holds session objects used by FtpNetworkTransaction objects.
class FtpNetworkSession : public base::RefCounted<FtpNetworkSession> {
public:
- FtpNetworkSession() {}
+ explicit FtpNetworkSession(HostResolver* host_resolver)
+ : host_resolver_(host_resolver) {}
+ HostResolver* host_resolver() { return host_resolver_; }
FtpAuthCache* auth_cache() { return &auth_cache_; }
private:
+ HostResolver* host_resolver_;
FtpAuthCache auth_cache_;
};
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc
index ae6e4fc..87f9217 100644
--- a/net/ftp/ftp_network_transaction.cc
+++ b/net/ftp/ftp_network_transaction.cc
@@ -34,6 +34,7 @@ FtpNetworkTransaction::FtpNetworkTransaction(
user_callback_(NULL),
session_(session),
request_(NULL),
+ resolver_(session->host_resolver()),
read_ctrl_buf_size_(kCtrlBufLen),
response_message_buf_len_(0),
read_data_buf_len_(0),
diff --git a/net/ftp/ftp_network_transaction.h b/net/ftp/ftp_network_transaction.h
index 0bb67e5..53f0b29 100644
--- a/net/ftp/ftp_network_transaction.h
+++ b/net/ftp/ftp_network_transaction.h
@@ -142,7 +142,8 @@ class FtpNetworkTransaction : public FtpTransaction {
const FtpRequestInfo* request_;
FtpResponseInfo response_;
- HostResolver resolver_;
+ // Cancels the outstanding request on destruction.
+ SingleRequestHostResolver resolver_;
AddressList addresses_;
// User buffer and length passed to the Read method.