summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ssl/ssl_client_auth_observer.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-13 21:19:40 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-13 21:19:40 +0000
commit7a593db3f93fc3ca3bb51d96ba32694b8568a0df (patch)
tree46f6f091ed336d593e84d1a018ff12d49e0ec3bd /chrome/browser/ssl/ssl_client_auth_observer.h
parenta2a220bbd154837c4f9e6eaf3e715cbe2ba9362c (diff)
downloadchromium_src-7a593db3f93fc3ca3bb51d96ba32694b8568a0df.zip
chromium_src-7a593db3f93fc3ca3bb51d96ba32694b8568a0df.tar.gz
chromium_src-7a593db3f93fc3ca3bb51d96ba32694b8568a0df.tar.bz2
Remove knowledge about SSLClientAuthHandler from chrome. Instead a callback is given to the embedder to be run when the certificate is available.
BUG=98716 Review URL: https://chromiumcodereview.appspot.com/9384014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121733 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ssl/ssl_client_auth_observer.h')
-rw-r--r--chrome/browser/ssl/ssl_client_auth_observer.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/chrome/browser/ssl/ssl_client_auth_observer.h b/chrome/browser/ssl/ssl_client_auth_observer.h
new file mode 100644
index 0000000..637e998
--- /dev/null
+++ b/chrome/browser/ssl/ssl_client_auth_observer.h
@@ -0,0 +1,64 @@
+// Copyright (c) 2012 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.
+
+#ifndef CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_
+#define CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_
+#pragma once
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace net {
+class HttpNetworkSession;
+class SSLCertRequestInfo;
+class X509Certificate;
+}
+
+class SSLClientAuthObserver : public content::NotificationObserver {
+ public:
+ SSLClientAuthObserver(
+ const net::HttpNetworkSession* network_session,
+ net::SSLCertRequestInfo* cert_request_info,
+ const base::Callback<void(net::X509Certificate*)>& callback);
+ virtual ~SSLClientAuthObserver();
+
+ // UI should implement this to close the dialog.
+ virtual void OnCertSelectedByNotification() = 0;
+
+ // Send content the certificate. Can also call with NULL if the user
+ // cancelled. Derived classes must use this instead of caching the callback
+ // and calling it directly.
+ void CertificateSelected(net::X509Certificate* cert);
+
+ // Begins observing notifications from other SSLClientAuthHandler instances.
+ // If another instance chooses a cert for a matching SSLCertRequestInfo, we
+ // will also use the same cert and OnCertSelectedByNotification will be called
+ // so that the cert selection UI can be closed.
+ void StartObserving();
+
+ // Stops observing notifications. We will no longer act on client auth
+ // notifications.
+ void StopObserving();
+
+ net::SSLCertRequestInfo* cert_request_info() const {
+ return cert_request_info_;
+ }
+
+ private:
+ // content::NotificationObserver implementation:
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ const net::HttpNetworkSession* network_session_;
+ scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
+ base::Callback<void(net::X509Certificate*)> callback_;
+ content::NotificationRegistrar notification_registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(SSLClientAuthObserver);
+};
+
+#endif // CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_