crypto_module_password_dialog_view.cc revision f2477e01787aa58f445919b809d89e252beef54f
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#include "chrome/browser/ui/views/crypto_module_password_dialog_view.h"
6
7#include "base/strings/utf_string_conversions.h"
8#include "grit/generated_resources.h"
9#include "ui/base/l10n/l10n_util.h"
10#include "ui/events/event.h"
11#include "ui/views/controls/button/text_button.h"
12#include "ui/views/controls/label.h"
13#include "ui/views/controls/textfield/textfield.h"
14#include "ui/views/layout/grid_layout.h"
15#include "ui/views/layout/layout_constants.h"
16#include "ui/views/widget/widget.h"
17
18namespace chrome {
19
20////////////////////////////////////////////////////////////////////////////////
21// CryptoModulePasswordDialogView, public:
22
23CryptoModulePasswordDialogView::CryptoModulePasswordDialogView(
24    const std::string& slot_name,
25    CryptoModulePasswordReason reason,
26    const std::string& server,
27    const CryptoModulePasswordCallback& callback)
28    : callback_(callback) {
29  Init(server, slot_name, reason);
30}
31
32CryptoModulePasswordDialogView::~CryptoModulePasswordDialogView() {
33}
34
35////////////////////////////////////////////////////////////////////////////////
36// CryptoModulePasswordDialogView, private:
37
38views::View* CryptoModulePasswordDialogView::GetInitiallyFocusedView() {
39  return password_entry_;
40}
41
42ui::ModalType CryptoModulePasswordDialogView::GetModalType() const {
43  return ui::MODAL_TYPE_WINDOW;
44}
45
46string16 CryptoModulePasswordDialogView::GetWindowTitle() const {
47  return l10n_util::GetStringUTF16(IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE);
48}
49
50string16 CryptoModulePasswordDialogView::GetDialogButtonLabel(
51    ui::DialogButton button) const {
52  return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK ?
53      IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL : IDS_CANCEL);
54}
55
56bool CryptoModulePasswordDialogView::Cancel() {
57  callback_.Run(static_cast<const char*>(NULL));
58  const string16 empty;
59  password_entry_->SetText(empty);
60  return true;
61}
62
63bool CryptoModulePasswordDialogView::Accept() {
64  callback_.Run(UTF16ToUTF8(password_entry_->text()).c_str());
65  const string16 empty;
66  password_entry_->SetText(empty);
67  return true;
68}
69
70void CryptoModulePasswordDialogView::ContentsChanged(
71    views::Textfield* sender,
72    const string16& new_contents) {
73}
74
75bool CryptoModulePasswordDialogView::HandleKeyEvent(
76    views::Textfield* sender,
77    const ui::KeyEvent& keystroke) {
78  return false;
79}
80
81void CryptoModulePasswordDialogView::Init(const std::string& server,
82                                          const std::string& slot_name,
83                                          CryptoModulePasswordReason reason) {
84  // Select an appropriate text for the reason.
85  std::string text;
86  const string16& server16 = UTF8ToUTF16(server);
87  const string16& slot16 = UTF8ToUTF16(slot_name);
88  switch (reason) {
89    case chrome::kCryptoModulePasswordKeygen:
90      text = l10n_util::GetStringFUTF8(
91          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN, slot16, server16);
92      break;
93    case chrome::kCryptoModulePasswordCertEnrollment:
94      text = l10n_util::GetStringFUTF8(
95          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT, slot16, server16);
96      break;
97    case chrome::kCryptoModulePasswordClientAuth:
98      text = l10n_util::GetStringFUTF8(
99          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH, slot16, server16);
100      break;
101    case chrome::kCryptoModulePasswordListCerts:
102      text = l10n_util::GetStringFUTF8(
103          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS, slot16);
104      break;
105    case chrome::kCryptoModulePasswordCertImport:
106      text = l10n_util::GetStringFUTF8(
107          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT, slot16);
108      break;
109    case chrome::kCryptoModulePasswordCertExport:
110      text = l10n_util::GetStringFUTF8(
111          IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT, slot16);
112      break;
113    default:
114      NOTREACHED();
115  }
116  reason_label_ = new views::Label(UTF8ToUTF16(text));
117  reason_label_->SetMultiLine(true);
118
119  password_label_ = new views::Label(l10n_util::GetStringUTF16(
120      IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD));
121
122  password_entry_ = new views::Textfield(views::Textfield::STYLE_OBSCURED);
123  password_entry_->SetController(this);
124
125  views::GridLayout* layout = views::GridLayout::CreatePanel(this);
126  SetLayoutManager(layout);
127
128  views::ColumnSet* reason_column_set = layout->AddColumnSet(0);
129  reason_column_set->AddColumn(
130      views::GridLayout::LEADING, views::GridLayout::LEADING, 1,
131      views::GridLayout::USE_PREF, 0, 0);
132
133  views::ColumnSet* column_set = layout->AddColumnSet(1);
134  column_set->AddColumn(views::GridLayout::LEADING,
135                        views::GridLayout::LEADING, 0,
136                        views::GridLayout::USE_PREF, 0, 0);
137  column_set->AddPaddingColumn(
138      0, views::kUnrelatedControlLargeHorizontalSpacing);
139  column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
140                        views::GridLayout::USE_PREF, 0, 0);
141
142  layout->StartRow(0, 0);
143  layout->AddView(reason_label_);
144  layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
145
146  layout->StartRow(0, 1);
147  layout->AddView(password_label_);
148  layout->AddView(password_entry_);
149}
150
151void ShowCryptoModulePasswordDialog(
152    const std::string& slot_name,
153    bool retry,
154    CryptoModulePasswordReason reason,
155    const std::string& server,
156    gfx::NativeWindow parent,
157    const CryptoModulePasswordCallback& callback) {
158  CryptoModulePasswordDialogView* dialog =
159      new CryptoModulePasswordDialogView(slot_name, reason, server, callback);
160  views::DialogDelegate::CreateDialogWidget(dialog, NULL, parent)->Show();
161}
162
163}  // namespace chrome
164