Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: chrome/browser/ui/gtk/crypto_module_password_dialog_gtk.cc

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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/crypto_module_password_dialog.h"
6
7 #include <gtk/gtk.h>
8
9 #include "base/basictypes.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/ui/gtk/gtk_util.h"
12 #include "grit/generated_resources.h"
13 #include "ui/base/gtk/gtk_hig_constants.h"
14 #include "ui/base/gtk/gtk_signal.h"
15 #include "ui/base/l10n/l10n_util.h"
16 #include "url/gurl.h"
17
18 namespace {
19
20 // TODO(mattm): change into a constrained dialog.
21 class CryptoModulePasswordDialog {
22 public:
23 CryptoModulePasswordDialog(
24 const std::string& slot_name,
25 bool retry,
26 chrome::CryptoModulePasswordReason reason,
27 const std::string& hostname,
28 gfx::NativeWindow parent,
29 const chrome::CryptoModulePasswordCallback& callback);
30
31 ~CryptoModulePasswordDialog() {}
32
33 void Show();
34
35 private:
36 CHROMEGTK_CALLBACK_1(CryptoModulePasswordDialog, void, OnResponse, int);
37 CHROMEGTK_CALLBACK_0(CryptoModulePasswordDialog, void, OnWindowDestroy);
38
39 chrome::CryptoModulePasswordCallback callback_;
40
41 GtkWidget* dialog_;
42 GtkWidget* password_entry_;
43
44 DISALLOW_COPY_AND_ASSIGN(CryptoModulePasswordDialog);
45 };
46
47 CryptoModulePasswordDialog::CryptoModulePasswordDialog(
48 const std::string& slot_name,
49 bool retry,
50 chrome::CryptoModulePasswordReason reason,
51 const std::string& hostname,
52 gfx::NativeWindow parent,
53 const chrome::CryptoModulePasswordCallback& callback)
54 : callback_(callback) {
55 dialog_ = gtk_dialog_new_with_buttons(
56 l10n_util::GetStringUTF8(IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE).c_str(),
57 parent,
58 GTK_DIALOG_NO_SEPARATOR,
59 NULL); // Populate the buttons later, for control over the OK button.
60 gtk_dialog_add_button(GTK_DIALOG(dialog_),
61 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
62 GtkWidget* ok_button = gtk_util::AddButtonToDialog(
63 dialog_,
64 l10n_util::GetStringUTF8(
65 IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL).c_str(),
66 GTK_STOCK_OK,
67 GTK_RESPONSE_ACCEPT);
68 gtk_widget_set_can_default(ok_button, TRUE);
69 gtk_dialog_set_default_response(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT);
70
71 // Select an appropriate text for the reason.
72 std::string text;
73 const base::string16& hostname16 = base::UTF8ToUTF16(hostname);
74 const base::string16& slot16 = base::UTF8ToUTF16(slot_name);
75 switch (reason) {
76 case chrome::kCryptoModulePasswordKeygen:
77 text = l10n_util::GetStringFUTF8(
78 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN, slot16, hostname16);
79 break;
80 case chrome::kCryptoModulePasswordCertEnrollment:
81 text = l10n_util::GetStringFUTF8(
82 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT,
83 slot16,
84 hostname16);
85 break;
86 case chrome::kCryptoModulePasswordClientAuth:
87 text = l10n_util::GetStringFUTF8(
88 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH, slot16, hostname16);
89 break;
90 case chrome::kCryptoModulePasswordListCerts:
91 text = l10n_util::GetStringFUTF8(
92 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS, slot16);
93 break;
94 case chrome::kCryptoModulePasswordCertImport:
95 text = l10n_util::GetStringFUTF8(
96 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT, slot16);
97 break;
98 case chrome::kCryptoModulePasswordCertExport:
99 text = l10n_util::GetStringFUTF8(
100 IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT, slot16);
101 break;
102 default:
103 NOTREACHED();
104 }
105 GtkWidget* label = gtk_label_new(text.c_str());
106 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
107 gtk_util::LeftAlignMisc(label);
108 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), label,
109 FALSE, FALSE, 0);
110
111 password_entry_ = gtk_entry_new();
112 gtk_entry_set_activates_default(GTK_ENTRY(password_entry_), TRUE);
113 gtk_entry_set_visibility(GTK_ENTRY(password_entry_), FALSE);
114
115 GtkWidget* password_box = gtk_hbox_new(FALSE, ui::kLabelSpacing);
116 gtk_box_pack_start(GTK_BOX(password_box),
117 gtk_label_new(l10n_util::GetStringUTF8(
118 IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD).c_str()),
119 FALSE, FALSE, 0);
120 gtk_box_pack_start(GTK_BOX(password_box), password_entry_,
121 TRUE, TRUE, 0);
122
123 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), password_box,
124 FALSE, FALSE, 0);
125
126 g_signal_connect(dialog_, "response",
127 G_CALLBACK(OnResponseThunk), this);
128 g_signal_connect(dialog_, "destroy",
129 G_CALLBACK(OnWindowDestroyThunk), this);
130 }
131
132 void CryptoModulePasswordDialog::Show() {
133 gtk_util::ShowDialog(dialog_);
134 }
135
136 void CryptoModulePasswordDialog::OnResponse(GtkWidget* dialog,
137 int response_id) {
138 if (response_id == GTK_RESPONSE_ACCEPT)
139 callback_.Run(gtk_entry_get_text(GTK_ENTRY(password_entry_)));
140 else
141 callback_.Run(std::string());
142
143 // This will cause gtk to zero out the buffer. (see
144 // gtk_entry_buffer_normal_delete_text:
145 // http://git.gnome.org/browse/gtk+/tree/gtk/gtkentrybuffer.c#n187)
146 gtk_editable_delete_text(GTK_EDITABLE(password_entry_), 0, -1);
147 gtk_widget_destroy(dialog_);
148 }
149
150 void CryptoModulePasswordDialog::OnWindowDestroy(GtkWidget* widget) {
151 delete this;
152 }
153
154 } // namespace
155
156 namespace chrome {
157
158 void ShowCryptoModulePasswordDialog(
159 const std::string& slot_name,
160 bool retry,
161 CryptoModulePasswordReason reason,
162 const std::string& hostname,
163 gfx::NativeWindow parent,
164 const CryptoModulePasswordCallback& callback) {
165 (new CryptoModulePasswordDialog(
166 slot_name, retry, reason, hostname, parent, callback))->Show();
167 }
168
169 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698