summaryrefslogtreecommitdiffstats
path: root/net/base/host_resolver.cc
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-29 11:32:26 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-29 11:32:26 +0000
commit471822cad3c7f41002c28fd9a32243abe1bbb2a2 (patch)
tree68e4dc44d8d31cce4aaf683ef116db7743daa460 /net/base/host_resolver.cc
parent1aaf6e1ff14d0f627986f26ec68e87a8ea4e98fc (diff)
downloadchromium_src-471822cad3c7f41002c28fd9a32243abe1bbb2a2.zip
chromium_src-471822cad3c7f41002c28fd9a32243abe1bbb2a2.tar.gz
chromium_src-471822cad3c7f41002c28fd9a32243abe1bbb2a2.tar.bz2
Add more unit tests for net/base/host_resolver.
BUG=6661 Review URL: http://codereview.chromium.org/18775 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8872 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/host_resolver.cc')
-rw-r--r--net/base/host_resolver.cc23
1 files changed, 17 insertions, 6 deletions
diff --git a/net/base/host_resolver.cc b/net/base/host_resolver.cc
index bf5d3c2..d5d97e7 100644
--- a/net/base/host_resolver.cc
+++ b/net/base/host_resolver.cc
@@ -28,6 +28,10 @@ namespace net {
static HostMapper* host_mapper;
+std::string HostMapper::MapUsingPrevious(const std::string& host) {
+ return previous_mapper_.get() ? previous_mapper_->Map(host) : host;
+}
+
HostMapper* SetHostMapper(HostMapper* value) {
std::swap(host_mapper, value);
return value;
@@ -46,11 +50,11 @@ static int HostResolverProc(
return err ? ERR_NAME_NOT_RESOLVED : OK;
}
-static int ResolveAddrInfo(
- const std::string& host, const std::string& port, struct addrinfo** out) {
+static int ResolveAddrInfo(HostMapper* mapper, const std::string& host,
+ const std::string& port, struct addrinfo** out) {
int rv;
- if (host_mapper) {
- rv = HostResolverProc(host_mapper->Map(host), port, out);
+ if (mapper) {
+ rv = HostResolverProc(mapper->Map(host), port, out);
} else {
rv = HostResolverProc(host, port, out);
}
@@ -73,6 +77,7 @@ class HostResolver::Request :
addresses_(addresses),
callback_(callback),
origin_loop_(MessageLoop::current()),
+ host_mapper_(host_mapper),
error_(OK),
results_(NULL) {
}
@@ -84,7 +89,7 @@ class HostResolver::Request :
void DoLookup() {
// Running on the worker thread
- error_ = ResolveAddrInfo(host_, port_, &results_);
+ error_ = ResolveAddrInfo(host_mapper_, host_, port_, &results_);
Task* reply = NewRunnableMethod(this, &Request::DoCallback);
@@ -144,6 +149,12 @@ class HostResolver::Request :
Lock origin_loop_lock_;
MessageLoop* origin_loop_;
+ // Hold an owning reference to the host mapper that we are going to use.
+ // This may not be the current host mapper by the time we call
+ // ResolveAddrInfo, but that's OK... we'll use it anyways, and the owning
+ // reference ensures that it remains valid until we are done.
+ scoped_refptr<HostMapper> host_mapper_;
+
// Assigned on the worker thread, read on the origin thread.
int error_;
struct addrinfo* results_;
@@ -172,7 +183,7 @@ int HostResolver::Resolve(const std::string& hostname, int port,
// Do a synchronous resolution.
if (!callback) {
struct addrinfo* results;
- int rv = ResolveAddrInfo(hostname, port_str, &results);
+ int rv = ResolveAddrInfo(host_mapper, hostname, port_str, &results);
if (rv == OK)
addresses->Adopt(results);
return rv;