diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-14 22:50:24 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-14 22:50:24 +0000 |
commit | b64994a466e1ca537b4b81f434756b74c0571588 (patch) | |
tree | 13cfe509080244609d992c978f5af6a22b36628a /chrome/browser/ui | |
parent | a74b4eb1f4f1ed2723e1199edcf299924b7ffd6c (diff) | |
download | chromium_src-b64994a466e1ca537b4b81f434756b74c0571588.zip chromium_src-b64994a466e1ca537b4b81f434756b74c0571588.tar.gz chromium_src-b64994a466e1ca537b4b81f434756b74c0571588.tar.bz2 |
Restore Gtk version of CryptoModulePasswordDialog.
BUG=114134
TEST=see bug
Review URL: http://codereview.chromium.org/9387026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121957 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
3 files changed, 184 insertions, 22 deletions
diff --git a/chrome/browser/ui/crypto_module_password_dialog.cc b/chrome/browser/ui/crypto_module_password_dialog.cc index 0fc0884..868400d 100644 --- a/chrome/browser/ui/crypto_module_password_dialog.cc +++ b/chrome/browser/ui/crypto_module_password_dialog.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,18 +8,12 @@ #include "base/bind.h" #include "base/synchronization/waitable_event.h" #include "base/utf_string_conversions.h" -#include "chrome/browser/ui/views/window.h" #include "crypto/crypto_module_blocking_password_delegate.h" #include "content/public/browser/browser_thread.h" #include "googleurl/src/gurl.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" -#if defined(TOOLKIT_VIEWS) -#include "chrome/browser/ui/views/crypto_module_password_dialog_view.h" -#include "ui/views/widget/widget.h" -#endif - using content::BrowserThread; namespace { @@ -94,25 +88,11 @@ class CryptoModuleBlockingDialogDelegate namespace browser { -void ShowCryptoModulePasswordDialog( - const std::string& slot_name, - bool retry, - CryptoModulePasswordReason reason, - const std::string& server, - const CryptoModulePasswordCallback& callback) { -#if defined(TOOLKIT_VIEWS) - CryptoModulePasswordDialogView* dialog = - new CryptoModulePasswordDialogView( - slot_name, reason, server, callback); - views::Widget* widget = CreateViewsWindow(NULL, dialog, STYLE_GENERIC); - widget->Show(); -#endif -} - crypto::CryptoModuleBlockingPasswordDelegate* NewCryptoModuleBlockingDialogDelegate( CryptoModulePasswordReason reason, const std::string& server) { return new CryptoModuleBlockingDialogDelegate(reason, server); } + } // namespace browser diff --git a/chrome/browser/ui/gtk/crypto_module_password_dialog.cc b/chrome/browser/ui/gtk/crypto_module_password_dialog.cc new file mode 100644 index 0000000..a0380d3 --- /dev/null +++ b/chrome/browser/ui/gtk/crypto_module_password_dialog.cc @@ -0,0 +1,165 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/crypto_module_password_dialog.h" + +#include <gtk/gtk.h> + +#include "base/basictypes.h" +#include "base/utf_string_conversions.h" +#include "chrome/browser/ui/gtk/gtk_util.h" +#include "crypto/crypto_module_blocking_password_delegate.h" +#include "googleurl/src/gurl.h" +#include "grit/generated_resources.h" +#include "ui/base/gtk/gtk_hig_constants.h" +#include "ui/base/gtk/gtk_signal.h" +#include "ui/base/l10n/l10n_util.h" + +namespace { + +// TODO(mattm): change into a constrained dialog. +class CryptoModulePasswordDialog { + public: + CryptoModulePasswordDialog( + const std::string& slot_name, + bool retry, + browser::CryptoModulePasswordReason reason, + const std::string& server, + const browser::CryptoModulePasswordCallback& callback); + + ~CryptoModulePasswordDialog() {} + + void Show(); + + private: + CHROMEGTK_CALLBACK_1(CryptoModulePasswordDialog, void, OnResponse, int); + CHROMEGTK_CALLBACK_0(CryptoModulePasswordDialog, void, OnWindowDestroy); + + browser::CryptoModulePasswordCallback callback_; + + GtkWidget* dialog_; + GtkWidget* password_entry_; + + DISALLOW_COPY_AND_ASSIGN(CryptoModulePasswordDialog); +}; + +CryptoModulePasswordDialog::CryptoModulePasswordDialog( + const std::string& slot_name, + bool retry, + browser::CryptoModulePasswordReason reason, + const std::string& server, + const browser::CryptoModulePasswordCallback& callback) + : callback_(callback) { + dialog_ = gtk_dialog_new_with_buttons( + l10n_util::GetStringUTF8(IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE).c_str(), + NULL, + GTK_DIALOG_NO_SEPARATOR, + NULL); // Populate the buttons later, for control over the OK button. + gtk_dialog_add_button(GTK_DIALOG(dialog_), + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); + GtkWidget* ok_button = gtk_util::AddButtonToDialog( + dialog_, + l10n_util::GetStringUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL).c_str(), + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_dialog_set_default_response(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT); + + // Select an appropriate text for the reason. + std::string text; + const string16& server16 = UTF8ToUTF16(server); + const string16& slot16 = UTF8ToUTF16(slot_name); + switch (reason) { + case browser::kCryptoModulePasswordKeygen: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN, slot16, server16); + break; + case browser::kCryptoModulePasswordCertEnrollment: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT, slot16, server16); + break; + case browser::kCryptoModulePasswordClientAuth: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH, slot16, server16); + break; + case browser::kCryptoModulePasswordListCerts: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS, slot16); + break; + case browser::kCryptoModulePasswordCertImport: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT, slot16); + break; + case browser::kCryptoModulePasswordCertExport: + text = l10n_util::GetStringFUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT, slot16); + break; + default: + NOTREACHED(); + } + GtkWidget* label = gtk_label_new(text.c_str()); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_util::LeftAlignMisc(label); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), label, + FALSE, FALSE, 0); + + password_entry_ = gtk_entry_new(); + gtk_entry_set_activates_default(GTK_ENTRY(password_entry_), TRUE); + gtk_entry_set_visibility(GTK_ENTRY(password_entry_), FALSE); + + GtkWidget* password_box = gtk_hbox_new(FALSE, ui::kLabelSpacing); + gtk_box_pack_start(GTK_BOX(password_box), + gtk_label_new(l10n_util::GetStringUTF8( + IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD).c_str()), + FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(password_box), password_entry_, + TRUE, TRUE, 0); + + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), password_box, + FALSE, FALSE, 0); + + g_signal_connect(dialog_, "response", + G_CALLBACK(OnResponseThunk), this); + g_signal_connect(dialog_, "destroy", + G_CALLBACK(OnWindowDestroyThunk), this); +} + +void CryptoModulePasswordDialog::Show() { + gtk_util::ShowDialog(dialog_); +} + +void CryptoModulePasswordDialog::OnResponse(GtkWidget* dialog, + int response_id) { + if (response_id == GTK_RESPONSE_ACCEPT) + callback_.Run(gtk_entry_get_text(GTK_ENTRY(password_entry_))); + else + callback_.Run(static_cast<const char*>(NULL)); + + // This will cause gtk to zero out the buffer. (see + // gtk_entry_buffer_normal_delete_text: + // http://git.gnome.org/browse/gtk+/tree/gtk/gtkentrybuffer.c#n187) + gtk_editable_delete_text(GTK_EDITABLE(password_entry_), 0, -1); + gtk_widget_destroy(dialog_); +} + +void CryptoModulePasswordDialog::OnWindowDestroy(GtkWidget* widget) { + delete this; +} + +} // namespace + +namespace browser { + +void ShowCryptoModulePasswordDialog( + const std::string& slot_name, + bool retry, + CryptoModulePasswordReason reason, + const std::string& server, + const CryptoModulePasswordCallback& callback) { + (new CryptoModulePasswordDialog(slot_name, retry, reason, server, + callback))->Show(); +} + +} // namespace browser diff --git a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc index 8339270..5791c9c 100644 --- a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc +++ b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/bind.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/ui/views/window.h" #include "googleurl/src/gurl.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" @@ -15,10 +16,12 @@ #include "ui/views/controls/textfield/textfield.h" #include "ui/views/layout/grid_layout.h" #include "ui/views/layout/layout_constants.h" +#include "ui/views/widget/widget.h" int kInputPasswordMinWidth = 8; namespace browser { + // CryptoModulePasswordDialogView //////////////////////////////////////////////////////////////////////////////// CryptoModulePasswordDialogView::CryptoModulePasswordDialogView( @@ -154,4 +157,18 @@ string16 CryptoModulePasswordDialogView::GetWindowTitle() const { return UTF8ToUTF16(l10n_util::GetStringUTF8( IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE)); } + +void ShowCryptoModulePasswordDialog( + const std::string& slot_name, + bool retry, + CryptoModulePasswordReason reason, + const std::string& server, + const CryptoModulePasswordCallback& callback) { + CryptoModulePasswordDialogView* dialog = + new CryptoModulePasswordDialogView( + slot_name, reason, server, callback); + views::Widget* widget = CreateViewsWindow(NULL, dialog, STYLE_GENERIC); + widget->Show(); +} + } // namespace browser |