ssl_client_certificate_selector.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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
23namespace net {
24class SSLCertRequestInfo;
25class X509Certificate;
26}
27
28namespace views {
29class LabelButton;
30class TableView;
31class Widget;
32}
33
34class CertificateSelectorTableModel;
35
36class 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