1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 6 #define CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/strings/string16.h" 12 #include "net/cert/cert_status_flags.h" 13 #include "net/cert/x509_certificate.h" 14 15 class GURL; 16 17 // This class describes an error that happened while showing a page over SSL. 18 // An SSLErrorInfo object only exists on the UI thread and only contains 19 // information about an error (type of error and text details). 20 // Note no DISALLOW_COPY_AND_ASSIGN as we want the copy constructor. 21 class SSLErrorInfo { 22 public: 23 // This enum is being histogrammed; please only add new values at the end. 24 enum ErrorType { 25 CERT_COMMON_NAME_INVALID = 0, 26 CERT_DATE_INVALID, 27 CERT_AUTHORITY_INVALID, 28 CERT_CONTAINS_ERRORS, 29 CERT_NO_REVOCATION_MECHANISM, 30 CERT_UNABLE_TO_CHECK_REVOCATION, 31 CERT_REVOKED, 32 CERT_INVALID, 33 CERT_WEAK_SIGNATURE_ALGORITHM, 34 CERT_WEAK_KEY, 35 CERT_NAME_CONSTRAINT_VIOLATION, 36 UNKNOWN, 37 CERT_WEAK_KEY_DH, 38 CERT_PINNED_KEY_MISSING, 39 END_OF_ENUM 40 }; 41 42 virtual ~SSLErrorInfo(); 43 44 // Converts a network error code to an ErrorType. 45 static ErrorType NetErrorToErrorType(int net_error); 46 47 static SSLErrorInfo CreateError(ErrorType error_type, 48 net::X509Certificate* cert, 49 const GURL& request_url); 50 51 // Populates the specified |errors| vector with the errors contained in 52 // |cert_status|. Returns the number of errors found. 53 // Callers only interested in the error count can pass NULL for |errors|. 54 // TODO(wtc): Document |cert_id| and |url| arguments. 55 static int GetErrorsForCertStatus(int cert_id, 56 net::CertStatus cert_status, 57 const GURL& url, 58 std::vector<SSLErrorInfo>* errors); 59 60 // A title describing the error, usually to be used with the details below. 61 const base::string16& title() const { return title_; } 62 63 // A description of the error. 64 const base::string16& details() const { return details_; } 65 66 // A short message describing the error (1 line). 67 const base::string16& short_description() const { return short_description_; } 68 69 // A lengthy explanation of what the error is. Each entry in the returned 70 // vector is a paragraph. 71 const std::vector<base::string16>& extra_information() const { 72 return extra_information_; 73 } 74 75 private: 76 SSLErrorInfo(const base::string16& title, 77 const base::string16& details, 78 const base::string16& short_description, 79 const std::vector<base::string16>& extra_info); 80 81 base::string16 title_; 82 base::string16 details_; 83 base::string16 short_description_; 84 // Extra-informations contains paragraphs of text explaining in details what 85 // the error is and what the risks are. 86 std::vector<base::string16> extra_information_; 87 }; 88 89 #endif // CHROME_BROWSER_SSL_SSL_ERROR_INFO_H_ 90