OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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_HOST_RESOLVER_IMPL_H_ | 5 #ifndef NET_BASE_HOST_RESOLVER_IMPL_H_ |
6 #define NET_BASE_HOST_RESOLVER_IMPL_H_ | 6 #define NET_BASE_HOST_RESOLVER_IMPL_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 // If |cache| is NULL, then no caching is used. Otherwise we take | 78 // If |cache| is NULL, then no caching is used. Otherwise we take |
79 // ownership of the |cache| pointer, and will free it during destructor. | 79 // ownership of the |cache| pointer, and will free it during destructor. |
80 // | 80 // |
81 // |resolver_proc| is used to perform the actual resolves; it must be | 81 // |resolver_proc| is used to perform the actual resolves; it must be |
82 // thread-safe since it is run from multiple worker threads. If | 82 // thread-safe since it is run from multiple worker threads. If |
83 // |resolver_proc| is NULL then the default host resolver procedure is | 83 // |resolver_proc| is NULL then the default host resolver procedure is |
84 // used (which is SystemHostResolverProc except if overridden). | 84 // used (which is SystemHostResolverProc except if overridden). |
85 // |max_jobs| specifies the maximum number of threads that the host resolver | 85 // |max_jobs| specifies the maximum number of threads that the host resolver |
86 // will use (not counting potential duplicate attempts). Use | 86 // will use (not counting potential duplicate attempts). Use |
87 // SetPoolConstraints() to specify finer-grain settings. | 87 // SetPoolConstraints() to specify finer-grain settings. |
| 88 // |max_retry_attempts| is the maximum number of times we will retry for host |
| 89 // resolution. Pass HostResolver::kDefaultRetryAttempts to choose a default |
| 90 // value. |
88 // | 91 // |
89 // For each attempt, we could start another attempt if host is not resolved | 92 // For each attempt, we could start another attempt if host is not resolved |
90 // within unresponsive_delay_ time. We keep attempting to resolve the host | 93 // within unresponsive_delay_ time. We keep attempting to resolve the host |
91 // until retry interval reaches maximum_unresponsive_delay_ time. For every | 94 // until retry interval reaches maximum_unresponsive_delay_ time. For every |
92 // retry attempt, we grow the unresponsive_delay_ by the retry_factor_ amount | 95 // retry attempt, we grow the unresponsive_delay_ by the retry_factor_ amount |
93 // (that is retry interval is multiplied by the retry factor each time). Once | 96 // (that is retry interval is multiplied by the retry factor each time). Once |
94 // retry interval exceeds maximum_unresponsive_delay_ time, we give up on | 97 // retry interval exceeds maximum_unresponsive_delay_ time, we give up on |
95 // additional attempts. | 98 // additional attempts. |
96 // | 99 // |
97 // |net_log| must remain valid for the life of the HostResolverImpl. | 100 // |net_log| must remain valid for the life of the HostResolverImpl. |
98 HostResolverImpl(HostResolverProc* resolver_proc, | 101 HostResolverImpl(HostResolverProc* resolver_proc, |
99 HostCache* cache, | 102 HostCache* cache, |
100 size_t max_jobs, | 103 size_t max_jobs, |
| 104 size_t max_retry_attempts, |
101 NetLog* net_log); | 105 NetLog* net_log); |
102 | 106 |
103 // If any completion callbacks are pending when the resolver is destroyed, | 107 // If any completion callbacks are pending when the resolver is destroyed, |
104 // the host resolutions are cancelled, and the completion callbacks will not | 108 // the host resolutions are cancelled, and the completion callbacks will not |
105 // be called. | 109 // be called. |
106 virtual ~HostResolverImpl(); | 110 virtual ~HostResolverImpl(); |
107 | 111 |
108 // Continuously observe whether IPv6 is supported, and set the allowable | 112 // Continuously observe whether IPv6 is supported, and set the allowable |
109 // address family to IPv4 iff IPv6 is not supported. | 113 // address family to IPv4 iff IPv6 is not supported. |
110 void ProbeIPv6Support(); | 114 void ProbeIPv6Support(); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 | 247 |
244 // Cancels all jobs. | 248 // Cancels all jobs. |
245 void CancelAllJobs(); | 249 void CancelAllJobs(); |
246 | 250 |
247 // Aborts all in progress jobs (but might start new ones). | 251 // Aborts all in progress jobs (but might start new ones). |
248 void AbortAllInProgressJobs(); | 252 void AbortAllInProgressJobs(); |
249 | 253 |
250 // NetworkChangeNotifier::IPAddressObserver methods: | 254 // NetworkChangeNotifier::IPAddressObserver methods: |
251 virtual void OnIPAddressChanged(); | 255 virtual void OnIPAddressChanged(); |
252 | 256 |
| 257 // Helper methods to get and set max_retry_attempts_. |
| 258 size_t max_retry_attempts() const { |
| 259 return max_retry_attempts_; |
| 260 } |
| 261 void set_max_retry_attempts(const size_t max_retry_attempts) { |
| 262 max_retry_attempts_ = max_retry_attempts; |
| 263 } |
| 264 |
253 // Helper methods for unit tests to get and set unresponsive_delay_. | 265 // Helper methods for unit tests to get and set unresponsive_delay_. |
254 base::TimeDelta unresponsive_delay() const { return unresponsive_delay_; } | 266 base::TimeDelta unresponsive_delay() const { return unresponsive_delay_; } |
255 void set_unresponsive_delay(const base::TimeDelta& unresponsive_delay) { | 267 void set_unresponsive_delay(const base::TimeDelta& unresponsive_delay) { |
256 unresponsive_delay_ = unresponsive_delay; | 268 unresponsive_delay_ = unresponsive_delay; |
257 } | 269 } |
258 | 270 |
259 // Helper methods to get and set retry_factor. | 271 // Helper methods to get and set retry_factor_. |
260 uint32 retry_factor() const { | 272 uint32 retry_factor() const { |
261 return retry_factor_; | 273 return retry_factor_; |
262 } | 274 } |
263 void set_retry_factor(const uint32 retry_factor) { | 275 void set_retry_factor(const uint32 retry_factor) { |
264 retry_factor_ = retry_factor; | 276 retry_factor_ = retry_factor; |
265 } | 277 } |
266 | 278 |
267 // Helper methods for unit tests to get and set maximum_unresponsive_delay_. | 279 // Helper methods for unit tests to get and set maximum_unresponsive_delay_. |
268 base::TimeDelta maximum_unresponsive_delay() const { | 280 base::TimeDelta maximum_unresponsive_delay() const { |
269 return maximum_unresponsive_delay_; | 281 return maximum_unresponsive_delay_; |
270 } | 282 } |
271 void set_maximum_unresponsive_delay( | 283 void set_maximum_unresponsive_delay( |
272 const base::TimeDelta& maximum_unresponsive_delay) { | 284 const base::TimeDelta& maximum_unresponsive_delay) { |
273 maximum_unresponsive_delay_ = maximum_unresponsive_delay; | 285 maximum_unresponsive_delay_ = maximum_unresponsive_delay; |
274 } | 286 } |
275 | 287 |
276 // Cache of host resolution results. | 288 // Cache of host resolution results. |
277 scoped_ptr<HostCache> cache_; | 289 scoped_ptr<HostCache> cache_; |
278 | 290 |
279 // Map from hostname to outstanding job. | 291 // Map from hostname to outstanding job. |
280 JobMap jobs_; | 292 JobMap jobs_; |
281 | 293 |
282 // Maximum number of concurrent jobs allowed, across all pools. Each job may | 294 // Maximum number of concurrent jobs allowed, across all pools. Each job may |
283 // create multiple concurrent resolve attempts for the hostname. | 295 // create multiple concurrent resolve attempts for the hostname. |
284 size_t max_jobs_; | 296 size_t max_jobs_; |
285 | 297 |
| 298 // Maximum number retry attempts to resolve the hostname. |
| 299 size_t max_retry_attempts_; |
| 300 |
286 // This is the limit after which we make another attempt to resolve the host | 301 // This is the limit after which we make another attempt to resolve the host |
287 // if the worker thread has not responded yet. Allow unit tests to change the | 302 // if the worker thread has not responded yet. Allow unit tests to change the |
288 // value. | 303 // value. |
289 base::TimeDelta unresponsive_delay_; | 304 base::TimeDelta unresponsive_delay_; |
290 | 305 |
291 // Factor to grow unresponsive_delay_ when we re-re-try. Allow unit tests to | 306 // Factor to grow unresponsive_delay_ when we re-re-try. Allow unit tests to |
292 // change the value. | 307 // change the value. |
293 uint32 retry_factor_; | 308 uint32 retry_factor_; |
294 | 309 |
295 // This is the limit on how large we grow the retry interval. Once it exceeds | 310 // This is the limit on how large we grow the retry interval. Once it exceeds |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 HostResolverFlags additional_resolver_flags_; | 353 HostResolverFlags additional_resolver_flags_; |
339 | 354 |
340 NetLog* net_log_; | 355 NetLog* net_log_; |
341 | 356 |
342 DISALLOW_COPY_AND_ASSIGN(HostResolverImpl); | 357 DISALLOW_COPY_AND_ASSIGN(HostResolverImpl); |
343 }; | 358 }; |
344 | 359 |
345 } // namespace net | 360 } // namespace net |
346 | 361 |
347 #endif // NET_BASE_HOST_RESOLVER_IMPL_H_ | 362 #endif // NET_BASE_HOST_RESOLVER_IMPL_H_ |
OLD | NEW |