| // Copyright (c) 2012 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. |
| |
| #include "net/base/mock_cert_verifier.h" |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/string_util.h" |
| #include "net/base/cert_status_flags.h" |
| #include "net/base/cert_verify_result.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/x509_certificate.h" |
| |
| namespace net { |
| |
| struct MockCertVerifier::Rule { |
| Rule(X509Certificate* cert, |
| const std::string& hostname, |
| const CertVerifyResult& result, |
| int rv) |
| : cert(cert), |
| hostname(hostname), |
| result(result), |
| rv(rv) { |
| DCHECK(cert); |
| DCHECK(result.verified_cert); |
| } |
| |
| scoped_refptr<X509Certificate> cert; |
| std::string hostname; |
| CertVerifyResult result; |
| int rv; |
| }; |
| |
| MockCertVerifier::MockCertVerifier() : default_result_(ERR_CERT_INVALID) {} |
| |
| MockCertVerifier::~MockCertVerifier() {} |
| |
| int MockCertVerifier::Verify(X509Certificate* cert, |
| const std::string& hostname, |
| int flags, |
| CRLSet* crl_set, |
| CertVerifyResult* verify_result, |
| const CompletionCallback& callback, |
| RequestHandle* out_req, |
| const BoundNetLog& net_log) { |
| RuleList::const_iterator it; |
| for (it = rules_.begin(); it != rules_.end(); ++it) { |
| // Check just the server cert. Intermediates will be ignored. |
| if (!it->cert->Equals(cert)) |
| continue; |
| if (!MatchPattern(hostname, it->hostname)) |
| continue; |
| *verify_result = it->result; |
| return it->rv; |
| } |
| |
| // Fall through to the default. |
| verify_result->verified_cert = cert; |
| verify_result->cert_status = MapNetErrorToCertStatus(default_result_); |
| return default_result_; |
| } |
| |
| void MockCertVerifier::CancelRequest(RequestHandle req) { |
| NOTIMPLEMENTED(); |
| } |
| |
| void MockCertVerifier::AddResultForCert(X509Certificate* cert, |
| const CertVerifyResult& verify_result, |
| int rv) { |
| AddResultForCertAndHost(cert, "*", verify_result, rv); |
| } |
| |
| void MockCertVerifier::AddResultForCertAndHost( |
| X509Certificate* cert, |
| const std::string& host_pattern, |
| const CertVerifyResult& verify_result, |
| int rv) { |
| Rule rule(cert, host_pattern, verify_result, rv); |
| rules_.push_back(rule); |
| } |
| |
| } // namespace net |