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_cert_error_handler.h"
6
7#include "content/browser/ssl/ssl_manager.h"
8#include "content/browser/ssl/ssl_policy.h"
9#include "net/cert/cert_status_flags.h"
10#include "net/cert/x509_certificate.h"
11
12namespace content {
13
14SSLCertErrorHandler::SSLCertErrorHandler(
15    const base::WeakPtr<Delegate>& delegate,
16    const GlobalRequestID& id,
17    ResourceType resource_type,
18    const GURL& url,
19    int render_process_id,
20    int render_frame_id,
21    const net::SSLInfo& ssl_info,
22    bool fatal)
23    : SSLErrorHandler(delegate,
24                      id,
25                      resource_type,
26                      url,
27                      render_process_id,
28                      render_frame_id),
29      ssl_info_(ssl_info),
30      cert_error_(net::MapCertStatusToNetError(ssl_info.cert_status)),
31      fatal_(fatal) {
32}
33
34SSLCertErrorHandler* SSLCertErrorHandler::AsSSLCertErrorHandler() {
35  return this;
36}
37
38void SSLCertErrorHandler::OnDispatchFailed() {
39  // Requests can fail to dispatch because they don't have a WebContents. See
40  // <http://crbug.com/86537>. In this case we have to make a decision in this
41  // function, so we ignore revocation check failures.
42  if (net::IsCertStatusMinorError(ssl_info().cert_status)) {
43    ContinueRequest();
44  } else {
45    CancelRequest();
46  }
47}
48
49void SSLCertErrorHandler::OnDispatched() {
50  manager_->policy()->OnCertError(this);
51}
52
53SSLCertErrorHandler::~SSLCertErrorHandler() {}
54
55}  // namespace content
56