Index: content/child/web_url_loader_impl.cc |
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc |
index 17da0e103519d484dec9df5c4376e17e589aa2f0..672d82c36a23a7947ae62125dd8532ac3aff4445 100644 |
--- a/content/child/web_url_loader_impl.cc |
+++ b/content/child/web_url_loader_impl.cc |
@@ -33,8 +33,8 @@ |
#include "content/child/weburlresponse_extradata_impl.h" |
#include "content/common/resource_messages.h" |
#include "content/common/resource_request_body_impl.h" |
+#include "content/common/security_style_util.h" |
#include "content/common/service_worker/service_worker_types.h" |
-#include "content/common/ssl_status_serialization.h" |
#include "content/common/url_loader.mojom.h" |
#include "content/public/child/fixed_received_data.h" |
#include "content/public/child/request_peer.h" |
@@ -45,6 +45,7 @@ |
#include "net/base/net_errors.h" |
#include "net/cert/cert_status_flags.h" |
#include "net/cert/ct_sct_to_string.h" |
+#include "net/cert/x509_util.h" |
#include "net/http/http_response_headers.h" |
#include "net/http/http_util.h" |
#include "net/ssl/ssl_cipher_suite_names.h" |
@@ -224,22 +225,13 @@ void SetSecurityStyleAndDetails(const GURL& url, |
// There are cases where an HTTPS request can come in without security |
// info attached (such as a redirect response). |
- const std::string& security_info = info.security_info; |
- if (security_info.empty()) { |
+ if (info.certificate.empty()) { |
response->setSecurityStyle(WebURLResponse::SecurityStyleUnknown); |
return; |
} |
- SSLStatus ssl_status; |
- if (!DeserializeSecurityInfo(security_info, &ssl_status)) { |
- response->setSecurityStyle(WebURLResponse::SecurityStyleUnknown); |
- DLOG(ERROR) |
- << "DeserializeSecurityInfo() failed for an authenticated request."; |
- return; |
- } |
- |
int ssl_version = |
- net::SSLConnectionStatusToVersion(ssl_status.connection_status); |
+ net::SSLConnectionStatusToVersion(info.ssl_connection_status); |
const char* protocol; |
net::SSLVersionToString(&protocol, ssl_version); |
@@ -248,7 +240,7 @@ void SetSecurityStyleAndDetails(const GURL& url, |
const char* mac; |
bool is_aead; |
uint16_t cipher_suite = |
- net::SSLConnectionStatusToCipherSuite(ssl_status.connection_status); |
+ net::SSLConnectionStatusToCipherSuite(info.ssl_connection_status); |
net::SSLCipherSuiteToStrings(&key_exchange, &cipher, &mac, &is_aead, |
cipher_suite); |
if (mac == NULL) { |
@@ -256,27 +248,30 @@ void SetSecurityStyleAndDetails(const GURL& url, |
mac = ""; |
} |
- blink::WebURLResponse::SecurityStyle securityStyle = |
+ SecurityStyle security_style = GetSecurityStyleForResource( |
+ url, true, info.cert_status); |
+ |
+ blink::WebURLResponse::SecurityStyle security_style_blink = |
WebURLResponse::SecurityStyleUnknown; |
- switch (ssl_status.security_style) { |
+ switch (security_style) { |
case SECURITY_STYLE_UNKNOWN: |
- securityStyle = WebURLResponse::SecurityStyleUnknown; |
+ security_style_blink = WebURLResponse::SecurityStyleUnknown; |
break; |
case SECURITY_STYLE_UNAUTHENTICATED: |
- securityStyle = WebURLResponse::SecurityStyleUnauthenticated; |
+ security_style_blink = WebURLResponse::SecurityStyleUnauthenticated; |
break; |
case SECURITY_STYLE_AUTHENTICATION_BROKEN: |
- securityStyle = WebURLResponse::SecurityStyleAuthenticationBroken; |
+ security_style_blink = WebURLResponse::SecurityStyleAuthenticationBroken; |
break; |
case SECURITY_STYLE_WARNING: |
- securityStyle = WebURLResponse::SecurityStyleWarning; |
+ security_style_blink = WebURLResponse::SecurityStyleWarning; |
break; |
case SECURITY_STYLE_AUTHENTICATED: |
- securityStyle = WebURLResponse::SecurityStyleAuthenticated; |
+ security_style_blink = WebURLResponse::SecurityStyleAuthenticated; |
break; |
} |
- response->setSecurityStyle(securityStyle); |
+ response->setSecurityStyle(security_style_blink); |
blink::WebURLResponse::SignedCertificateTimestampList sct_list( |
info.signed_certificate_timestamps.size()); |
@@ -284,9 +279,39 @@ void SetSecurityStyleAndDetails(const GURL& url, |
for (size_t i = 0; i < sct_list.size(); ++i) |
sct_list[i] = NetSCTToBlinkSCT(info.signed_certificate_timestamps[i]); |
+ std::string subject, issuer; |
+ base::Time valid_start, valid_expiry; |
+ std::vector<std::string> san; |
+ bool rv = net::x509_util::ParseCertificateSandboxed( |
+ info.certificate[0], &subject, &issuer, &valid_start, &valid_expiry, &san, |
+ &san); |
+ if (!rv) { |
+ NOTREACHED(); |
+ response->setSecurityStyle(WebURLResponse::SecurityStyleUnknown); |
+ return; |
+ } |
+ |
+ blink::WebVector<blink::WebString> web_san(san.size()); |
+ std::transform( |
+ san.begin(), |
+ san.end(), web_san.begin(), |
+ [](const std::string& h) { return blink::WebString::fromLatin1(h); }); |
+ |
+ blink::WebVector<blink::WebString> web_cert(info.certificate.size()); |
+ std::transform( |
+ info.certificate.begin(), |
+ info.certificate.end(), web_cert.begin(), |
+ [](const std::string& h) { return blink::WebString::fromLatin1(h); }); |
+ |
blink::WebURLResponse::WebSecurityDetails webSecurityDetails( |
WebString::fromUTF8(protocol), WebString::fromUTF8(key_exchange), |
- WebString::fromUTF8(cipher), WebString::fromUTF8(mac), ssl_status.cert_id, |
+ WebString::fromUTF8(cipher), WebString::fromUTF8(mac), |
+ WebString::fromUTF8(subject), |
+ web_san, |
+ WebString::fromUTF8(issuer), |
+ valid_start.ToDoubleT(), |
+ valid_expiry.ToDoubleT(), |
+ web_cert, |
sct_list); |
response->setSecurityDetails(webSecurityDetails); |