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_UI_VIEWS_SSL_CLIENT_CERTIFICATE_SELECTOR_H_ 6 #define CHROME_BROWSER_UI_VIEWS_SSL_CLIENT_CERTIFICATE_SELECTOR_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/strings/string16.h" 13 #include "chrome/browser/ssl/ssl_client_auth_observer.h" 14 #include "chrome/browser/ssl/ssl_client_certificate_selector.h" 15 #include "ui/views/controls/button/button.h" 16 #include "ui/views/controls/table/table_view_observer.h" 17 #include "ui/views/window/dialog_delegate.h" 18 19 // This header file exists only for testing. Chrome should access the 20 // certificate selector only through the cross-platform interface 21 // chrome/browser/ssl_client_certificate_selector.h. 22 23 namespace net { 24 class SSLCertRequestInfo; 25 class X509Certificate; 26 } 27 28 namespace views { 29 class LabelButton; 30 class TableView; 31 class Widget; 32 } 33 34 class CertificateSelectorTableModel; 35 36 class SSLClientCertificateSelector : public SSLClientAuthObserver, 37 public views::DialogDelegateView, 38 public views::ButtonListener, 39 public views::TableViewObserver { 40 public: 41 SSLClientCertificateSelector( 42 content::WebContents* web_contents, 43 const net::HttpNetworkSession* network_session, 44 const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info, 45 const chrome::SelectCertificateCallback& callback); 46 virtual ~SSLClientCertificateSelector(); 47 48 void Init(); 49 50 net::X509Certificate* GetSelectedCert() const; 51 52 // SSLClientAuthObserver implementation: 53 virtual void OnCertSelectedByNotification() OVERRIDE; 54 55 // DialogDelegateView: 56 virtual bool CanResize() const OVERRIDE; 57 virtual base::string16 GetWindowTitle() const OVERRIDE; 58 virtual void DeleteDelegate() OVERRIDE; 59 virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE; 60 virtual bool Cancel() OVERRIDE; 61 virtual bool Accept() OVERRIDE; 62 virtual views::View* GetInitiallyFocusedView() OVERRIDE; 63 virtual views::View* CreateExtraView() OVERRIDE; 64 virtual ui::ModalType GetModalType() const OVERRIDE; 65 66 // views::ButtonListener: 67 virtual void ButtonPressed(views::Button* sender, 68 const ui::Event& event) OVERRIDE; 69 70 // views::TableViewObserver: 71 virtual void OnSelectionChanged() OVERRIDE; 72 virtual void OnDoubleClick() OVERRIDE; 73 74 private: 75 void CreateCertTable(); 76 77 // Callback after unlocking certificate slot. 78 void Unlocked(net::X509Certificate* cert); 79 80 scoped_ptr<CertificateSelectorTableModel> model_; 81 82 content::WebContents* web_contents_; 83 84 views::TableView* table_; 85 views::LabelButton* view_cert_button_; 86 87 DISALLOW_COPY_AND_ASSIGN(SSLClientCertificateSelector); 88 }; 89 90 #endif // CHROME_BROWSER_UI_VIEWS_SSL_CLIENT_CERTIFICATE_SELECTOR_H_ 91