Home | History | Annotate | Download | only in ssl
      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/ssl/ssl_client_auth_cache.h"
      6 
      7 #include "base/logging.h"
      8 #include "net/cert/x509_certificate.h"
      9 
     10 namespace net {
     11 
     12 SSLClientAuthCache::SSLClientAuthCache() {
     13   CertDatabase::GetInstance()->AddObserver(this);
     14 }
     15 
     16 SSLClientAuthCache::~SSLClientAuthCache() {
     17   CertDatabase::GetInstance()->RemoveObserver(this);
     18 }
     19 
     20 bool SSLClientAuthCache::Lookup(
     21     const HostPortPair& server,
     22     scoped_refptr<X509Certificate>* certificate) {
     23   DCHECK(certificate);
     24 
     25   AuthCacheMap::iterator iter = cache_.find(server);
     26   if (iter == cache_.end())
     27     return false;
     28 
     29   *certificate = iter->second;
     30   return true;
     31 }
     32 
     33 void SSLClientAuthCache::Add(const HostPortPair& server,
     34                              X509Certificate* value) {
     35   cache_[server] = value;
     36 
     37   // TODO(wtc): enforce a maximum number of entries.
     38 }
     39 
     40 void SSLClientAuthCache::Remove(const HostPortPair& server) {
     41   cache_.erase(server);
     42 }
     43 
     44 void SSLClientAuthCache::OnCertAdded(const X509Certificate* cert) {
     45   cache_.clear();
     46 }
     47 
     48 }  // namespace net
     49