1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2009 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#ifndef CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ssl/ssl_error_handler.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/ssl_info.h"
13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace net {
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass X509Certificate;
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A CertError represents an error that occurred with the certificate in an
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SSL session.  A CertError object exists both on the IO thread and on the UI
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// thread and allows us to cancel/continue a request it is associated with.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SSLCertErrorHandler : public SSLErrorHandler {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Construct on the IO thread.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SSLCertErrorHandler(ResourceDispatcherHost* rdh,
25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                      net::URLRequest* request,
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      ResourceType::Type resource_type,
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      int cert_error,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      net::X509Certificate* cert);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual SSLCertErrorHandler* AsSSLCertErrorHandler();
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These accessors are available on either thread
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const net::SSLInfo& ssl_info() const { return ssl_info_; }
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int cert_error() const { return cert_error_; }
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // SSLErrorHandler methods
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnDispatchFailed();
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnDispatched();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual ~SSLCertErrorHandler();
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These read-only members may be accessed on any thread.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::SSLInfo ssl_info_;
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int cert_error_;  // The error we represent.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(SSLCertErrorHandler);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_
52