Home | History | Annotate | Download | only in cert
      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