1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_DNS_DNS_CLIENT_H_
6#define NET_DNS_DNS_CLIENT_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "net/base/net_export.h"
10
11namespace net {
12
13class AddressSorter;
14struct DnsConfig;
15class DnsTransactionFactory;
16class NetLog;
17
18// Convenience wrapper which allows easy injection of DnsTransaction into
19// HostResolverImpl. Pointers returned by the Get* methods are only guaranteed
20// to remain valid until next time SetConfig is called.
21class NET_EXPORT DnsClient {
22 public:
23  virtual ~DnsClient() {}
24
25  // Destroys the current DnsTransactionFactory and creates a new one
26  // according to |config|, unless it is invalid or has |unhandled_options|.
27  virtual void SetConfig(const DnsConfig& config) = 0;
28
29  // Returns NULL if the current config is not valid.
30  virtual const DnsConfig* GetConfig() const = 0;
31
32  // Returns NULL if the current config is not valid.
33  virtual DnsTransactionFactory* GetTransactionFactory() = 0;
34
35  // Returns NULL if the current config is not valid.
36  virtual AddressSorter* GetAddressSorter() = 0;
37
38  // Creates default client.
39  static scoped_ptr<DnsClient> CreateClient(NetLog* net_log);
40};
41
42}  // namespace net
43
44#endif  // NET_DNS_DNS_CLIENT_H_
45
46