#ifndef IOS_WEB_SESSION_SESSION_CERTIFICATE_H_
#define IOS_WEB_SESSION_SESSION_CERTIFICATE_H_
#include <string>
#include <unordered_set>
#include "base/memory/scoped_refptr.h"
#include "net/base/hash_value.h"
#include "net/cert/cert_status_flags.h"
#include "net/cert/x509_certificate.h"
namespace web {
namespace proto {
class CertificateStorage;
}
class SessionCertificate {
public:
SessionCertificate(const scoped_refptr<net::X509Certificate>& certificate,
const std::string& host,
net::CertStatus status);
explicit SessionCertificate(const proto::CertificateStorage& storage);
SessionCertificate(SessionCertificate&&);
SessionCertificate(const SessionCertificate&);
SessionCertificate& operator=(SessionCertificate&&);
SessionCertificate& operator=(const SessionCertificate&);
~SessionCertificate();
void SerializeToProto(proto::CertificateStorage& storage) const;
const std::string& host() const { return host_; }
net::CertStatus status() const { return status_; }
const scoped_refptr<net::X509Certificate>& certificate() const {
return certificate_;
}
private:
scoped_refptr<net::X509Certificate> certificate_;
std::string host_;
net::CertStatus status_;
};
bool operator==(const SessionCertificate& lhs, const SessionCertificate& rhs);
bool operator!=(const SessionCertificate& lhs, const SessionCertificate& rhs);
struct SessionCertificateHasher {
size_t operator()(const SessionCertificate& value) const;
};
using SessionCertificateSet =
std::unordered_set<SessionCertificate, SessionCertificateHasher>;
}
#endif