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

Side by Side Diff: chrome/browser/ui/webui/ssl_client_certificate_selector_webui.cc

Issue 9384014: Remove knowledge about SSLClientAuthHandler from chrome. Instead a callback is given to the embed... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: review comments+sync Created 8 years, 10 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/ui/webui/ssl_client_certificate_selector_webui.h" 5 #include "chrome/browser/ui/webui/ssl_client_certificate_selector_webui.h"
6 6
7 #include <vector> 7 #include <vector>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return rv; 108 return rv;
109 } 109 }
110 110
111 } // namespace 111 } // namespace
112 112
113 //////////////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////////////////
114 // SSLClientCertificateSelectorWebUI 114 // SSLClientCertificateSelectorWebUI
115 115
116 void SSLClientCertificateSelectorWebUI::ShowDialog( 116 void SSLClientCertificateSelectorWebUI::ShowDialog(
117 TabContentsWrapper* wrapper, 117 TabContentsWrapper* wrapper,
118 const net::HttpNetworkSession* network_session,
118 net::SSLCertRequestInfo* cert_request_info, 119 net::SSLCertRequestInfo* cert_request_info,
119 SSLClientAuthHandler* delegate) { 120 const base::Callback<void(net::X509Certificate*)>& callback) {
120 SSLClientCertificateSelectorWebUI* ui = 121 SSLClientCertificateSelectorWebUI* ui =
121 new SSLClientCertificateSelectorWebUI(wrapper, 122 new SSLClientCertificateSelectorWebUI(wrapper,
123 network_session,
122 cert_request_info, 124 cert_request_info,
123 delegate); 125 callback);
124 Profile* profile = wrapper->profile(); 126 Profile* profile = wrapper->profile();
125 ConstrainedHtmlUI::CreateConstrainedHtmlDialog(profile, ui, NULL, wrapper); 127 ConstrainedHtmlUI::CreateConstrainedHtmlDialog(profile, ui, NULL, wrapper);
126 } 128 }
127 129
128 SSLClientCertificateSelectorWebUI::SSLClientCertificateSelectorWebUI( 130 SSLClientCertificateSelectorWebUI::SSLClientCertificateSelectorWebUI(
129 TabContentsWrapper* wrapper, 131 TabContentsWrapper* wrapper,
132 const net::HttpNetworkSession* network_session,
130 net::SSLCertRequestInfo* cert_request_info, 133 net::SSLCertRequestInfo* cert_request_info,
131 SSLClientAuthHandler* delegate) 134 const base::Callback<void(net::X509Certificate*)>& callback)
132 : wrapper_(wrapper), 135 : SSLClientAuthObserver(network_session, cert_request_info, callback),
133 cert_request_info_(cert_request_info), 136 wrapper_(wrapper) {
134 delegate_(delegate) {
135 137
136 ChromeWebUIDataSource* source = new ChromeWebUIDataSource( 138 ChromeWebUIDataSource* source = new ChromeWebUIDataSource(
137 chrome::kChromeUISSLClientCertificateSelectorHost); 139 chrome::kChromeUISSLClientCertificateSelectorHost);
138 140
139 source->AddLocalizedString("siteLabel", 141 source->AddLocalizedString("siteLabel",
140 IDS_CERT_SELECTOR_SITE_DESCRIPTION_LABEL); 142 IDS_CERT_SELECTOR_SITE_DESCRIPTION_LABEL);
141 source->AddLocalizedString("chooseLabel", 143 source->AddLocalizedString("chooseLabel",
142 IDS_CERT_SELECTOR_CHOOSE_DESCRIPTION_LABEL); 144 IDS_CERT_SELECTOR_CHOOSE_DESCRIPTION_LABEL);
143 source->AddLocalizedString("detailsLabel", 145 source->AddLocalizedString("detailsLabel",
144 IDS_CERT_SELECTOR_DETAILS_DESCRIPTION_LABEL); 146 IDS_CERT_SELECTOR_DETAILS_DESCRIPTION_LABEL);
(...skipping 12 matching lines...) Expand all
157 159
158 // Set default resource. 160 // Set default resource.
159 source->set_default_resource(IDR_SSL_CLIENT_CERTIFICATE_SELECTOR_HTML); 161 source->set_default_resource(IDR_SSL_CLIENT_CERTIFICATE_SELECTOR_HTML);
160 162
161 wrapper->profile()->GetChromeURLDataManager()->AddDataSource(source); 163 wrapper->profile()->GetChromeURLDataManager()->AddDataSource(source);
162 } 164 }
163 165
164 SSLClientCertificateSelectorWebUI::~SSLClientCertificateSelectorWebUI() { 166 SSLClientCertificateSelectorWebUI::~SSLClientCertificateSelectorWebUI() {
165 } 167 }
166 168
169 void SSLClientCertificateSelectorWebUI::OnCertSelectedByNotification() {
170 NOTIMPLEMENTED();
171 }
172
167 // HtmlDialogUIDelegate methods 173 // HtmlDialogUIDelegate methods
168 ui::ModalType SSLClientCertificateSelectorWebUI::GetDialogModalType() const { 174 ui::ModalType SSLClientCertificateSelectorWebUI::GetDialogModalType() const {
169 return ui::MODAL_TYPE_WINDOW; 175 return ui::MODAL_TYPE_WINDOW;
170 } 176 }
171 177
172 string16 SSLClientCertificateSelectorWebUI::GetDialogTitle() const { 178 string16 SSLClientCertificateSelectorWebUI::GetDialogTitle() const {
173 return string16(); 179 return string16();
174 } 180 }
175 181
176 GURL SSLClientCertificateSelectorWebUI::GetDialogContentURL() const { 182 GURL SSLClientCertificateSelectorWebUI::GetDialogContentURL() const {
(...skipping 15 matching lines...) Expand all
192 198
193 void SSLClientCertificateSelectorWebUI::OnDialogClosed( 199 void SSLClientCertificateSelectorWebUI::OnDialogClosed(
194 const std::string& json_retval) { 200 const std::string& json_retval) {
195 scoped_ptr<Value> parsed_value(base::JSONReader::Read(json_retval, false)); 201 scoped_ptr<Value> parsed_value(base::JSONReader::Read(json_retval, false));
196 ListValue* list = NULL; 202 ListValue* list = NULL;
197 double value = 0; 203 double value = 0;
198 if (parsed_value.get() && parsed_value->GetAsList(&list) && 204 if (parsed_value.get() && parsed_value->GetAsList(&list) &&
199 list->GetDouble(0, &value)) { 205 list->GetDouble(0, &value)) {
200 // User selected a certificate. 206 // User selected a certificate.
201 size_t index = (size_t) value; 207 size_t index = (size_t) value;
202 if (index < cert_request_info_->client_certs.size()) { 208 if (index < cert_request_info()->client_certs.size()) {
203 scoped_refptr<net::X509Certificate> selected_cert( 209 scoped_refptr<net::X509Certificate> selected_cert(
204 cert_request_info_->client_certs[index]); 210 cert_request_info()->client_certs[index]);
205 browser::UnlockCertSlotIfNecessary( 211 browser::UnlockCertSlotIfNecessary(
206 selected_cert, 212 selected_cert,
207 browser::kCryptoModulePasswordClientAuth, 213 browser::kCryptoModulePasswordClientAuth,
208 cert_request_info_->host_and_port, 214 cert_request_info()->host_and_port,
209 base::Bind(&SSLClientCertificateSelectorWebUI::Unlocked, 215 base::Bind(&SSLClientCertificateSelectorWebUI::CertificateSelected,
210 delegate_, 216 base::Unretained(this), selected_cert));
211 selected_cert));
212 return; 217 return;
213 } 218 }
214 } 219 }
215 220
216 // Anything else constitutes a cancel. 221 // Anything else constitutes a cancel.
217 delegate_->CertificateSelected(NULL); 222 CertificateSelected(NULL);
218 delegate_ = NULL;
219 }
220
221 // static
222 void SSLClientCertificateSelectorWebUI::Unlocked(SSLClientAuthHandler* delegate,
223 net::X509Certificate* selected_cert) {
224 delegate->CertificateSelected(selected_cert);
225 } 223 }
226 224
227 225
228 void SSLClientCertificateSelectorWebUI::OnCloseContents(WebContents* source, 226 void SSLClientCertificateSelectorWebUI::OnCloseContents(WebContents* source,
229 bool* out_close_dialog) { 227 bool* out_close_dialog) {
230 NOTIMPLEMENTED(); 228 NOTIMPLEMENTED();
231 } 229 }
232 230
233 bool SSLClientCertificateSelectorWebUI::ShouldShowDialogTitle() const { 231 bool SSLClientCertificateSelectorWebUI::ShouldShowDialogTitle() const {
234 return true; 232 return true;
235 } 233 }
236 234
237 // WebUIMessageHandler methods 235 // WebUIMessageHandler methods
238 236
239 void SSLClientCertificateSelectorWebUI::RegisterMessages() { 237 void SSLClientCertificateSelectorWebUI::RegisterMessages() {
240 web_ui()->RegisterMessageCallback("requestDetails", 238 web_ui()->RegisterMessageCallback("requestDetails",
241 base::Bind(&SSLClientCertificateSelectorWebUI::RequestDetails, 239 base::Bind(&SSLClientCertificateSelectorWebUI::RequestDetails,
242 base::Unretained(this))); 240 base::Unretained(this)));
243 web_ui()->RegisterMessageCallback("viewCertificate", 241 web_ui()->RegisterMessageCallback("viewCertificate",
244 base::Bind(&SSLClientCertificateSelectorWebUI::ViewCertificate, 242 base::Bind(&SSLClientCertificateSelectorWebUI::ViewCertificate,
245 base::Unretained(this))); 243 base::Unretained(this)));
246 } 244 }
247 245
248 void SSLClientCertificateSelectorWebUI::RequestDetails( 246 void SSLClientCertificateSelectorWebUI::RequestDetails(
249 const base::ListValue* args) { 247 const base::ListValue* args) {
250 std::vector<std::string> nicknames; 248 std::vector<std::string> nicknames;
251 x509_certificate_model::GetNicknameStringsFromCertList( 249 x509_certificate_model::GetNicknameStringsFromCertList(
252 cert_request_info_->client_certs, 250 cert_request_info()->client_certs,
253 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED), 251 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED),
254 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID), 252 l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID),
255 &nicknames); 253 &nicknames);
256 254
257 DCHECK_EQ(nicknames.size(), cert_request_info_->client_certs.size()); 255 DCHECK_EQ(nicknames.size(), cert_request_info()->client_certs.size());
258 256
259 DictionaryValue dict; 257 DictionaryValue dict;
260 dict.SetString("site", cert_request_info_->host_and_port.c_str()); 258 dict.SetString("site", cert_request_info()->host_and_port.c_str());
261 ListValue* certificates = new ListValue(); 259 ListValue* certificates = new ListValue();
262 ListValue* details = new ListValue(); 260 ListValue* details = new ListValue();
263 for (size_t i = 0; i < cert_request_info_->client_certs.size(); ++i) { 261 for (size_t i = 0; i < cert_request_info()->client_certs.size(); ++i) {
264 net::X509Certificate::OSCertHandle cert = 262 net::X509Certificate::OSCertHandle cert =
265 cert_request_info_->client_certs[i]->os_cert_handle(); 263 cert_request_info()->client_certs[i]->os_cert_handle();
266 264
267 certificates->Append(new StringValue( 265 certificates->Append(new StringValue(
268 FormatComboBoxText(cert, nicknames[i]))); 266 FormatComboBoxText(cert, nicknames[i])));
269 details->Append(new StringValue( 267 details->Append(new StringValue(
270 FormatDetailsText(cert))); 268 FormatDetailsText(cert)));
271 } 269 }
272 dict.Set("certificates", certificates); 270 dict.Set("certificates", certificates);
273 dict.Set("details", details); 271 dict.Set("details", details);
274 // Send list of tab contents details to javascript. 272 // Send list of tab contents details to javascript.
275 web_ui()->CallJavascriptFunction( 273 web_ui()->CallJavascriptFunction(
276 "sslClientCertificateSelector.setDetails", 274 "sslClientCertificateSelector.setDetails",
277 dict); 275 dict);
278 } 276 }
279 277
280 void SSLClientCertificateSelectorWebUI::ViewCertificate( 278 void SSLClientCertificateSelectorWebUI::ViewCertificate(
281 const base::ListValue* args) { 279 const base::ListValue* args) {
282 double value = 0; 280 double value = 0;
283 if (args && args->GetDouble(0, &value)) { 281 if (args && args->GetDouble(0, &value)) {
284 size_t index = (size_t) value; 282 size_t index = (size_t) value;
285 if (index < cert_request_info_->client_certs.size()) 283 if (index < cert_request_info()->client_certs.size())
286 ShowCertificateViewer(NULL, cert_request_info_->client_certs[index]); 284 ShowCertificateViewer(NULL, cert_request_info()->client_certs[index]);
287 } 285 }
288 } 286 }
289 287
290 //////////////////////////////////////////////////////////////////////////////// 288 ////////////////////////////////////////////////////////////////////////////////
291 // Platform API 289 // Platform API
292 290
293 namespace browser { 291 namespace browser {
294 292
295 void ShowSSLClientCertificateSelector( 293 void ShowSSLClientCertificateSelector(
296 TabContentsWrapper* wrapper, 294 TabContentsWrapper* wrapper,
295 const net::HttpNetworkSession* network_session,
297 net::SSLCertRequestInfo* cert_request_info, 296 net::SSLCertRequestInfo* cert_request_info,
298 SSLClientAuthHandler* delegate) { 297 const base::Callback<void(net::X509Certificate*)>& callback) {
299 // TODO(jhawkins): move this into a non-webui location. 298 // TODO(jhawkins): move this into a non-webui location.
300 #if defined(USE_AURA) 299 #if defined(USE_AURA)
301 ShowNativeSSLClientCertificateSelector(wrapper, 300 ShowNativeSSLClientCertificateSelector(
302 cert_request_info, 301 wrapper, network_session, cert_request_info, callback);
303 delegate);
304 #elif defined(OS_CHROMEOS) 302 #elif defined(OS_CHROMEOS)
305 SSLClientCertificateSelectorWebUI::ShowDialog(wrapper, 303 SSLClientCertificateSelectorWebUI::ShowDialog(
306 cert_request_info, 304 wrapper, network_session, cert_request_info, callback);
307 delegate);
308 #else 305 #else
309 // TODO(rbyers): Remove the IsMoreWebUI check and (ideally) all #ifdefs onnce 306 // TODO(rbyers): Remove the IsMoreWebUI check and (ideally) all #ifdefs onnce
310 // we can select exactly one version of this dialog to use for each platform 307 // we can select exactly one version of this dialog to use for each platform
311 // at build time. http://crbug.com/102775 308 // at build time. http://crbug.com/102775
312 if (chrome_web_ui::IsMoreWebUI()) 309 if (chrome_web_ui::IsMoreWebUI()) {
313 SSLClientCertificateSelectorWebUI::ShowDialog(wrapper, 310 SSLClientCertificateSelectorWebUI::ShowDialog(
314 cert_request_info, 311 wrapper, network_session, cert_request_info, callback);
315 delegate); 312 } else {
316 else 313 ShowNativeSSLClientCertificateSelector(
317 ShowNativeSSLClientCertificateSelector(wrapper, 314 wrapper, network_session, cert_request_info, callback);
318 cert_request_info, 315 }
319 delegate);
320 #endif 316 #endif
321 } 317 }
322 318
323 } // namespace browser 319 } // namespace browser
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698