• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_BASE_MAPPED_HOST_RESOLVER_H_
6 #define NET_BASE_MAPPED_HOST_RESOLVER_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "base/memory/scoped_ptr.h"
12 #include "net/base/host_mapping_rules.h"
13 #include "net/base/host_resolver.h"
14 
15 namespace net {
16 
17 // This class wraps an existing HostResolver instance, but modifies the
18 // request before passing it off to |impl|. This is different from
19 // MockHostResolver which does the remapping at the HostResolverProc
20 // layer, so it is able to preserve the effectiveness of the cache.
21 class MappedHostResolver : public HostResolver {
22  public:
23   // Creates a MappedHostResolver that forwards all of its requests through
24   // |impl|.  It takes ownership of |impl|.
25   explicit MappedHostResolver(HostResolver* impl);
26   virtual ~MappedHostResolver();
27 
28   // Adds a rule to this mapper. The format of the rule can be one of:
29   //
30   //   "MAP" <hostname_pattern> <replacement_host> [":" <replacement_port>]
31   //   "EXCLUDE" <hostname_pattern>
32   //
33   // The <replacement_host> can be either a hostname, or an IP address literal.
34   //
35   // Returns true if the rule was successfully parsed and added.
AddRuleFromString(const std::string & rule_string)36   bool AddRuleFromString(const std::string& rule_string) {
37     return rules_.AddRuleFromString(rule_string);
38   }
39 
40   // Takes a comma separated list of rules, and assigns them to this resolver.
SetRulesFromString(const std::string & rules_string)41   void SetRulesFromString(const std::string& rules_string) {
42     rules_.SetRulesFromString(rules_string);
43   }
44 
45   // HostResolver methods:
46   virtual int Resolve(const RequestInfo& info,
47                       AddressList* addresses,
48                       CompletionCallback* callback,
49                       RequestHandle* out_req,
50                       const BoundNetLog& net_log);
51   virtual void CancelRequest(RequestHandle req);
52   virtual void AddObserver(Observer* observer);
53   virtual void RemoveObserver(Observer* observer);
54   virtual HostResolverImpl* GetAsHostResolverImpl();
55 
56  private:
57   scoped_ptr<HostResolver> impl_;
58 
59   HostMappingRules rules_;
60 };
61 
62 }  // namespace net
63 
64 #endif  // NET_BASE_MAPPED_HOST_RESOLVER_H_
65