Home | History | Annotate | Download | only in ssl
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_
      6 #define CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/ref_counted.h"
     10 #include "content/public/browser/notification_observer.h"
     11 #include "content/public/browser/notification_registrar.h"
     12 
     13 namespace net {
     14 class HttpNetworkSession;
     15 class SSLCertRequestInfo;
     16 class X509Certificate;
     17 }
     18 
     19 class SSLClientAuthObserver : public content::NotificationObserver {
     20  public:
     21   SSLClientAuthObserver(
     22       const net::HttpNetworkSession* network_session,
     23       net::SSLCertRequestInfo* cert_request_info,
     24       const base::Callback<void(net::X509Certificate*)>& callback);
     25   virtual ~SSLClientAuthObserver();
     26 
     27   // UI should implement this to close the dialog.
     28   virtual void OnCertSelectedByNotification() = 0;
     29 
     30   // Send content the certificate. Can also call with NULL if the user
     31   // cancelled. Derived classes must use this instead of caching the callback
     32   // and calling it directly.
     33   void CertificateSelected(net::X509Certificate* cert);
     34 
     35   // Begins observing notifications from other SSLClientAuthHandler instances.
     36   // If another instance chooses a cert for a matching SSLCertRequestInfo, we
     37   // will also use the same cert and OnCertSelectedByNotification will be called
     38   // so that the cert selection UI can be closed.
     39   void StartObserving();
     40 
     41   // Stops observing notifications.  We will no longer act on client auth
     42   // notifications.
     43   void StopObserving();
     44 
     45   net::SSLCertRequestInfo* cert_request_info() const {
     46     return cert_request_info_.get();
     47   }
     48 
     49  private:
     50   // content::NotificationObserver implementation:
     51   virtual void Observe(int type,
     52                        const content::NotificationSource& source,
     53                        const content::NotificationDetails& details) OVERRIDE;
     54 
     55   const net::HttpNetworkSession* network_session_;
     56   scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
     57   base::Callback<void(net::X509Certificate*)> callback_;
     58   content::NotificationRegistrar notification_registrar_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(SSLClientAuthObserver);
     61 };
     62 
     63 #endif  // CHROME_BROWSER_SSL_SSL_CLIENT_AUTH_OBSERVER_H_
     64