diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-13 21:19:40 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-13 21:19:40 +0000 |
commit | 7a593db3f93fc3ca3bb51d96ba32694b8568a0df (patch) | |
tree | 46f6f091ed336d593e84d1a018ff12d49e0ec3bd /chrome/browser/ssl/ssl_client_auth_observer.h | |
parent | a2a220bbd154837c4f9e6eaf3e715cbe2ba9362c (diff) | |
download | chromium_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.h | 64 |
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_ |