// 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/host_cache.h" #include "base/logging.h" #include "net/base/net_errors.h" namespace net { //----------------------------------------------------------------------------- HostCache::Entry::Entry(int error, const AddressList& addrlist, base::TimeDelta ttl) : error(error), addrlist(addrlist), ttl(ttl) { DCHECK(ttl >= base::TimeDelta()); } HostCache::Entry::Entry(int error, const AddressList& addrlist) : error(error), addrlist(addrlist), ttl(base::TimeDelta::FromSeconds(-1)) { } HostCache::Entry::~Entry() { } //----------------------------------------------------------------------------- HostCache::HostCache(size_t max_entries) : entries_(max_entries) { } HostCache::~HostCache() { } const HostCache::Entry* HostCache::Lookup(const Key& key, base::TimeTicks now) { DCHECK(CalledOnValidThread()); if (caching_is_disabled()) return NULL; return entries_.Get(key, now); } void HostCache::Set(const Key& key, const Entry& entry, base::TimeTicks now, base::TimeDelta ttl) { DCHECK(CalledOnValidThread()); if (caching_is_disabled()) return; entries_.Put(key, entry, now, now + ttl); } void HostCache::clear() { DCHECK(CalledOnValidThread()); entries_.Clear(); } size_t HostCache::size() const { DCHECK(CalledOnValidThread()); return entries_.size(); } size_t HostCache::max_entries() const { DCHECK(CalledOnValidThread()); return entries_.max_entries(); } // Note that this map may contain expired entries. const HostCache::EntryMap& HostCache::entries() const { DCHECK(CalledOnValidThread()); return entries_; } // static scoped_ptr HostCache::CreateDefaultCache() { #if defined(OS_CHROMEOS) // Increase HostCache size for the duration of the async DNS field trial. // http://crbug.com/143454 // TODO(szym): Determine the best size. http://crbug.com/114277 static const size_t kMaxHostCacheEntries = 1000; #else static const size_t kMaxHostCacheEntries = 100; #endif return make_scoped_ptr(new HostCache(kMaxHostCacheEntries)); } } // namespace net