1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/certificate_viewer.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <windows.h> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <cryptuiapi.h> 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#pragma comment(lib, "cryptui.lib") 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/x509_certificate.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ShowCertificateViewer(gfx::NativeWindow parent, 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::X509Certificate* cert) { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CRYPTUI_VIEWCERTIFICATE_STRUCT view_info = { 0 }; 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.dwSize = sizeof(view_info); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We set our parent to the tab window. This makes the cert dialog created 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in CryptUIDlgViewCertificate modal to the browser. 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.hwndParent = parent; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.dwFlags = CRYPTUI_DISABLE_EDITPROPERTIES | 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CRYPTUI_DISABLE_ADDTOSTORE; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.pCertContext = cert->os_cert_handle(); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search the cert store that 'cert' is in when building the cert chain. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HCERTSTORE cert_store = view_info.pCertContext->hCertStore; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.cStores = 1; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch view_info.rghStores = &cert_store; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BOOL properties_changed; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This next call blocks but keeps processing windows messages, making it 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // modal to the browser window. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BOOL rv = ::CryptUIDlgViewCertificate(&view_info, &properties_changed); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 33