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 15731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickFtpAuthCache::Entry::Entry(const GURL& origin, 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const string16& username, 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const string16& password) 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : origin(origin), 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username(username), 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick password(password) { 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 23731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickFtpAuthCache::Entry::~Entry() {} 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 25731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickFtpAuthCache::FtpAuthCache() {} 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 27731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickFtpAuthCache::~FtpAuthCache() {} 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottFtpAuthCache::Entry* FtpAuthCache::Lookup(const GURL& origin) { 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (it->origin == origin) 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return &(*it); 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return NULL; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid FtpAuthCache::Add(const GURL& origin, const string16& username, 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const string16& password) { 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(origin.SchemeIs("ftp")); 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK_EQ(origin.GetOrigin(), origin); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Entry* entry = Lookup(origin); 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (entry) { 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entry->username = username; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entry->password = password; 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.push_front(Entry(origin, username, password)); 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Prevent unbound memory growth of the cache. 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (entries_.size() > kMaxEntries) 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.pop_back(); 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid FtpAuthCache::Remove(const GURL& origin, const string16& username, 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const string16& password) { 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (EntryList::iterator it = entries_.begin(); it != entries_.end(); ++it) { 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (it->origin == origin && it->username == username && 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott it->password == password) { 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott entries_.erase(it); 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(!Lookup(origin)); 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return; 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 68