summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-14 22:50:24 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-14 22:50:24 +0000
commitb64994a466e1ca537b4b81f434756b74c0571588 (patch)
tree13cfe509080244609d992c978f5af6a22b36628a /chrome/browser
parenta74b4eb1f4f1ed2723e1199edcf299924b7ffd6c (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/ui/crypto_module_password_dialog.cc24
-rw-r--r--chrome/browser/ui/gtk/crypto_module_password_dialog.cc165
-rw-r--r--chrome/browser/ui/views/crypto_module_password_dialog_view.cc17
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