Chromium Code Reviews| 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..a5a807b881ad022299c981816a914fa655167a61 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,20 @@ 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))) { |
| + 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); |
|
Ryan Sleevi
2014/07/10 02:50:18
If certs_begin == certs_end, this will crash.
STL
mattm
2014/07/10 22:57:59
I added a dcheck, since it doesn't really make any
|
| base::FilePath suggested_path = |
| net::GenerateFileName(GURL::EmptyGURL(), // url |
| std::string(), // content_disposition |
| @@ -111,7 +119,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 +195,16 @@ 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); |
| + net::X509Certificate* cert) { |
| + net::X509Certificate::OSCertHandles cert_chain; |
| + x509_certificate_model::GetCertChainFromCert(cert, &cert_chain); |
| + 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); |
| } |