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

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

Issue 1593015: HostResolver supports optional CNAME lookups. (Closed)
Patch Set: Addressing wtc's nits. Created 10 years, 8 months 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #include "net/base/mock_host_resolver.h" 5 #include "net/base/mock_host_resolver.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/platform_thread.h" 8 #include "base/platform_thread.h"
9 #include "base/ref_counted.h" 9 #include "base/ref_counted.h"
10 #include "googleurl/src/url_canon_ip.h" 10 #include "googleurl/src/url_canon_ip.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 AddressFamily address_family, 142 AddressFamily address_family,
143 const std::string& replacement) { 143 const std::string& replacement) {
144 DCHECK(!replacement.empty()); 144 DCHECK(!replacement.empty());
145 Rule rule(Rule::kResolverTypeSystem, host_pattern, 145 Rule rule(Rule::kResolverTypeSystem, host_pattern,
146 address_family, replacement, 0); 146 address_family, replacement, 0);
147 rules_.push_back(rule); 147 rules_.push_back(rule);
148 } 148 }
149 149
150 void RuleBasedHostResolverProc::AddIPv6Rule(const std::string& host_pattern, 150 void RuleBasedHostResolverProc::AddIPv6Rule(const std::string& host_pattern,
151 const std::string& ipv6_literal) { 151 const std::string& ipv6_literal) {
152 Rule rule(Rule::kResolverTypeIPV6Literal, host_pattern, 152 Rule rule(Rule::kResolverTypeIPV6Literal,
153 ADDRESS_FAMILY_UNSPECIFIED, ipv6_literal, 0); 153 host_pattern,
154 ADDRESS_FAMILY_UNSPECIFIED,
155 ipv6_literal,
156 0);
154 rules_.push_back(rule); 157 rules_.push_back(rule);
155 } 158 }
156 159
157 void RuleBasedHostResolverProc::AddRuleWithLatency( 160 void RuleBasedHostResolverProc::AddRuleWithLatency(
158 const std::string& host_pattern, 161 const std::string& host_pattern,
159 const std::string& replacement, 162 const std::string& replacement,
160 int latency_ms) { 163 int latency_ms) {
161 DCHECK(!replacement.empty()); 164 DCHECK(!replacement.empty());
162 Rule rule(Rule::kResolverTypeSystem, host_pattern, 165 Rule rule(Rule::kResolverTypeSystem, host_pattern,
163 ADDRESS_FAMILY_UNSPECIFIED, replacement, latency_ms); 166 ADDRESS_FAMILY_UNSPECIFIED, replacement, latency_ms);
164 rules_.push_back(rule); 167 rules_.push_back(rule);
165 } 168 }
166 169
167 void RuleBasedHostResolverProc::AllowDirectLookup( 170 void RuleBasedHostResolverProc::AllowDirectLookup(
168 const std::string& host_pattern) { 171 const std::string& host_pattern) {
169 Rule rule(Rule::kResolverTypeSystem, host_pattern, 172 Rule rule(Rule::kResolverTypeSystem, host_pattern,
170 ADDRESS_FAMILY_UNSPECIFIED, "", 0); 173 ADDRESS_FAMILY_UNSPECIFIED, "", 0);
171 rules_.push_back(rule); 174 rules_.push_back(rule);
172 } 175 }
173 176
174 void RuleBasedHostResolverProc::AddSimulatedFailure( 177 void RuleBasedHostResolverProc::AddSimulatedFailure(
175 const std::string& host_pattern) { 178 const std::string& host_pattern) {
176 Rule rule(Rule::kResolverTypeFail, host_pattern, 179 Rule rule(Rule::kResolverTypeFail, host_pattern,
177 ADDRESS_FAMILY_UNSPECIFIED, "", 0); 180 ADDRESS_FAMILY_UNSPECIFIED, "", 0);
178 rules_.push_back(rule); 181 rules_.push_back(rule);
179 } 182 }
180 183
181 int RuleBasedHostResolverProc::Resolve(const std::string& host, 184 int RuleBasedHostResolverProc::Resolve(const std::string& host,
182 AddressFamily address_family, 185 AddressFamily address_family,
186 HostResolverFlags host_resolver_flags,
183 AddressList* addrlist) { 187 AddressList* addrlist) {
184 RuleList::iterator r; 188 RuleList::iterator r;
185 for (r = rules_.begin(); r != rules_.end(); ++r) { 189 for (r = rules_.begin(); r != rules_.end(); ++r) {
186 bool matches_address_family = 190 bool matches_address_family =
187 r->address_family == ADDRESS_FAMILY_UNSPECIFIED || 191 r->address_family == ADDRESS_FAMILY_UNSPECIFIED ||
188 r->address_family == address_family; 192 r->address_family == address_family;
189 193
190 if (matches_address_family && MatchPatternASCII(host, r->host_pattern)) { 194 if (matches_address_family && MatchPatternASCII(host, r->host_pattern)) {
191 if (r->latency_ms != 0) 195 if (r->latency_ms != 0)
192 PlatformThread::Sleep(r->latency_ms); 196 PlatformThread::Sleep(r->latency_ms);
193 197
194 // Remap to a new host. 198 // Remap to a new host.
195 const std::string& effective_host = 199 const std::string& effective_host =
196 r->replacement.empty() ? host : r->replacement; 200 r->replacement.empty() ? host : r->replacement;
197 201
198 // Apply the resolving function to the remapped hostname. 202 // Apply the resolving function to the remapped hostname.
199 switch (r->resolver_type) { 203 switch (r->resolver_type) {
200 case Rule::kResolverTypeFail: 204 case Rule::kResolverTypeFail:
201 return ERR_NAME_NOT_RESOLVED; 205 return ERR_NAME_NOT_RESOLVED;
202 case Rule::kResolverTypeSystem: 206 case Rule::kResolverTypeSystem:
203 return SystemHostResolverProc(effective_host, 207 return SystemHostResolverProc(effective_host,
204 address_family, 208 address_family,
209 host_resolver_flags,
205 addrlist); 210 addrlist);
206 case Rule::kResolverTypeIPV6Literal: 211 case Rule::kResolverTypeIPV6Literal:
207 return ResolveIPV6LiteralUsingGURL(effective_host, addrlist); 212 return ResolveIPV6LiteralUsingGURL(effective_host, addrlist);
208 default: 213 default:
209 NOTREACHED(); 214 NOTREACHED();
210 return ERR_UNEXPECTED; 215 return ERR_UNEXPECTED;
211 } 216 }
212 } 217 }
213 } 218 }
214 return ResolveUsingPrevious(host, address_family, addrlist); 219 return ResolveUsingPrevious(host, address_family,
220 host_resolver_flags, addrlist);
215 } 221 }
216 222
217 //----------------------------------------------------------------------------- 223 //-----------------------------------------------------------------------------
218 224
219 ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc( 225 ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc(
220 HostResolverProc* proc) { 226 HostResolverProc* proc) {
221 Init(proc); 227 Init(proc);
222 } 228 }
223 229
224 ScopedDefaultHostResolverProc::~ScopedDefaultHostResolverProc() { 230 ScopedDefaultHostResolverProc::~ScopedDefaultHostResolverProc() {
225 HostResolverProc* old_proc = HostResolverProc::SetDefault(previous_proc_); 231 HostResolverProc* old_proc = HostResolverProc::SetDefault(previous_proc_);
226 // The lifetimes of multiple instances must be nested. 232 // The lifetimes of multiple instances must be nested.
227 CHECK_EQ(old_proc, current_proc_); 233 CHECK_EQ(old_proc, current_proc_);
228 } 234 }
229 235
230 void ScopedDefaultHostResolverProc::Init(HostResolverProc* proc) { 236 void ScopedDefaultHostResolverProc::Init(HostResolverProc* proc) {
231 current_proc_ = proc; 237 current_proc_ = proc;
232 previous_proc_ = HostResolverProc::SetDefault(current_proc_); 238 previous_proc_ = HostResolverProc::SetDefault(current_proc_);
233 current_proc_->SetLastProc(previous_proc_); 239 current_proc_->SetLastProc(previous_proc_);
234 } 240 }
235 241
236 } // namespace net 242 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698