1 // Copyright (c) 2012 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/cert/mock_cert_verifier.h" 6 7 #include "base/memory/ref_counted.h" 8 #include "base/strings/string_util.h" 9 #include "net/base/net_errors.h" 10 #include "net/cert/cert_status_flags.h" 11 #include "net/cert/cert_verify_result.h" 12 #include "net/cert/x509_certificate.h" 13 14 namespace net { 15 16 struct MockCertVerifier::Rule { 17 Rule(X509Certificate* cert, 18 const std::string& hostname, 19 const CertVerifyResult& result, 20 int rv) 21 : cert(cert), 22 hostname(hostname), 23 result(result), 24 rv(rv) { 25 DCHECK(cert); 26 DCHECK(result.verified_cert.get()); 27 } 28 29 scoped_refptr<X509Certificate> cert; 30 std::string hostname; 31 CertVerifyResult result; 32 int rv; 33 }; 34 35 MockCertVerifier::MockCertVerifier() : default_result_(ERR_CERT_INVALID) {} 36 37 MockCertVerifier::~MockCertVerifier() {} 38 39 int MockCertVerifier::Verify(X509Certificate* cert, 40 const std::string& hostname, 41 int flags, 42 CRLSet* crl_set, 43 CertVerifyResult* verify_result, 44 const CompletionCallback& callback, 45 RequestHandle* out_req, 46 const BoundNetLog& net_log) { 47 RuleList::const_iterator it; 48 for (it = rules_.begin(); it != rules_.end(); ++it) { 49 // Check just the server cert. Intermediates will be ignored. 50 if (!it->cert->Equals(cert)) 51 continue; 52 if (!MatchPattern(hostname, it->hostname)) 53 continue; 54 *verify_result = it->result; 55 return it->rv; 56 } 57 58 // Fall through to the default. 59 verify_result->verified_cert = cert; 60 verify_result->cert_status = MapNetErrorToCertStatus(default_result_); 61 return default_result_; 62 } 63 64 void MockCertVerifier::CancelRequest(RequestHandle req) { 65 NOTIMPLEMENTED(); 66 } 67 68 void MockCertVerifier::AddResultForCert(X509Certificate* cert, 69 const CertVerifyResult& verify_result, 70 int rv) { 71 AddResultForCertAndHost(cert, "*", verify_result, rv); 72 } 73 74 void MockCertVerifier::AddResultForCertAndHost( 75 X509Certificate* cert, 76 const std::string& host_pattern, 77 const CertVerifyResult& verify_result, 78 int rv) { 79 Rule rule(cert, host_pattern, verify_result, rv); 80 rules_.push_back(rule); 81 } 82 83 } // namespace net 84