1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ssl/ssl_host_state.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSSLHostState::SSLHostState() {
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSSLHostState::~SSLHostState() {
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SSLHostState::HostRanInsecureContent(const std::string& host, int pid) {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(CalledOnValidThread());
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ran_insecure_content_hosts_.insert(BrokenHostEntry(host, pid));
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool SSLHostState::DidHostRunInsecureContent(const std::string& host,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                             int pid) const {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(CalledOnValidThread());
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return !!ran_insecure_content_hosts_.count(BrokenHostEntry(host, pid));
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SSLHostState::DenyCertForHost(net::X509Certificate* cert,
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   const std::string& host) {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(CalledOnValidThread());
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  cert_policy_for_host_[host].Deny(cert);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SSLHostState::AllowCertForHost(net::X509Certificate* cert,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    const std::string& host) {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(CalledOnValidThread());
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  cert_policy_for_host_[host].Allow(cert);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnet::CertPolicy::Judgment SSLHostState::QueryPolicy(
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    net::X509Certificate* cert, const std::string& host) {
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(CalledOnValidThread());
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return cert_policy_for_host_[host].Check(cert);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
46