ftp_auth_cache.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/ftp/ftp_auth_cache.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/gurl.h" 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst size_t FtpAuthCache::kMaxEntries = 10; 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottFtpAuthCache::Entry* FtpAuthCache::Lookup(const GURL& origin) { 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (it->origin == origin) 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return &(*it); 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return NULL; 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid FtpAuthCache::Add(const GURL& origin, const string16& username, 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const string16& password) { 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(origin.SchemeIs("ftp")); 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK_EQ(origin.GetOrigin(), origin); 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Entry* entry = Lookup(origin); 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (entry) { 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entry->username = username; 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entry->password = password; 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.push_front(Entry(origin, username, password)); 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Prevent unbound memory growth of the cache. 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (entries_.size() > kMaxEntries) 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.pop_back(); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid FtpAuthCache::Remove(const GURL& origin, const string16& username, 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const string16& password) { 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (it->origin == origin && it->username == username && 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott it->password == password) { 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.erase(it); 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(!Lookup(origin)); 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return; 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 54