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

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

Issue 12851002: Remove ConstrainedWindowGtkDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ssl/ssl_client_certificate_selector.h" 5 #include "chrome/browser/ssl/ssl_client_certificate_selector.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 25 matching lines...) Expand all
36 36
37 namespace { 37 namespace {
38 38
39 enum { 39 enum {
40 RESPONSE_SHOW_CERT_INFO = 1, 40 RESPONSE_SHOW_CERT_INFO = 1,
41 }; 41 };
42 42
43 /////////////////////////////////////////////////////////////////////////////// 43 ///////////////////////////////////////////////////////////////////////////////
44 // SSLClientCertificateSelector 44 // SSLClientCertificateSelector
45 45
46 class SSLClientCertificateSelector : public SSLClientAuthObserver, 46 class SSLClientCertificateSelector : public SSLClientAuthObserver {
47 public ConstrainedWindowGtkDelegate {
48 public: 47 public:
49 explicit SSLClientCertificateSelector( 48 explicit SSLClientCertificateSelector(
50 WebContents* parent, 49 WebContents* parent,
51 const net::HttpNetworkSession* network_session, 50 const net::HttpNetworkSession* network_session,
52 net::SSLCertRequestInfo* cert_request_info, 51 net::SSLCertRequestInfo* cert_request_info,
53 const base::Callback<void(net::X509Certificate*)>& callback); 52 const base::Callback<void(net::X509Certificate*)>& callback);
54 virtual ~SSLClientCertificateSelector(); 53 virtual ~SSLClientCertificateSelector();
55 54
56 void Show(); 55 void Show();
57 56
58 // SSLClientAuthObserver implementation: 57 // SSLClientAuthObserver implementation:
59 virtual void OnCertSelectedByNotification() OVERRIDE; 58 virtual void OnCertSelectedByNotification() OVERRIDE;
60 59
61 // ConstrainedWindowGtkDelegate implementation:
62 virtual GtkWidget* GetWidgetRoot() OVERRIDE { return root_widget_.get(); }
63 virtual GtkWidget* GetFocusWidget() OVERRIDE;
64 virtual void DeleteDelegate() OVERRIDE;
65
66 private: 60 private:
67 void PopulateCerts(); 61 void PopulateCerts();
68 62
69 net::X509Certificate* GetSelectedCert(); 63 net::X509Certificate* GetSelectedCert();
70 64
71 static std::string FormatComboBoxText( 65 static std::string FormatComboBoxText(
72 net::X509Certificate::OSCertHandle cert, 66 net::X509Certificate::OSCertHandle cert,
73 const std::string& nickname); 67 const std::string& nickname);
74 static std::string FormatDetailsText( 68 static std::string FormatDetailsText(
75 net::X509Certificate::OSCertHandle cert); 69 net::X509Certificate::OSCertHandle cert);
76 70
77 // Callback after unlocking certificate slot. 71 // Callback after unlocking certificate slot.
78 void Unlocked(); 72 void Unlocked();
79 73
80 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnComboBoxChanged); 74 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnComboBoxChanged);
81 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnViewClicked); 75 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnViewClicked);
82 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnCancelClicked); 76 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnCancelClicked);
83 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnOkClicked); 77 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnOkClicked);
84 CHROMEGTK_CALLBACK_1(SSLClientCertificateSelector, void, OnPromptShown, 78 CHROMEGTK_CALLBACK_1(SSLClientCertificateSelector, void, OnPromptShown,
85 GtkWidget*); 79 GtkWidget*);
80 CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnDestroy);
86 81
87 std::vector<std::string> details_strings_; 82 std::vector<std::string> details_strings_;
88 83
89 GtkWidget* cert_combo_box_; 84 GtkWidget* cert_combo_box_;
90 GtkTextBuffer* cert_details_buffer_; 85 GtkTextBuffer* cert_details_buffer_;
91 86
92 ui::OwnedWidgetGtk root_widget_; 87 ui::OwnedWidgetGtk root_widget_;
93 // Hold on to the select button to focus it. 88 // Hold on to the select button to focus it.
94 GtkWidget* select_button_; 89 GtkWidget* select_button_;
95 90
96 WebContents* web_contents_; 91 WebContents* web_contents_;
97 GtkWidget* window_; 92 GtkWidget* window_;
98 93
99 DISALLOW_COPY_AND_ASSIGN(SSLClientCertificateSelector); 94 DISALLOW_COPY_AND_ASSIGN(SSLClientCertificateSelector);
100 }; 95 };
101 96
102 SSLClientCertificateSelector::SSLClientCertificateSelector( 97 SSLClientCertificateSelector::SSLClientCertificateSelector(
103 WebContents* web_contents, 98 WebContents* web_contents,
104 const net::HttpNetworkSession* network_session, 99 const net::HttpNetworkSession* network_session,
105 net::SSLCertRequestInfo* cert_request_info, 100 net::SSLCertRequestInfo* cert_request_info,
106 const base::Callback<void(net::X509Certificate*)>& callback) 101 const base::Callback<void(net::X509Certificate*)>& callback)
107 : SSLClientAuthObserver(network_session, cert_request_info, callback), 102 : SSLClientAuthObserver(network_session, cert_request_info, callback),
108 web_contents_(web_contents), 103 web_contents_(web_contents),
109 window_(NULL) { 104 window_(NULL) {
110 root_widget_.Own(gtk_vbox_new(FALSE, ui::kControlSpacing)); 105 root_widget_.Own(gtk_vbox_new(FALSE, ui::kControlSpacing));
106 g_signal_connect(root_widget_.get(),
107 "destroy",
108 G_CALLBACK(OnDestroyThunk),
109 this);
111 110
112 GtkWidget* site_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); 111 GtkWidget* site_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing);
113 gtk_box_pack_start(GTK_BOX(root_widget_.get()), site_vbox, 112 gtk_box_pack_start(GTK_BOX(root_widget_.get()), site_vbox,
114 FALSE, FALSE, 0); 113 FALSE, FALSE, 0);
115 114
116 GtkWidget* site_description_label = gtk_util::CreateBoldLabel( 115 GtkWidget* site_description_label = gtk_util::CreateBoldLabel(
117 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_SITE_DESCRIPTION_LABEL)); 116 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_SITE_DESCRIPTION_LABEL));
118 gtk_box_pack_start(GTK_BOX(site_vbox), site_description_label, 117 gtk_box_pack_start(GTK_BOX(site_vbox), site_description_label,
119 FALSE, FALSE, 0); 118 FALSE, FALSE, 0);
120 119
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 190
192 StartObserving(); 191 StartObserving();
193 } 192 }
194 193
195 SSLClientCertificateSelector::~SSLClientCertificateSelector() { 194 SSLClientCertificateSelector::~SSLClientCertificateSelector() {
196 root_widget_.Destroy(); 195 root_widget_.Destroy();
197 } 196 }
198 197
199 void SSLClientCertificateSelector::Show() { 198 void SSLClientCertificateSelector::Show() {
200 DCHECK(!window_); 199 DCHECK(!window_);
201 window_ = CreateWebContentsModalDialogGtk(web_contents_, this); 200 window_ = CreateWebContentsModalDialogGtk(web_contents_,
201 root_widget_.get(),
202 select_button_);
202 203
203 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 204 WebContentsModalDialogManager* web_contents_modal_dialog_manager =
204 WebContentsModalDialogManager::FromWebContents(web_contents_); 205 WebContentsModalDialogManager::FromWebContents(web_contents_);
205 web_contents_modal_dialog_manager->ShowDialog(window_); 206 web_contents_modal_dialog_manager->ShowDialog(window_);
206 } 207 }
207 208
208 void SSLClientCertificateSelector::OnCertSelectedByNotification() { 209 void SSLClientCertificateSelector::OnCertSelectedByNotification() {
209 DCHECK(window_); 210 DCHECK(window_);
210 gtk_widget_destroy(window_); 211 gtk_widget_destroy(window_);
211 } 212 }
212 213
213 GtkWidget* SSLClientCertificateSelector::GetFocusWidget() {
214 return select_button_;
215 }
216
217 void SSLClientCertificateSelector::DeleteDelegate() {
218 // The dialog was closed by escape key.
219 StopObserving();
220 CertificateSelected(NULL);
221 delete this;
222 }
223
224 void SSLClientCertificateSelector::PopulateCerts() { 214 void SSLClientCertificateSelector::PopulateCerts() {
225 std::vector<std::string> nicknames; 215 std::vector<std::string> nicknames;
226 x509_certificate_model::GetNicknameStringsFromCertList( 216 x509_certificate_model::GetNicknameStringsFromCertList(
227 cert_request_info()->client_certs, 217 cert_request_info()->client_certs,
228 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED), 218 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED),
229 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID), 219 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID),
230 &nicknames); 220 &nicknames);
231 221
232 DCHECK_EQ(nicknames.size(), 222 DCHECK_EQ(nicknames.size(),
233 cert_request_info()->client_certs.size()); 223 cert_request_info()->client_certs.size());
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 368
379 void SSLClientCertificateSelector::OnPromptShown(GtkWidget* widget, 369 void SSLClientCertificateSelector::OnPromptShown(GtkWidget* widget,
380 GtkWidget* previous_toplevel) { 370 GtkWidget* previous_toplevel) {
381 if (!root_widget_.get() || 371 if (!root_widget_.get() ||
382 !gtk_widget_is_toplevel(gtk_widget_get_toplevel(root_widget_.get()))) 372 !gtk_widget_is_toplevel(gtk_widget_get_toplevel(root_widget_.get())))
383 return; 373 return;
384 gtk_widget_set_can_default(select_button_, TRUE); 374 gtk_widget_set_can_default(select_button_, TRUE);
385 gtk_widget_grab_default(select_button_); 375 gtk_widget_grab_default(select_button_);
386 } 376 }
387 377
378 void SSLClientCertificateSelector::OnDestroy(GtkWidget* widget) {
379 // The dialog was closed by escape key.
380 StopObserving();
381 CertificateSelected(NULL);
382 delete this;
383 }
384
388 } // namespace 385 } // namespace
389 386
390 namespace chrome { 387 namespace chrome {
391 388
392 void ShowSSLClientCertificateSelector( 389 void ShowSSLClientCertificateSelector(
393 content::WebContents* contents, 390 content::WebContents* contents,
394 const net::HttpNetworkSession* network_session, 391 const net::HttpNetworkSession* network_session,
395 net::SSLCertRequestInfo* cert_request_info, 392 net::SSLCertRequestInfo* cert_request_info,
396 const base::Callback<void(net::X509Certificate*)>& callback) { 393 const base::Callback<void(net::X509Certificate*)>& callback) {
397 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 394 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
398 (new SSLClientCertificateSelector( 395 (new SSLClientCertificateSelector(
399 contents, network_session, cert_request_info, callback))->Show(); 396 contents, network_session, cert_request_info, callback))->Show();
400 } 397 }
401 398
402 } // namespace chrome 399 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698