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 3 // found in the LICENSE file. 4 5 #include "net/ftp/ftp_auth_cache.h" 6 7 #include "base/logging.h" 8 #include "url/gurl.h" 9 10 namespace net { 11 12 // static 13 const size_t FtpAuthCache::kMaxEntries = 10; 14 15 FtpAuthCache::Entry::Entry(const GURL& origin, 16 const AuthCredentials& credentials) 17 : origin(origin), 18 credentials(credentials) { 19 } 20 21 FtpAuthCache::Entry::~Entry() {} 22 23 FtpAuthCache::FtpAuthCache() {} 24 25 FtpAuthCache::~FtpAuthCache() {} 26 27 FtpAuthCache::Entry* FtpAuthCache::Lookup(const GURL& origin) { 28 for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 29 if (it->origin == origin) 30 return &(*it); 31 } 32 return NULL; 33 } 34 35 void FtpAuthCache::Add(const GURL& origin, const AuthCredentials& credentials) { 36 DCHECK(origin.SchemeIs("ftp")); 37 DCHECK_EQ(origin.GetOrigin(), origin); 38 39 Entry* entry = Lookup(origin); 40 if (entry) { 41 entry->credentials = credentials; 42 } else { 43 entries_.push_front(Entry(origin, credentials)); 44 45 // Prevent unbound memory growth of the cache. 46 if (entries_.size() > kMaxEntries) 47 entries_.pop_back(); 48 } 49 } 50 51 void FtpAuthCache::Remove(const GURL& origin, 52 const AuthCredentials& credentials) { 53 for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 54 if (it->origin == origin && it->credentials.Equals(credentials)) { 55 entries_.erase(it); 56 DCHECK(!Lookup(origin)); 57 return; 58 } 59 } 60 } 61 62 } // namespace net 63