// 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_TAB_HELPER_H_ #define CHROME_BROWSER_SSL_SSL_TAB_HELPER_H_ #include <map> #include "base/callback_forward.h" #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" class SSLAddCertHandler; namespace net { class HttpNetworkSession; class SSLCertRequestInfo; class X509Certificate; } class SSLTabHelper : public content::WebContentsObserver, public content::WebContentsUserData<SSLTabHelper> { public: virtual ~SSLTabHelper(); // content::WebContentsObserver: virtual void DidChangeVisibleSSLState() OVERRIDE; // Called when |handler| encounters an error in verifying a received client // certificate. Note that, because CAs often will not send us intermediate // certificates, the verification we can do is minimal: we verify the // certificate is parseable, that we have the corresponding private key, and // that the certificate has not expired. void OnVerifyClientCertificateError( scoped_refptr<SSLAddCertHandler> handler, int error_code); // Called when |handler| requests the user's confirmation in adding a client // certificate. void AskToAddClientCertificate( scoped_refptr<SSLAddCertHandler> handler); // Called when |handler| successfully adds a client certificate. void OnAddClientCertificateSuccess( scoped_refptr<SSLAddCertHandler> handler); // Called when |handler| encounters an error adding a client certificate. void OnAddClientCertificateError( scoped_refptr<SSLAddCertHandler> handler, int error_code); // Called when |handler| has completed, so the delegate may release any state // accumulated. void OnAddClientCertificateFinished( scoped_refptr<SSLAddCertHandler> handler); // Displays a dialog for selecting a client certificate and returns it to // the |handler|. void ShowClientCertificateRequestDialog( const net::HttpNetworkSession* network_session, net::SSLCertRequestInfo* cert_request_info, const base::Callback<void(net::X509Certificate*)>& callback); private: explicit SSLTabHelper(content::WebContents* contents); friend class content::WebContentsUserData<SSLTabHelper>; content::WebContents* web_contents_; class SSLAddCertData; std::map<int, linked_ptr<SSLAddCertData> > request_id_to_add_cert_data_; SSLAddCertData* GetAddCertData(SSLAddCertHandler* handler); DISALLOW_COPY_AND_ASSIGN(SSLTabHelper); }; #endif // CHROME_BROWSER_SSL_SSL_TAB_HELPER_H_