• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "content/browser/ssl/ssl_host_state.h"
6  
7  #include "base/logging.h"
8  #include "base/lazy_instance.h"
9  #include "content/public/browser/browser_context.h"
10  
11  const char kKeyName[] = "content_ssl_host_state";
12  
13  namespace content {
14  
GetFor(BrowserContext * context)15  SSLHostState* SSLHostState::GetFor(BrowserContext* context) {
16    SSLHostState* rv = static_cast<SSLHostState*>(context->GetUserData(kKeyName));
17    if (!rv) {
18      rv = new SSLHostState();
19      context->SetUserData(kKeyName, rv);
20    }
21    return rv;
22  }
23  
SSLHostState()24  SSLHostState::SSLHostState() {
25  }
26  
~SSLHostState()27  SSLHostState::~SSLHostState() {
28  }
29  
HostRanInsecureContent(const std::string & host,int pid)30  void SSLHostState::HostRanInsecureContent(const std::string& host, int pid) {
31    DCHECK(CalledOnValidThread());
32    ran_insecure_content_hosts_.insert(BrokenHostEntry(host, pid));
33  }
34  
DidHostRunInsecureContent(const std::string & host,int pid) const35  bool SSLHostState::DidHostRunInsecureContent(const std::string& host,
36                                               int pid) const {
37    DCHECK(CalledOnValidThread());
38    return !!ran_insecure_content_hosts_.count(BrokenHostEntry(host, pid));
39  }
40  
DenyCertForHost(net::X509Certificate * cert,const std::string & host,net::CertStatus error)41  void SSLHostState::DenyCertForHost(net::X509Certificate* cert,
42                                     const std::string& host,
43                                     net::CertStatus error) {
44    DCHECK(CalledOnValidThread());
45  
46    cert_policy_for_host_[host].Deny(cert, error);
47  }
48  
AllowCertForHost(net::X509Certificate * cert,const std::string & host,net::CertStatus error)49  void SSLHostState::AllowCertForHost(net::X509Certificate* cert,
50                                      const std::string& host,
51                                      net::CertStatus error) {
52    DCHECK(CalledOnValidThread());
53  
54    cert_policy_for_host_[host].Allow(cert, error);
55  }
56  
Clear()57  void SSLHostState::Clear() {
58    DCHECK(CalledOnValidThread());
59  
60    cert_policy_for_host_.clear();
61  }
62  
QueryPolicy(net::X509Certificate * cert,const std::string & host,net::CertStatus error)63  net::CertPolicy::Judgment SSLHostState::QueryPolicy(net::X509Certificate* cert,
64                                                      const std::string& host,
65                                                      net::CertStatus error) {
66    DCHECK(CalledOnValidThread());
67  
68    return cert_policy_for_host_[host].Check(cert, error);
69  }
70  
71  }  // namespace content
72