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