Index: chrome/browser/net/certificate_error_reporter.cc |
diff --git a/chrome/browser/net/certificate_error_reporter.cc b/chrome/browser/net/certificate_error_reporter.cc |
index edff489f4ca0762dac6eb03bf554a1bc7e0adef2..b5de02482eede20f84db04b35801659dee01155b 100644 |
--- a/chrome/browser/net/certificate_error_reporter.cc |
+++ b/chrome/browser/net/certificate_error_reporter.cc |
@@ -28,6 +28,8 @@ |
namespace { |
+using chrome_browser_net::CertLoggerRequest; |
+ |
// Constants used for crypto |
static const uint8 kServerPublicKey[] = { |
0x51, 0xcc, 0x52, 0x67, 0x42, 0x47, 0x3b, 0x10, 0xe8, 0x63, 0x18, |
@@ -81,6 +83,41 @@ bool EncryptSerializedReport( |
} |
#endif |
+void AddCertStatusToReportErrors( |
+ net::CertStatus cert_status, |
+ CertLoggerRequest* report) { |
+ if (cert_status & net::CERT_STATUS_REVOKED) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_REVOKED); |
+ if (cert_status & net::CERT_STATUS_INVALID) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_INVALID); |
+ if (cert_status & net::CERT_STATUS_PINNED_KEY_MISSING) |
+ report->add_cert_error( |
+ CertLoggerRequest::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN); |
+ if (cert_status & net::CERT_STATUS_AUTHORITY_INVALID) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_AUTHORITY_INVALID); |
+ if (cert_status & net::CERT_STATUS_COMMON_NAME_INVALID) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_COMMON_NAME_INVALID); |
+ if (cert_status & net::CERT_STATUS_NON_UNIQUE_NAME) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_NON_UNIQUE_NAME); |
+ if (cert_status & net::CERT_STATUS_NAME_CONSTRAINT_VIOLATION) |
+ report->add_cert_error( |
+ CertLoggerRequest::ERR_CERT_NAME_CONSTRAINT_VIOLATION); |
+ if (cert_status & net::CERT_STATUS_WEAK_SIGNATURE_ALGORITHM) |
+ report->add_cert_error( |
+ CertLoggerRequest::ERR_CERT_WEAK_SIGNATURE_ALGORITHM); |
+ if (cert_status & net::CERT_STATUS_WEAK_KEY) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_WEAK_KEY); |
+ if (cert_status & net::CERT_STATUS_DATE_INVALID) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_DATE_INVALID); |
+ if (cert_status & net::CERT_STATUS_VALIDITY_TOO_LONG) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_VALIDITY_TOO_LONG); |
+ if (cert_status & net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION) |
+ report->add_cert_error( |
+ CertLoggerRequest::ERR_CERT_UNABLE_TO_CHECK_REVOCATION); |
+ if (cert_status & net::CERT_STATUS_NO_REVOCATION_MECHANISM) |
+ report->add_cert_error(CertLoggerRequest::ERR_CERT_NO_REVOCATION_MECHANISM); |
+} |
+ |
} // namespace |
namespace chrome_browser_net { |
@@ -261,6 +298,8 @@ void CertificateErrorReporter::BuildReport(const std::string& hostname, |
*cert_chain += pem_encoded_chain[i]; |
out_request->add_pin(ssl_info.pinning_failure_log); |
+ |
+ AddCertStatusToReportErrors(ssl_info.cert_status, out_request); |
} |
void CertificateErrorReporter::RequestComplete(net::URLRequest* request) { |