1// Copyright (c) 2010 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 "googleurl/src/gurl.h" 9 10namespace net { 11 12// static 13const size_t FtpAuthCache::kMaxEntries = 10; 14 15FtpAuthCache::Entry::Entry(const GURL& origin, 16 const string16& username, 17 const string16& password) 18 : origin(origin), 19 username(username), 20 password(password) { 21} 22 23FtpAuthCache::Entry::~Entry() {} 24 25FtpAuthCache::FtpAuthCache() {} 26 27FtpAuthCache::~FtpAuthCache() {} 28 29FtpAuthCache::Entry* FtpAuthCache::Lookup(const GURL& origin) { 30 for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 31 if (it->origin == origin) 32 return &(*it); 33 } 34 return NULL; 35} 36 37void FtpAuthCache::Add(const GURL& origin, const string16& username, 38 const string16& password) { 39 DCHECK(origin.SchemeIs("ftp")); 40 DCHECK_EQ(origin.GetOrigin(), origin); 41 42 Entry* entry = Lookup(origin); 43 if (entry) { 44 entry->username = username; 45 entry->password = password; 46 } else { 47 entries_.push_front(Entry(origin, username, password)); 48 49 // Prevent unbound memory growth of the cache. 50 if (entries_.size() > kMaxEntries) 51 entries_.pop_back(); 52 } 53} 54 55void FtpAuthCache::Remove(const GURL& origin, const string16& username, 56 const string16& password) { 57 for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 58 if (it->origin == origin && it->username == username && 59 it->password == password) { 60 entries_.erase(it); 61 DCHECK(!Lookup(origin)); 62 return; 63 } 64 } 65} 66 67} // namespace net 68