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