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_TAB_HELPER_H_
      6 #define CHROME_BROWSER_SSL_SSL_TAB_HELPER_H_
      7 
      8 #include <map>
      9 
     10 #include "base/callback_forward.h"
     11 #include "base/memory/linked_ptr.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "content/public/browser/web_contents_observer.h"
     14 #include "content/public/browser/web_contents_user_data.h"
     15 
     16 class SSLAddCertHandler;
     17 
     18 namespace net {
     19 class HttpNetworkSession;
     20 class SSLCertRequestInfo;
     21 class X509Certificate;
     22 }
     23 
     24 class SSLTabHelper : public content::WebContentsObserver,
     25                      public content::WebContentsUserData<SSLTabHelper> {
     26  public:
     27   virtual ~SSLTabHelper();
     28 
     29   // content::WebContentsObserver:
     30   virtual void DidChangeVisibleSSLState() OVERRIDE;
     31 
     32   // Called when |handler| encounters an error in verifying a received client
     33   // certificate. Note that, because CAs often will not send us intermediate
     34   // certificates, the verification we can do is minimal: we verify the
     35   // certificate is parseable, that we have the corresponding private key, and
     36   // that the certificate has not expired.
     37   void OnVerifyClientCertificateError(
     38       scoped_refptr<SSLAddCertHandler> handler, int error_code);
     39 
     40   // Called when |handler| requests the user's confirmation in adding a client
     41   // certificate.
     42   void AskToAddClientCertificate(
     43       scoped_refptr<SSLAddCertHandler> handler);
     44 
     45   // Called when |handler| successfully adds a client certificate.
     46   void OnAddClientCertificateSuccess(
     47       scoped_refptr<SSLAddCertHandler> handler);
     48 
     49   // Called when |handler| encounters an error adding a client certificate.
     50   void OnAddClientCertificateError(
     51       scoped_refptr<SSLAddCertHandler> handler, int error_code);
     52 
     53   // Called when |handler| has completed, so the delegate may release any state
     54   // accumulated.
     55   void OnAddClientCertificateFinished(
     56       scoped_refptr<SSLAddCertHandler> handler);
     57 
     58   // Displays a dialog for selecting a client certificate and returns it to
     59   // the |handler|.
     60   void ShowClientCertificateRequestDialog(
     61       const net::HttpNetworkSession* network_session,
     62       net::SSLCertRequestInfo* cert_request_info,
     63       const base::Callback<void(net::X509Certificate*)>& callback);
     64 
     65  private:
     66   explicit SSLTabHelper(content::WebContents* contents);
     67   friend class content::WebContentsUserData<SSLTabHelper>;
     68 
     69   content::WebContents* web_contents_;
     70 
     71   class SSLAddCertData;
     72   std::map<int, linked_ptr<SSLAddCertData> > request_id_to_add_cert_data_;
     73 
     74   SSLAddCertData* GetAddCertData(SSLAddCertHandler* handler);
     75 
     76   DISALLOW_COPY_AND_ASSIGN(SSLTabHelper);
     77 };
     78 
     79 #endif  // CHROME_BROWSER_SSL_SSL_TAB_HELPER_H_
     80