| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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_DNS_HOST_RESOLVER_IMPL_H_ | 5 #ifndef NET_DNS_HOST_RESOLVER_IMPL_H_ |
| 6 #define NET_DNS_HOST_RESOLVER_IMPL_H_ | 6 #define NET_DNS_HOST_RESOLVER_IMPL_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <map> | 11 #include <map> |
| 12 #include <memory> | 12 #include <memory> |
| 13 | 13 |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
| 16 #include "base/strings/string_piece.h" | 16 #include "base/strings/string_piece.h" |
| 17 #include "base/threading/non_thread_safe.h" | 17 #include "base/threading/non_thread_safe.h" |
| 18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 19 #include "base/timer/timer.h" | 19 #include "base/timer/timer.h" |
| 20 #include "net/base/net_export.h" | 20 #include "net/base/net_export.h" |
| 21 #include "net/base/network_change_notifier.h" | 21 #include "net/base/network_change_notifier.h" |
| 22 #include "net/dns/host_cache.h" | 22 #include "net/dns/host_cache.h" |
| 23 #include "net/dns/host_resolver.h" | 23 #include "net/dns/host_resolver.h" |
| 24 #include "net/dns/host_resolver_proc.h" | 24 #include "net/dns/host_resolver_proc.h" |
| 25 | 25 |
| 26 namespace net { | 26 namespace net { |
| 27 | 27 |
| 28 class AddressList; | 28 class AddressList; |
| 29 class BoundNetLog; | 29 class NetLogWithSource; |
| 30 class DnsClient; | 30 class DnsClient; |
| 31 class IPAddress; | 31 class IPAddress; |
| 32 class NetLog; | 32 class NetLog; |
| 33 | 33 |
| 34 // For each hostname that is requested, HostResolver creates a | 34 // For each hostname that is requested, HostResolver creates a |
| 35 // HostResolverImpl::Job. When this job gets dispatched it creates a ProcTask | 35 // HostResolverImpl::Job. When this job gets dispatched it creates a ProcTask |
| 36 // which runs the given HostResolverProc on a worker thread (a WorkerPool | 36 // which runs the given HostResolverProc on a worker thread (a WorkerPool |
| 37 // thread, in production code.) If requests for that same host are made during | 37 // thread, in production code.) If requests for that same host are made during |
| 38 // the job's lifetime, they are attached to the existing job rather than | 38 // the job's lifetime, they are attached to the existing job rather than |
| 39 // creating a new one. This avoids doing parallel resolves for the same host. | 39 // creating a new one. This avoids doing parallel resolves for the same host. |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 // not pre-configured with a valid DnsConfig, a new config is fetched from | 131 // not pre-configured with a valid DnsConfig, a new config is fetched from |
| 132 // NetworkChangeNotifier. | 132 // NetworkChangeNotifier. |
| 133 void SetDnsClient(std::unique_ptr<DnsClient> dns_client); | 133 void SetDnsClient(std::unique_ptr<DnsClient> dns_client); |
| 134 | 134 |
| 135 // HostResolver methods: | 135 // HostResolver methods: |
| 136 int Resolve(const RequestInfo& info, | 136 int Resolve(const RequestInfo& info, |
| 137 RequestPriority priority, | 137 RequestPriority priority, |
| 138 AddressList* addresses, | 138 AddressList* addresses, |
| 139 const CompletionCallback& callback, | 139 const CompletionCallback& callback, |
| 140 std::unique_ptr<Request>* out_req, | 140 std::unique_ptr<Request>* out_req, |
| 141 const BoundNetLog& source_net_log) override; | 141 const NetLogWithSource& source_net_log) override; |
| 142 int ResolveFromCache(const RequestInfo& info, | 142 int ResolveFromCache(const RequestInfo& info, |
| 143 AddressList* addresses, | 143 AddressList* addresses, |
| 144 const BoundNetLog& source_net_log) override; | 144 const NetLogWithSource& source_net_log) override; |
| 145 void SetDnsClientEnabled(bool enabled) override; | 145 void SetDnsClientEnabled(bool enabled) override; |
| 146 HostCache* GetHostCache() override; | 146 HostCache* GetHostCache() override; |
| 147 std::unique_ptr<base::Value> GetDnsConfigAsValue() const override; | 147 std::unique_ptr<base::Value> GetDnsConfigAsValue() const override; |
| 148 | 148 |
| 149 // Like |ResolveFromCache()|, but can return a stale result if the | 149 // Like |ResolveFromCache()|, but can return a stale result if the |
| 150 // implementation supports it. Fills in |*stale_info| if a response is | 150 // implementation supports it. Fills in |*stale_info| if a response is |
| 151 // returned to indicate how stale (or not) it is. | 151 // returned to indicate how stale (or not) it is. |
| 152 int ResolveStaleFromCache(const RequestInfo& info, | 152 int ResolveStaleFromCache(const RequestInfo& info, |
| 153 AddressList* addresses, | 153 AddressList* addresses, |
| 154 HostCache::EntryStaleness* stale_info, | 154 HostCache::EntryStaleness* stale_info, |
| 155 const BoundNetLog& source_net_log); | 155 const NetLogWithSource& source_net_log); |
| 156 | 156 |
| 157 void InitializePersistence( | 157 void InitializePersistence( |
| 158 const PersistCallback& persist_callback, | 158 const PersistCallback& persist_callback, |
| 159 std::unique_ptr<const base::Value> old_data) override; | 159 std::unique_ptr<const base::Value> old_data) override; |
| 160 | 160 |
| 161 void set_proc_params_for_test(const ProcTaskParams& proc_params) { | 161 void set_proc_params_for_test(const ProcTaskParams& proc_params) { |
| 162 proc_params_ = proc_params; | 162 proc_params_ = proc_params; |
| 163 } | 163 } |
| 164 | 164 |
| 165 protected: | 165 protected: |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 // entry's staleness (if an entry is returned). | 197 // entry's staleness (if an entry is returned). |
| 198 // | 198 // |
| 199 // If |allow_stale| is false, then stale cache entries will not be returned, | 199 // If |allow_stale| is false, then stale cache entries will not be returned, |
| 200 // and |stale_info| must be null. | 200 // and |stale_info| must be null. |
| 201 int ResolveHelper(const Key& key, | 201 int ResolveHelper(const Key& key, |
| 202 const RequestInfo& info, | 202 const RequestInfo& info, |
| 203 const IPAddress* ip_address, | 203 const IPAddress* ip_address, |
| 204 AddressList* addresses, | 204 AddressList* addresses, |
| 205 bool allow_stale, | 205 bool allow_stale, |
| 206 HostCache::EntryStaleness* stale_info, | 206 HostCache::EntryStaleness* stale_info, |
| 207 const BoundNetLog& request_net_log); | 207 const NetLogWithSource& request_net_log); |
| 208 | 208 |
| 209 // Tries to resolve |key| as an IP, returns true and sets |net_error| if | 209 // Tries to resolve |key| as an IP, returns true and sets |net_error| if |
| 210 // succeeds, returns false otherwise. | 210 // succeeds, returns false otherwise. |
| 211 bool ResolveAsIP(const Key& key, | 211 bool ResolveAsIP(const Key& key, |
| 212 const RequestInfo& info, | 212 const RequestInfo& info, |
| 213 const IPAddress* ip_address, | 213 const IPAddress* ip_address, |
| 214 int* net_error, | 214 int* net_error, |
| 215 AddressList* addresses); | 215 AddressList* addresses); |
| 216 | 216 |
| 217 // If |key| is not found in cache returns false, otherwise returns | 217 // If |key| is not found in cache returns false, otherwise returns |
| (...skipping 23 matching lines...) Expand all Loading... |
| 241 // |addresses| with the loopback IP. Otherwise returns false. | 241 // |addresses| with the loopback IP. Otherwise returns false. |
| 242 bool ServeLocalhost(const Key& key, | 242 bool ServeLocalhost(const Key& key, |
| 243 const RequestInfo& info, | 243 const RequestInfo& info, |
| 244 AddressList* addresses); | 244 AddressList* addresses); |
| 245 | 245 |
| 246 // Returns the (hostname, address_family) key to use for |info|, choosing an | 246 // Returns the (hostname, address_family) key to use for |info|, choosing an |
| 247 // "effective" address family by inheriting the resolver's default address | 247 // "effective" address family by inheriting the resolver's default address |
| 248 // family when the request leaves it unspecified. | 248 // family when the request leaves it unspecified. |
| 249 Key GetEffectiveKeyForRequest(const RequestInfo& info, | 249 Key GetEffectiveKeyForRequest(const RequestInfo& info, |
| 250 const IPAddress* ip_address, | 250 const IPAddress* ip_address, |
| 251 const BoundNetLog& net_log); | 251 const NetLogWithSource& net_log); |
| 252 | 252 |
| 253 // Probes IPv6 support and returns true if IPv6 support is enabled. | 253 // Probes IPv6 support and returns true if IPv6 support is enabled. |
| 254 // Results are cached, i.e. when called repeatedly this method returns result | 254 // Results are cached, i.e. when called repeatedly this method returns result |
| 255 // from the first probe for some time before probing again. | 255 // from the first probe for some time before probing again. |
| 256 virtual bool IsIPv6Reachable(const BoundNetLog& net_log); | 256 virtual bool IsIPv6Reachable(const NetLogWithSource& net_log); |
| 257 | 257 |
| 258 // Asynchronously checks if only loopback IPs are available. | 258 // Asynchronously checks if only loopback IPs are available. |
| 259 virtual void RunLoopbackProbeJob(); | 259 virtual void RunLoopbackProbeJob(); |
| 260 | 260 |
| 261 // Records the result in cache if cache is present. | 261 // Records the result in cache if cache is present. |
| 262 void CacheResult(const Key& key, | 262 void CacheResult(const Key& key, |
| 263 const HostCache::Entry& entry, | 263 const HostCache::Entry& entry, |
| 264 base::TimeDelta ttl); | 264 base::TimeDelta ttl); |
| 265 | 265 |
| 266 // Removes |job| from |jobs_|, only if it exists. | 266 // Removes |job| from |jobs_|, only if it exists. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 // This function is only exposed so it can be unit-tested. | 390 // This function is only exposed so it can be unit-tested. |
| 391 // TODO(tfarina): It would be better to change the tests so this function | 391 // TODO(tfarina): It would be better to change the tests so this function |
| 392 // gets exercised indirectly through HostResolverImpl. | 392 // gets exercised indirectly through HostResolverImpl. |
| 393 NET_EXPORT_PRIVATE bool ResolveLocalHostname(base::StringPiece host, | 393 NET_EXPORT_PRIVATE bool ResolveLocalHostname(base::StringPiece host, |
| 394 uint16_t port, | 394 uint16_t port, |
| 395 AddressList* address_list); | 395 AddressList* address_list); |
| 396 | 396 |
| 397 } // namespace net | 397 } // namespace net |
| 398 | 398 |
| 399 #endif // NET_DNS_HOST_RESOLVER_IMPL_H_ | 399 #endif // NET_DNS_HOST_RESOLVER_IMPL_H_ |
| OLD | NEW |