Index: content/browser/renderer_host/x509_user_cert_resource_handler.cc |
=================================================================== |
--- content/browser/renderer_host/x509_user_cert_resource_handler.cc (revision 134554) |
+++ content/browser/renderer_host/x509_user_cert_resource_handler.cc (working copy) |
@@ -101,9 +101,26 @@ |
AssembleResource(); |
scoped_refptr<net::X509Certificate> cert; |
if (resource_buffer_) { |
- cert = net::X509Certificate::CreateFromBytes(resource_buffer_->data(), |
- content_length_); |
+ FILE* file = fopen("keygen-response", "w"); |
+ fwrite(resource_buffer_->data(), 1, content_length_, file); |
+ fclose(file); |
+ net::CertificateList cert_list = |
+ net::X509Certificate::CreateCertificateListFromBytes( |
+ resource_buffer_->data(), content_length_, |
+ net::X509Certificate::FORMAT_AUTO); |
+ if (cert_list.size()) { |
+ fprintf(stderr, "cert_list.size()=%d\n", (int)cert_list.size()); |
+ net::X509Certificate::OSCertHandle cert_handle = |
+ cert_list[0]->os_cert_handle(); |
+ net::X509Certificate::OSCertHandles intermediate_certs; |
+ for (size_t i = 1; i < cert_list.size(); ++i) |
+ intermediate_certs.push_back(cert_list[i]->os_cert_handle()); |
+ cert = net::X509Certificate::CreateFromHandle(cert_handle, |
+ intermediate_certs); |
+ } |
} |
+ // TODO(wtc): change ContentBrowserClient::AddNewCertificate() to take |
+ // a net::CertificateList instead of a net::X509Certificate? |
content::GetContentClient()->browser()->AddNewCertificate( |
request_, cert, render_process_host_id_, render_view_id_); |
return true; |