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#ifndef CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/string16.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/x509_certificate.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GURL; 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This class describes an error that happened while showing a page over SSL. 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// An SSLErrorInfo object only exists on the UI thread and only contains 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// information about an error (type of error and text details). 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Note no DISALLOW_COPY_AND_ASSIGN as we want the copy constructor. 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SSLErrorInfo { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum ErrorType { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_COMMON_NAME_INVALID = 0, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_DATE_INVALID, 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_AUTHORITY_INVALID, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_CONTAINS_ERRORS, 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_NO_REVOCATION_MECHANISM, 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_UNABLE_TO_CHECK_REVOCATION, 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_REVOKED, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_INVALID, 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CERT_WEAK_SIGNATURE_ALGORITHM, 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CERT_NOT_IN_DNS, 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UNKNOWN 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~SSLErrorInfo(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Converts a network error code to an ErrorType. 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ErrorType NetErrorToErrorType(int net_error); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SSLErrorInfo CreateError(ErrorType error_type, 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::X509Certificate* cert, 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& request_url); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Populates the specified |errors| vector with the errors contained in 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |cert_status|. Returns the number of errors found. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callers only interested in the error count can pass NULL for |errors|. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static int GetErrorsForCertStatus(int cert_status, 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int cert_id, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& request_url, 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<SSLErrorInfo>* errors); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A title describing the error, usually to be used with the details below. 553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const string16& title() const { return title_; } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A description of the error. 583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const string16& details() const { return details_; } 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A short message describing the error (1 line). 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const string16& short_description() const { return short_description_; } 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A lengthy explanation of what the error is. Each entry in the returned 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // vector is a paragraph. 653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::vector<string16>& extra_information() const { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return extra_information_; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen SSLErrorInfo(const string16& title, 713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const string16& details, 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const string16& short_description, 733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::vector<string16>& extra_info); 743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 title_; 763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 details_; 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 short_description_; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Extra-informations contains paragraphs of text explaining in details what 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the error is and what the risks are. 803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen std::vector<string16> extra_information_; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 84