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