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