// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_SSL_CLIENT_CERT_STORE_CHROMEOS_H_ #define NET_SSL_CLIENT_CERT_STORE_CHROMEOS_H_ #include #include "base/memory/scoped_ptr.h" #include "net/ssl/client_cert_store_nss.h" namespace net { class X509Certificate; class NET_EXPORT ClientCertStoreChromeOS : public ClientCertStoreNSS { public: class CertFilter { public: virtual ~CertFilter() {} // Initializes this filter. Returns true if it finished initialization, // otherwise returns false and calls |callback| once the initialization is // completed. // Must be called at most once. virtual bool Init(const base::Closure& callback) = 0; // Returns true if |cert| is allowed to be used as a client certificate // (e.g. for a certain browser context or user). // This is only called once initialization is finished, see Init(). virtual bool IsCertAllowed( const scoped_refptr& cert) const = 0; }; // This ClientCertStore will return only client certs that pass the filter // |cert_filter|. ClientCertStoreChromeOS( scoped_ptr cert_filter, const PasswordDelegateFactory& password_delegate_factory); virtual ~ClientCertStoreChromeOS(); // ClientCertStoreNSS: virtual void GetClientCerts(const SSLCertRequestInfo& cert_request_info, CertificateList* selected_certs, const base::Closure& callback) override; protected: // ClientCertStoreNSS: virtual void GetClientCertsImpl(CERTCertList* cert_list, const SSLCertRequestInfo& request, bool query_nssdb, CertificateList* selected_certs) override; private: void CertFilterInitialized(const SSLCertRequestInfo* request, CertificateList* selected_certs, const base::Closure& callback); scoped_ptr cert_filter_; DISALLOW_COPY_AND_ASSIGN(ClientCertStoreChromeOS); }; } // namespace net #endif // NET_SSL_CLIENT_CERT_STORE_CHROMEOS_H_