Index: chrome/browser/ui/views/certificate_viewer_win.cc |
diff --git a/chrome/browser/ui/views/certificate_viewer_win.cc b/chrome/browser/ui/views/certificate_viewer_win.cc |
index 03635b47ed89d5d3e40d90fddf861a5af0ffa3b6..827ef99f8b1002fe6cb7a914c734288d72394d54 100644 |
--- a/chrome/browser/ui/views/certificate_viewer_win.cc |
+++ b/chrome/browser/ui/views/certificate_viewer_win.cc |
@@ -5,7 +5,6 @@ |
#include "chrome/browser/certificate_viewer.h" |
#include <windows.h> |
-#include <cryptuiapi.h> |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
@@ -16,7 +15,9 @@ |
#include "base/task_runner.h" |
#include "base/threading/thread.h" |
#include "base/threading/thread_task_runner_handle.h" |
+#include "chrome/browser/ui/cryptuiapi_shim.h" |
#include "net/cert/x509_certificate.h" |
+#include "net/cert/x509_util_win.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_tree_host.h" |
#include "ui/shell_dialogs/base_shell_dialog_win.h" |
@@ -53,23 +54,26 @@ class CertificateViewerDialog : public ui::BaseShellDialogImpl { |
const scoped_refptr<net::X509Certificate>& cert) { |
// Create a new cert context and store containing just the certificate |
// and its intermediate certificates. |
- PCCERT_CONTEXT cert_list = cert->CreateOSCertChainForCert(); |
- CHECK(cert_list); |
+ net::ScopedPCCERT_CONTEXT cert_list( |
+ net::x509_util::CreateCertContextWithChain(cert.get())); |
+ // Perhaps this should show an error instead of silently failing, but it's |
+ // probably not even possible to get here with a cert that can't be |
+ // converted to a CERT_CONTEXT. |
+ if (!cert_list) |
+ return; |
CRYPTUI_VIEWCERTIFICATE_STRUCT view_info = {0}; |
view_info.dwSize = sizeof(view_info); |
view_info.hwndParent = run_state.owner; |
view_info.dwFlags = |
CRYPTUI_DISABLE_EDITPROPERTIES | CRYPTUI_DISABLE_ADDTOSTORE; |
- view_info.pCertContext = cert_list; |
+ view_info.pCertContext = cert_list.get(); |
HCERTSTORE cert_store = cert_list->hCertStore; |
view_info.cStores = 1; |
view_info.rghStores = &cert_store; |
BOOL properties_changed; |
::CryptUIDlgViewCertificate(&view_info, &properties_changed); |
- |
- CertFreeCertificateContext(cert_list); |
} |
void OnDialogClosed(const RunState& run_state, |