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