Index: content/browser/renderer_host/x509_user_cert_resource_handler.cc |
diff --git a/content/browser/renderer_host/x509_user_cert_resource_handler.cc b/content/browser/renderer_host/x509_user_cert_resource_handler.cc |
index aa3fe34e533f1c28c18d93e0a598201272df1560..877656ca7ef19278618bc42462fda16a533fb453 100644 |
--- a/content/browser/renderer_host/x509_user_cert_resource_handler.cc |
+++ b/content/browser/renderer_host/x509_user_cert_resource_handler.cc |
@@ -27,7 +27,8 @@ X509UserCertResourceHandler::X509UserCertResourceHandler( |
read_buffer_(NULL), |
resource_buffer_(NULL), |
render_process_host_id_(render_process_host_id), |
- render_view_id_(render_view_id) { |
+ render_view_id_(render_view_id), |
+ is_pkcs12_(false) { |
} |
X509UserCertResourceHandler::~X509UserCertResourceHandler() { |
@@ -50,7 +51,14 @@ bool X509UserCertResourceHandler::OnRequestRedirected(int request_id, |
bool X509UserCertResourceHandler::OnResponseStarted(int request_id, |
ResourceResponse* resp, |
bool* defer) { |
+#if defined(OS_ANDROID) |
+ is_pkcs12_ = (resp->head.mime_type == "application/x-pkcs12"); |
+ return (is_pkcs12_ || |
+ resp->head.mime_type == "application/x-x509-user-cert" || |
+ resp->head.mime_type == "application/x-x509-ca-cert"); |
+#else |
return (resp->head.mime_type == "application/x-x509-user-cert"); |
+#endif |
} |
bool X509UserCertResourceHandler::OnWillStart(int request_id, |
@@ -104,6 +112,13 @@ bool X509UserCertResourceHandler::OnResponseCompleted( |
return false; |
AssembleResource(); |
+#if defined(OS_ANDROID) |
+ if (resource_buffer_ && content_length_ > 0) { |
+ std::string cert_data(resource_buffer_->data(), content_length_); |
+ content::GetContentClient()->browser()->AddNewCertificateOrKeychainAndroid( |
+ request_, cert_data.c_str(), cert_data.length(), is_pkcs12_); |
+ } |
+#else // OS_ANDROID |
scoped_refptr<net::X509Certificate> cert; |
if (resource_buffer_) { |
cert = net::X509Certificate::CreateFromBytes(resource_buffer_->data(), |
@@ -111,6 +126,7 @@ bool X509UserCertResourceHandler::OnResponseCompleted( |
} |
GetContentClient()->browser()->AddNewCertificate( |
request_, cert, render_process_host_id_, render_view_id_); |
+#endif // OS_ANDROID |
return true; |
} |