Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1207)

Unified Diff: chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc

Issue 2898573002: Refactor client cert private key handling. (Closed)
Patch Set: removed no longer needed forward declaration Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc
diff --git a/chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc b/chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc
index 5549a3d257b5c0438656d6747b2065357054bd12..bd7845d80a97aa6a69857953481630f4e0d8ad8b 100644
--- a/chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc
+++ b/chrome/browser/ui/views/platform_keys_certificate_selector_chromeos.cc
@@ -8,23 +8,58 @@
#include <utility>
#include "base/callback_helpers.h"
+#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/grit/generated_resources.h"
+#include "net/ssl/client_cert_identity.h"
+#include "net/ssl/ssl_private_key.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/font.h"
#include "ui/views/controls/styled_label.h"
namespace chromeos {
+namespace {
+
+// Fake ClientCertIdentity that does not support retrieving the private key.
+// The platformKeys API currently only deals in certificates, not identities.
+// Looking up the private key by the certificate is done as a separate step.
+class ClientCertIdentityPlatformKeys : public net::ClientCertIdentity {
+ public:
+ explicit ClientCertIdentityPlatformKeys(
+ scoped_refptr<net::X509Certificate> cert)
+ : net::ClientCertIdentity(std::move(cert)) {}
+ ~ClientCertIdentityPlatformKeys() override = default;
+
+ void AcquirePrivateKey(
+ const base::Callback<void(scoped_refptr<net::SSLPrivateKey>)>&
+ private_key_callback) override {
+ NOTREACHED();
+ }
+};
+
+net::ClientCertIdentityList CertificateListToIdentityList(
+ const net::CertificateList& certs) {
+ net::ClientCertIdentityList identities;
+ for (const auto& cert : certs) {
+ identities.push_back(
+ base::MakeUnique<ClientCertIdentityPlatformKeys>(cert));
+ }
+ return identities;
+}
+
+} // namespace
+
PlatformKeysCertificateSelector::PlatformKeysCertificateSelector(
const net::CertificateList& certificates,
const std::string& extension_name,
const CertificateSelectedCallback& callback,
content::WebContents* web_contents)
- : CertificateSelector(certificates, web_contents),
+ : CertificateSelector(CertificateListToIdentityList(certificates),
+ web_contents),
extension_name_(extension_name),
callback_(callback) {
DCHECK(!callback_.is_null());
@@ -61,13 +96,11 @@ bool PlatformKeysCertificateSelector::Cancel() {
return true;
}
-bool PlatformKeysCertificateSelector::Accept() {
+void PlatformKeysCertificateSelector::AcceptCertificate(
+ std::unique_ptr<net::ClientCertIdentity> identity) {
DCHECK(!callback_.is_null());
- scoped_refptr<net::X509Certificate> cert = GetSelectedCert();
- if (!cert)
- return false;
- base::ResetAndReturn(&callback_).Run(cert);
- return true;
+ base::ResetAndReturn(&callback_)
+ .Run(make_scoped_refptr(identity->certificate()));
}
void ShowPlatformKeysCertificateSelector(

Powered by Google App Engine
This is Rietveld 408576698