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..82f88f72960d13a7dc6bef23a864752c9b5511a7 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, |
+ 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, |
@@ -183,8 +194,10 @@ void ShowCertSelectFileDialog(ui::SelectFileDialog* select_file_dialog, |
parent, params); |
} |
-void ShowCertExportDialog(WebContents* web_contents, |
- gfx::NativeWindow parent, |
- net::X509Certificate::OSCertHandle cert) { |
- new Exporter(web_contents, parent, cert); |
+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); |
} |