// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/certificate_viewer.h" #include <windows.h> #include <cryptuiapi.h> #pragma comment(lib, "cryptui.lib") #include "net/base/x509_certificate.h" void ShowCertificateViewer(gfx::NativeWindow parent, net::X509Certificate* cert) { CRYPTUI_VIEWCERTIFICATE_STRUCT view_info = { 0 }; view_info.dwSize = sizeof(view_info); // We set our parent to the tab window. This makes the cert dialog created // in CryptUIDlgViewCertificate modal to the browser. view_info.hwndParent = parent; view_info.dwFlags = CRYPTUI_DISABLE_EDITPROPERTIES | CRYPTUI_DISABLE_ADDTOSTORE; view_info.pCertContext = cert->os_cert_handle(); // Search the cert store that 'cert' is in when building the cert chain. HCERTSTORE cert_store = view_info.pCertContext->hCertStore; view_info.cStores = 1; view_info.rghStores = &cert_store; BOOL properties_changed; // This next call blocks but keeps processing windows messages, making it // modal to the browser window. BOOL rv = ::CryptUIDlgViewCertificate(&view_info, &properties_changed); }