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

Unified Diff: net/base/mock_host_resolver.cc

Issue 12518036: net: move host_resolver files from net/base to net/dns (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: net/base/mock_host_resolver.cc
diff --git a/net/base/mock_host_resolver.cc b/net/base/mock_host_resolver.cc
deleted file mode 100644
index 47554fef3f548e1f1ea33b7d7c374f43cd4f2418..0000000000000000000000000000000000000000
--- a/net/base/mock_host_resolver.cc
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/base/mock_host_resolver.h"
-
-#include <string>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop.h"
-#include "base/stl_util.h"
-#include "base/string_util.h"
-#include "base/strings/string_split.h"
-#include "base/threading/platform_thread.h"
-#include "net/base/host_cache.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
-#include "net/base/test_completion_callback.h"
-#if defined(OS_WIN)
-#include "net/base/winsock_init.h"
-#endif
-
-namespace net {
-
-namespace {
-
-// Cache size for the MockCachingHostResolver.
-const unsigned kMaxCacheEntries = 100;
-// TTL for the successful resolutions. Failures are not cached.
-const unsigned kCacheEntryTTLSeconds = 60;
-
-} // namespace
-
-int ParseAddressList(const std::string& host_list,
- const std::string& canonical_name,
- AddressList* addrlist) {
- *addrlist = AddressList();
- std::vector<std::string> addresses;
- base::SplitString(host_list, ',', &addresses);
- addrlist->set_canonical_name(canonical_name);
- for (size_t index = 0; index < addresses.size(); ++index) {
- IPAddressNumber ip_number;
- if (!ParseIPLiteralToNumber(addresses[index], &ip_number)) {
- LOG(WARNING) << "Not a supported IP literal: " << addresses[index];
- return ERR_UNEXPECTED;
- }
- addrlist->push_back(IPEndPoint(ip_number, -1));
- }
- return OK;
-}
-
-struct MockHostResolverBase::Request {
- Request(const RequestInfo& req_info,
- AddressList* addr,
- const CompletionCallback& cb)
- : info(req_info), addresses(addr), callback(cb) {}
- RequestInfo info;
- AddressList* addresses;
- CompletionCallback callback;
-};
-
-MockHostResolverBase::~MockHostResolverBase() {
- STLDeleteValues(&requests_);
-}
-
-int MockHostResolverBase::Resolve(const RequestInfo& info,
- AddressList* addresses,
- const CompletionCallback& callback,
- RequestHandle* handle,
- const BoundNetLog& net_log) {
- DCHECK(CalledOnValidThread());
- num_resolve_++;
- size_t id = next_request_id_++;
- int rv = ResolveFromIPLiteralOrCache(info, addresses);
- if (rv != ERR_DNS_CACHE_MISS) {
- return rv;
- }
- if (synchronous_mode_) {
- return ResolveProc(id, info, addresses);
- }
- // Store the request for asynchronous resolution
- Request* req = new Request(info, addresses, callback);
- requests_[id] = req;
- if (handle)
- *handle = reinterpret_cast<RequestHandle>(id);
-
- if (!ondemand_mode_) {
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&MockHostResolverBase::ResolveNow, AsWeakPtr(), id));
- }
-
- return ERR_IO_PENDING;
-}
-
-int MockHostResolverBase::ResolveFromCache(const RequestInfo& info,
- AddressList* addresses,
- const BoundNetLog& net_log) {
- num_resolve_from_cache_++;
- DCHECK(CalledOnValidThread());
- next_request_id_++;
- int rv = ResolveFromIPLiteralOrCache(info, addresses);
- return rv;
-}
-
-void MockHostResolverBase::CancelRequest(RequestHandle handle) {
- DCHECK(CalledOnValidThread());
- size_t id = reinterpret_cast<size_t>(handle);
- RequestMap::iterator it = requests_.find(id);
- if (it != requests_.end()) {
- scoped_ptr<Request> req(it->second);
- requests_.erase(it);
- } else {
- NOTREACHED() << "CancelRequest must NOT be called after request is "
- "complete or canceled.";
- }
-}
-
-HostCache* MockHostResolverBase::GetHostCache() {
- return cache_.get();
-}
-
-void MockHostResolverBase::ResolveAllPending() {
- DCHECK(CalledOnValidThread());
- DCHECK(ondemand_mode_);
- for (RequestMap::iterator i = requests_.begin(); i != requests_.end(); ++i) {
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&MockHostResolverBase::ResolveNow, AsWeakPtr(), i->first));
- }
-}
-
-// start id from 1 to distinguish from NULL RequestHandle
-MockHostResolverBase::MockHostResolverBase(bool use_caching)
- : synchronous_mode_(false),
- ondemand_mode_(false),
- next_request_id_(1),
- num_resolve_(0),
- num_resolve_from_cache_(0) {
- rules_ = CreateCatchAllHostResolverProc();
-
- if (use_caching) {
- cache_.reset(new HostCache(kMaxCacheEntries));
- }
-}
-
-int MockHostResolverBase::ResolveFromIPLiteralOrCache(const RequestInfo& info,
- AddressList* addresses) {
- IPAddressNumber ip;
- if (ParseIPLiteralToNumber(info.hostname(), &ip)) {
- *addresses = AddressList::CreateFromIPAddress(ip, info.port());
- if (info.host_resolver_flags() & HOST_RESOLVER_CANONNAME)
- addresses->SetDefaultCanonicalName();
- return OK;
- }
- int rv = ERR_DNS_CACHE_MISS;
- if (cache_.get() && info.allow_cached_response()) {
- HostCache::Key key(info.hostname(),
- info.address_family(),
- info.host_resolver_flags());
- const HostCache::Entry* entry = cache_->Lookup(key, base::TimeTicks::Now());
- if (entry) {
- rv = entry->error;
- if (rv == OK)
- *addresses = AddressList::CopyWithPort(entry->addrlist, info.port());
- }
- }
- return rv;
-}
-
-int MockHostResolverBase::ResolveProc(size_t id,
- const RequestInfo& info,
- AddressList* addresses) {
- AddressList addr;
- int rv = rules_->Resolve(info.hostname(),
- info.address_family(),
- info.host_resolver_flags(),
- &addr,
- NULL);
- if (cache_.get()) {
- HostCache::Key key(info.hostname(),
- info.address_family(),
- info.host_resolver_flags());
- // Storing a failure with TTL 0 so that it overwrites previous value.
- base::TimeDelta ttl;
- if (rv == OK)
- ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);
- cache_->Set(key, HostCache::Entry(rv, addr), base::TimeTicks::Now(), ttl);
- }
- if (rv == OK)
- *addresses = AddressList::CopyWithPort(addr, info.port());
- return rv;
-}
-
-void MockHostResolverBase::ResolveNow(size_t id) {
- RequestMap::iterator it = requests_.find(id);
- if (it == requests_.end())
- return; // was canceled
-
- scoped_ptr<Request> req(it->second);
- requests_.erase(it);
- int rv = ResolveProc(id, req->info, req->addresses);
- if (!req->callback.is_null())
- req->callback.Run(rv);
-}
-
-//-----------------------------------------------------------------------------
-
-struct RuleBasedHostResolverProc::Rule {
- enum ResolverType {
- kResolverTypeFail,
- kResolverTypeSystem,
- kResolverTypeIPLiteral,
- };
-
- ResolverType resolver_type;
- std::string host_pattern;
- AddressFamily address_family;
- HostResolverFlags host_resolver_flags;
- std::string replacement;
- std::string canonical_name;
- int latency_ms; // In milliseconds.
-
- Rule(ResolverType resolver_type,
- const std::string& host_pattern,
- AddressFamily address_family,
- HostResolverFlags host_resolver_flags,
- const std::string& replacement,
- const std::string& canonical_name,
- int latency_ms)
- : resolver_type(resolver_type),
- host_pattern(host_pattern),
- address_family(address_family),
- host_resolver_flags(host_resolver_flags),
- replacement(replacement),
- canonical_name(canonical_name),
- latency_ms(latency_ms) {}
-};
-
-RuleBasedHostResolverProc::RuleBasedHostResolverProc(HostResolverProc* previous)
- : HostResolverProc(previous) {
-}
-
-void RuleBasedHostResolverProc::AddRule(const std::string& host_pattern,
- const std::string& replacement) {
- AddRuleForAddressFamily(host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
- replacement);
-}
-
-void RuleBasedHostResolverProc::AddRuleForAddressFamily(
- const std::string& host_pattern,
- AddressFamily address_family,
- const std::string& replacement) {
- DCHECK(!replacement.empty());
- HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY |
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- Rule rule(Rule::kResolverTypeSystem, host_pattern, address_family, flags,
- replacement, "", 0);
- rules_.push_back(rule);
-}
-
-void RuleBasedHostResolverProc::AddIPLiteralRule(
- const std::string& host_pattern,
- const std::string& ip_literal,
- const std::string& canonical_name) {
- // Literals are always resolved to themselves by HostResolverImpl,
- // consequently we do not support remapping them.
- IPAddressNumber ip_number;
- DCHECK(!ParseIPLiteralToNumber(host_pattern, &ip_number));
- HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY |
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- if (!canonical_name.empty())
- flags |= HOST_RESOLVER_CANONNAME;
- Rule rule(Rule::kResolverTypeIPLiteral, host_pattern,
- ADDRESS_FAMILY_UNSPECIFIED, flags, ip_literal, canonical_name,
- 0);
- rules_.push_back(rule);
-}
-
-void RuleBasedHostResolverProc::AddRuleWithLatency(
- const std::string& host_pattern,
- const std::string& replacement,
- int latency_ms) {
- DCHECK(!replacement.empty());
- HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY |
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- Rule rule(Rule::kResolverTypeSystem, host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
- flags, replacement, "", latency_ms);
- rules_.push_back(rule);
-}
-
-void RuleBasedHostResolverProc::AllowDirectLookup(
- const std::string& host_pattern) {
- HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY |
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- Rule rule(Rule::kResolverTypeSystem, host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
- flags, "", "", 0);
- rules_.push_back(rule);
-}
-
-void RuleBasedHostResolverProc::AddSimulatedFailure(
- const std::string& host_pattern) {
- HostResolverFlags flags = HOST_RESOLVER_LOOPBACK_ONLY |
- HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
- Rule rule(Rule::kResolverTypeFail, host_pattern, ADDRESS_FAMILY_UNSPECIFIED,
- flags, "", "", 0);
- rules_.push_back(rule);
-}
-
-void RuleBasedHostResolverProc::ClearRules() {
- rules_.clear();
-}
-
-int RuleBasedHostResolverProc::Resolve(const std::string& host,
- AddressFamily address_family,
- HostResolverFlags host_resolver_flags,
- AddressList* addrlist,
- int* os_error) {
- RuleList::iterator r;
- for (r = rules_.begin(); r != rules_.end(); ++r) {
- bool matches_address_family =
- r->address_family == ADDRESS_FAMILY_UNSPECIFIED ||
- r->address_family == address_family;
- // Flags match if all of the bitflags in host_resolver_flags are enabled
- // in the rule's host_resolver_flags. However, the rule may have additional
- // flags specified, in which case the flags should still be considered a
- // match.
- bool matches_flags = (r->host_resolver_flags & host_resolver_flags) ==
- host_resolver_flags;
- if (matches_flags && matches_address_family &&
- MatchPattern(host, r->host_pattern)) {
- if (r->latency_ms != 0) {
- base::PlatformThread::Sleep(
- base::TimeDelta::FromMilliseconds(r->latency_ms));
- }
-
- // Remap to a new host.
- const std::string& effective_host =
- r->replacement.empty() ? host : r->replacement;
-
- // Apply the resolving function to the remapped hostname.
- switch (r->resolver_type) {
- case Rule::kResolverTypeFail:
- return ERR_NAME_NOT_RESOLVED;
- case Rule::kResolverTypeSystem:
-#if defined(OS_WIN)
- net::EnsureWinsockInit();
-#endif
- return SystemHostResolverProc(effective_host,
- address_family,
- host_resolver_flags,
- addrlist, os_error);
- case Rule::kResolverTypeIPLiteral:
- return ParseAddressList(effective_host,
- r->canonical_name,
- addrlist);
- default:
- NOTREACHED();
- return ERR_UNEXPECTED;
- }
- }
- }
- return ResolveUsingPrevious(host, address_family,
- host_resolver_flags, addrlist, os_error);
-}
-
-RuleBasedHostResolverProc::~RuleBasedHostResolverProc() {
-}
-
-RuleBasedHostResolverProc* CreateCatchAllHostResolverProc() {
- RuleBasedHostResolverProc* catchall = new RuleBasedHostResolverProc(NULL);
- catchall->AddIPLiteralRule("*", "127.0.0.1", "localhost");
-
- // Next add a rules-based layer the use controls.
- return new RuleBasedHostResolverProc(catchall);
-}
-
-//-----------------------------------------------------------------------------
-
-int HangingHostResolver::Resolve(const RequestInfo& info,
- AddressList* addresses,
- const CompletionCallback& callback,
- RequestHandle* out_req,
- const BoundNetLog& net_log) {
- return ERR_IO_PENDING;
-}
-
-int HangingHostResolver::ResolveFromCache(const RequestInfo& info,
- AddressList* addresses,
- const BoundNetLog& net_log) {
- return ERR_DNS_CACHE_MISS;
-}
-
-//-----------------------------------------------------------------------------
-
-ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc() {}
-
-ScopedDefaultHostResolverProc::ScopedDefaultHostResolverProc(
- HostResolverProc* proc) {
- Init(proc);
-}
-
-ScopedDefaultHostResolverProc::~ScopedDefaultHostResolverProc() {
- HostResolverProc* old_proc = HostResolverProc::SetDefault(previous_proc_);
- // The lifetimes of multiple instances must be nested.
- CHECK_EQ(old_proc, current_proc_);
-}
-
-void ScopedDefaultHostResolverProc::Init(HostResolverProc* proc) {
- current_proc_ = proc;
- previous_proc_ = HostResolverProc::SetDefault(current_proc_);
- current_proc_->SetLastProc(previous_proc_);
-}
-
-} // namespace net

Powered by Google App Engine
This is Rietveld 408576698