Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(547)

Side by Side Diff: net/base/mock_host_resolver.h

Issue 368001: Second patch in making destructors of refcounted objects private. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_BASE_MOCK_HOST_RESOLVER_H_ 5 #ifndef NET_BASE_MOCK_HOST_RESOLVER_H_
6 #define NET_BASE_MOCK_HOST_RESOLVER_H_ 6 #define NET_BASE_MOCK_HOST_RESOLVER_H_
7 7
8 #include <list> 8 #include <list>
9 9
10 #include "base/waitable_event.h" 10 #include "base/waitable_event.h"
(...skipping 20 matching lines...) Expand all
31 // replace the given hostname. So, the following is also supported: 31 // replace the given hostname. So, the following is also supported:
32 // 32 //
33 // host_mapper->AddRule("*.com", "127.0.0.1"); 33 // host_mapper->AddRule("*.com", "127.0.0.1");
34 // 34 //
35 // Replacement doesn't have to be string representing an IP address. It can 35 // Replacement doesn't have to be string representing an IP address. It can
36 // re-map one hostname to another as well. 36 // re-map one hostname to another as well.
37 37
38 // Base class shared by MockHostResolver and MockCachingHostResolver. 38 // Base class shared by MockHostResolver and MockCachingHostResolver.
39 class MockHostResolverBase : public HostResolver { 39 class MockHostResolverBase : public HostResolver {
40 public: 40 public:
41 virtual ~MockHostResolverBase() {}
42
43 // HostResolver methods: 41 // HostResolver methods:
44 virtual int Resolve(const RequestInfo& info, 42 virtual int Resolve(const RequestInfo& info,
45 AddressList* addresses, 43 AddressList* addresses,
46 CompletionCallback* callback, 44 CompletionCallback* callback,
47 RequestHandle* out_req, 45 RequestHandle* out_req,
48 LoadLog* load_log); 46 LoadLog* load_log);
49 virtual void CancelRequest(RequestHandle req); 47 virtual void CancelRequest(RequestHandle req);
50 virtual void AddObserver(Observer* observer); 48 virtual void AddObserver(Observer* observer);
51 virtual void RemoveObserver(Observer* observer); 49 virtual void RemoveObserver(Observer* observer);
52 virtual HostCache* GetHostCache(); 50 virtual HostCache* GetHostCache();
53 // TODO(eroman): temp hack for http://crbug.com/18373 51 // TODO(eroman): temp hack for http://crbug.com/18373
54 virtual void Shutdown(); 52 virtual void Shutdown();
55 53
56 RuleBasedHostResolverProc* rules() { return rules_; } 54 RuleBasedHostResolverProc* rules() { return rules_; }
57 55
58 // Controls whether resolutions complete synchronously or asynchronously. 56 // Controls whether resolutions complete synchronously or asynchronously.
59 void set_synchronous_mode(bool is_synchronous) { 57 void set_synchronous_mode(bool is_synchronous) {
60 synchronous_mode_ = is_synchronous; 58 synchronous_mode_ = is_synchronous;
61 } 59 }
62 60
63 // Resets the mock. 61 // Resets the mock.
64 void Reset(HostResolverProc* interceptor); 62 void Reset(HostResolverProc* interceptor);
65 63
66 protected: 64 protected:
67 MockHostResolverBase(bool use_caching); 65 MockHostResolverBase(bool use_caching);
66 virtual ~MockHostResolverBase() {}
68 67
69 private:
70 scoped_refptr<HostResolverImpl> impl_; 68 scoped_refptr<HostResolverImpl> impl_;
71 scoped_refptr<RuleBasedHostResolverProc> rules_; 69 scoped_refptr<RuleBasedHostResolverProc> rules_;
72 bool synchronous_mode_; 70 bool synchronous_mode_;
73 bool use_caching_; 71 bool use_caching_;
74 }; 72 };
75 73
76 class MockHostResolver : public MockHostResolverBase { 74 class MockHostResolver : public MockHostResolverBase {
77 public: 75 public:
78 MockHostResolver() : MockHostResolverBase(false /*use_caching*/) {} 76 MockHostResolver() : MockHostResolverBase(false /*use_caching*/) {}
77
78 private:
79 virtual ~MockHostResolver() {}
79 }; 80 };
80 81
81 // Same as MockHostResolver, except internally it uses a host-cache. 82 // Same as MockHostResolver, except internally it uses a host-cache.
82 // 83 //
83 // Note that tests are advised to use MockHostResolver instead, since it is 84 // Note that tests are advised to use MockHostResolver instead, since it is
84 // more predictable. (MockHostResolver also can be put into synchronous 85 // more predictable. (MockHostResolver also can be put into synchronous
85 // operation mode in case that is what you needed from the caching version). 86 // operation mode in case that is what you needed from the caching version).
86 class MockCachingHostResolver : public MockHostResolverBase { 87 class MockCachingHostResolver : public MockHostResolverBase {
87 public: 88 public:
88 MockCachingHostResolver() : MockHostResolverBase(true /*use_caching*/) {} 89 MockCachingHostResolver() : MockHostResolverBase(true /*use_caching*/) {}
90
91 private:
92 ~MockCachingHostResolver() {}
89 }; 93 };
90 94
91 // RuleBasedHostResolverProc applies a set of rules to map a host string to 95 // RuleBasedHostResolverProc applies a set of rules to map a host string to
92 // a replacement host string. It then uses the system host resolver to return 96 // a replacement host string. It then uses the system host resolver to return
93 // a socket address. Generally the replacement should be an IPv4 literal so 97 // a socket address. Generally the replacement should be an IPv4 literal so
94 // there is no network dependency. 98 // there is no network dependency.
95 class RuleBasedHostResolverProc : public HostResolverProc { 99 class RuleBasedHostResolverProc : public HostResolverProc {
96 public: 100 public:
97 explicit RuleBasedHostResolverProc(HostResolverProc* previous); 101 explicit RuleBasedHostResolverProc(HostResolverProc* previous);
98 ~RuleBasedHostResolverProc();
99 102
100 // Any hostname matching the given pattern will be replaced with the given 103 // Any hostname matching the given pattern will be replaced with the given
101 // replacement value. Usually, replacement should be an IP address literal. 104 // replacement value. Usually, replacement should be an IP address literal.
102 void AddRule(const std::string& host_pattern, 105 void AddRule(const std::string& host_pattern,
103 const std::string& replacement); 106 const std::string& replacement);
104 107
105 // Same as AddRule(), but further restricts to |address_family|. 108 // Same as AddRule(), but further restricts to |address_family|.
106 void AddRuleForAddressFamily(const std::string& host_pattern, 109 void AddRuleForAddressFamily(const std::string& host_pattern,
107 AddressFamily address_family, 110 AddressFamily address_family,
108 const std::string& replacement); 111 const std::string& replacement);
(...skipping 15 matching lines...) Expand all
124 127
125 // Simulate a lookup failure for |host| (it also can be a pattern). 128 // Simulate a lookup failure for |host| (it also can be a pattern).
126 void AddSimulatedFailure(const std::string& host); 129 void AddSimulatedFailure(const std::string& host);
127 130
128 // HostResolverProc methods: 131 // HostResolverProc methods:
129 virtual int Resolve(const std::string& host, 132 virtual int Resolve(const std::string& host,
130 AddressFamily address_family, 133 AddressFamily address_family,
131 AddressList* addrlist); 134 AddressList* addrlist);
132 135
133 private: 136 private:
137 ~RuleBasedHostResolverProc();
138
134 struct Rule; 139 struct Rule;
135 typedef std::list<Rule> RuleList; 140 typedef std::list<Rule> RuleList;
136 141
137 RuleList rules_; 142 RuleList rules_;
138 }; 143 };
139 144
140 // Using WaitingHostResolverProc you can simulate very long lookups. 145 // Using WaitingHostResolverProc you can simulate very long lookups.
141 class WaitingHostResolverProc : public HostResolverProc { 146 class WaitingHostResolverProc : public HostResolverProc {
142 public: 147 public:
143 explicit WaitingHostResolverProc(HostResolverProc* previous) 148 explicit WaitingHostResolverProc(HostResolverProc* previous)
144 : HostResolverProc(previous), event_(false, false) {} 149 : HostResolverProc(previous), event_(false, false) {}
145 150
146 void Signal() { 151 void Signal() {
147 event_.Signal(); 152 event_.Signal();
148 } 153 }
149 154
150 // HostResolverProc methods: 155 // HostResolverProc methods:
151 virtual int Resolve(const std::string& host, 156 virtual int Resolve(const std::string& host,
152 AddressFamily address_family, 157 AddressFamily address_family,
153 AddressList* addrlist) { 158 AddressList* addrlist) {
154 event_.Wait(); 159 event_.Wait();
155 return ResolveUsingPrevious(host, address_family, addrlist); 160 return ResolveUsingPrevious(host, address_family, addrlist);
156 } 161 }
157 162
163 private:
164 ~WaitingHostResolverProc() {}
165
158 base::WaitableEvent event_; 166 base::WaitableEvent event_;
159 }; 167 };
160 168
161 // This class sets the HostResolverProc for a particular scope. If there are 169 // This class sets the HostResolverProc for a particular scope. If there are
162 // multiple ScopedDefaultHostResolverProc in existence, then the last one 170 // multiple ScopedDefaultHostResolverProc in existence, then the last one
163 // allocated will be used. However, if it does not provide a matching rule, 171 // allocated will be used. However, if it does not provide a matching rule,
164 // then it should delegate to the previously set HostResolverProc. 172 // then it should delegate to the previously set HostResolverProc.
165 // 173 //
166 // NOTE: Only use this as a catch-all safety net. Individual tests should use 174 // NOTE: Only use this as a catch-all safety net. Individual tests should use
167 // MockHostResolver. 175 // MockHostResolver.
168 class ScopedDefaultHostResolverProc { 176 class ScopedDefaultHostResolverProc {
169 public: 177 public:
170 ScopedDefaultHostResolverProc() {} 178 ScopedDefaultHostResolverProc() {}
171 explicit ScopedDefaultHostResolverProc(HostResolverProc* proc); 179 explicit ScopedDefaultHostResolverProc(HostResolverProc* proc);
172 180
173 ~ScopedDefaultHostResolverProc(); 181 ~ScopedDefaultHostResolverProc();
174 182
175 void Init(HostResolverProc* proc); 183 void Init(HostResolverProc* proc);
176 184
177 private: 185 private:
178 scoped_refptr<HostResolverProc> current_proc_; 186 scoped_refptr<HostResolverProc> current_proc_;
179 scoped_refptr<HostResolverProc> previous_proc_; 187 scoped_refptr<HostResolverProc> previous_proc_;
180 }; 188 };
181 189
182 } // namespace net 190 } // namespace net
183 191
184 #endif // NET_BASE_MOCK_HOST_RESOLVER_H_ 192 #endif // NET_BASE_MOCK_HOST_RESOLVER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698