Home | History | Annotate | Download | only in ftp
      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