Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(878)

Unified Diff: chrome/browser/ui/certificate_dialogs.cc

Issue 376753002: Fix webui cert viewer showing wrong cert chain on NSS and no chain on OpenSSL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/certificate_dialogs.cc
diff --git a/chrome/browser/ui/certificate_dialogs.cc b/chrome/browser/ui/certificate_dialogs.cc
index 79edfd3f20e45dddb805909ba766d7f9cd2f8bf1..4988e79cc3dd123c53591dad2da549905932b560 100644
--- a/chrome/browser/ui/certificate_dialogs.cc
+++ b/chrome/browser/ui/certificate_dialogs.cc
@@ -4,7 +4,7 @@
#include "chrome/browser/ui/certificate_dialogs.h"
-
+#include <algorithm>
#include <vector>
#include "base/base64.h"
@@ -65,8 +65,10 @@ std::string GetBase64String(net::X509Certificate::OSCertHandle cert) {
class Exporter : public ui::SelectFileDialog::Listener {
public:
- Exporter(WebContents* web_contents, gfx::NativeWindow parent,
- net::X509Certificate::OSCertHandle cert);
+ Exporter(WebContents* web_contents,
+ gfx::NativeWindow parent,
+ net::X509Certificate::OSCertHandles::iterator certs_begin,
msw 2014/07/11 17:25:40 nit: maybe use a typdef or using statement to make
mattm 2014/07/11 22:21:57 I'm not huge fan of that since it makes code harde
msw 2014/07/11 22:42:44 Acknowledged.
+ net::X509Certificate::OSCertHandles::iterator certs_end);
virtual ~Exporter();
// SelectFileDialog::Listener implemenation.
@@ -82,14 +84,21 @@ class Exporter : public ui::SelectFileDialog::Listener {
Exporter::Exporter(WebContents* web_contents,
gfx::NativeWindow parent,
- net::X509Certificate::OSCertHandle cert)
+ net::X509Certificate::OSCertHandles::iterator certs_begin,
+ net::X509Certificate::OSCertHandles::iterator certs_end)
: select_file_dialog_(ui::SelectFileDialog::Create(
- this, new ChromeSelectFilePolicy(web_contents))) {
- x509_certificate_model::GetCertChainFromCert(cert, &cert_chain_list_);
+ this,
+ new ChromeSelectFilePolicy(web_contents))) {
+ DCHECK(certs_begin != certs_end);
+ for (net::X509Certificate::OSCertHandles::iterator i = certs_begin;
+ i != certs_end;
+ ++i) {
+ cert_chain_list_.push_back(net::X509Certificate::DupOSCertHandle(*i));
+ }
// TODO(mattm): should this default to some directory?
// Maybe SavePackage::GetSaveDirPreference? (Except that it's private.)
- std::string cert_title = x509_certificate_model::GetTitle(cert);
+ std::string cert_title = x509_certificate_model::GetTitle(*certs_begin);
base::FilePath suggested_path =
net::GenerateFileName(GURL::EmptyGURL(), // url
std::string(), // content_disposition
@@ -111,7 +120,9 @@ Exporter::~Exporter() {
if (select_file_dialog_.get())
select_file_dialog_->ListenerDestroyed();
- x509_certificate_model::DestroyCertChain(&cert_chain_list_);
+ std::for_each(cert_chain_list_.begin(),
+ cert_chain_list_.end(),
+ &net::X509Certificate::FreeOSCertHandle);
}
void Exporter::FileSelected(const base::FilePath& path, int index,
@@ -185,6 +196,19 @@ void ShowCertSelectFileDialog(ui::SelectFileDialog* select_file_dialog,
void ShowCertExportDialog(WebContents* web_contents,
gfx::NativeWindow parent,
- net::X509Certificate::OSCertHandle cert) {
- new Exporter(web_contents, parent, cert);
+ const scoped_refptr<net::X509Certificate>& cert) {
+ net::X509Certificate::OSCertHandles cert_chain;
+ cert_chain.push_back(cert->os_cert_handle());
+ const net::X509Certificate::OSCertHandles& certs =
+ cert->GetIntermediateCertificates();
+ cert_chain.insert(cert_chain.end(), certs.begin(), certs.end());
+ new Exporter(web_contents, parent, cert_chain.begin(), cert_chain.end());
+}
+
+void ShowCertExportDialog(
+ content::WebContents* web_contents,
+ gfx::NativeWindow parent,
+ net::X509Certificate::OSCertHandles::iterator certs_begin,
+ net::X509Certificate::OSCertHandles::iterator certs_end) {
+ new Exporter(web_contents, parent, certs_begin, certs_end);
}

Powered by Google App Engine
This is Rietveld 408576698