summaryrefslogtreecommitdiffstats
path: root/net/dns/dns_client.cc
diff options
context:
space:
mode:
authorszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-14 19:09:27 +0000
committerszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-14 19:09:27 +0000
commit78eac2a2edb56ad0bd2714ab62154e5848f0d91d (patch)
tree3ccdb2c487753f6d279a26a1031ef5749f6a9fc1 /net/dns/dns_client.cc
parentecded430294087b94b1d5fc2da55a8dd20aee19b (diff)
downloadchromium_src-78eac2a2edb56ad0bd2714ab62154e5848f0d91d.zip
chromium_src-78eac2a2edb56ad0bd2714ab62154e5848f0d91d.tar.gz
chromium_src-78eac2a2edb56ad0bd2714ab62154e5848f0d91d.tar.bz2
[net/dns] Serve requests from HOSTS file if possible.
If the DnsConfig is available, we can serve the requests synchronously in Resolve. However, we might not receive the DnsConfig until the Job is placed in the queue. In that case, we attempt to serve the jobs once DnsConfig is available. BUG=114826 TEST=./net_unittests --gtest_filter=HostResolverImplTest.ServeFromHosts Original review: https://chromiumcodereview.appspot.com/9667025/ Review URL: http://codereview.chromium.org/9705017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126697 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns/dns_client.cc')
-rw-r--r--net/dns/dns_client.cc58
1 files changed, 58 insertions, 0 deletions
diff --git a/net/dns/dns_client.cc b/net/dns/dns_client.cc
new file mode 100644
index 0000000..5381452
--- /dev/null
+++ b/net/dns/dns_client.cc
@@ -0,0 +1,58 @@
+// Copyright (c) 2012 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.
+
+#include "net/dns/dns_client.h"
+
+#include "base/bind.h"
+#include "base/rand_util.h"
+#include "net/base/net_log.h"
+#include "net/dns/dns_config_service.h"
+#include "net/dns/dns_session.h"
+#include "net/dns/dns_transaction.h"
+#include "net/socket/client_socket_factory.h"
+
+namespace net {
+
+namespace {
+
+class DnsClientImpl : public DnsClient {
+ public:
+ explicit DnsClientImpl(NetLog* net_log) : net_log_(net_log) {}
+
+ virtual void SetConfig(const DnsConfig& config) OVERRIDE {
+ factory_.reset();
+ session_.release();
+ if (config.IsValid()) {
+ session_ = new DnsSession(config,
+ ClientSocketFactory::GetDefaultFactory(),
+ base::Bind(&base::RandInt),
+ net_log_);
+ factory_ = DnsTransactionFactory::CreateFactory(session_);
+ }
+ }
+
+ virtual const DnsConfig* GetConfig() const OVERRIDE {
+ return session_.get() ? &session_->config() : NULL;
+ }
+
+ virtual DnsTransactionFactory* GetTransactionFactory() OVERRIDE {
+ return session_.get() ? factory_.get() : NULL;
+ }
+
+ private:
+ scoped_refptr<DnsSession> session_;
+ scoped_ptr<DnsTransactionFactory> factory_;
+
+ NetLog* net_log_;
+};
+
+} // namespace
+
+// static
+scoped_ptr<DnsClient> DnsClient::CreateClient(NetLog* net_log) {
+ return scoped_ptr<DnsClient>(new DnsClientImpl(net_log));
+}
+
+} // namespace net
+