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

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

Issue 859213006: Cancel client auth requests when not promptable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@client-auth-cancel-1
Patch Set: extension test Created 5 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
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/views/ssl_client_certificate_selector.h" 5 #include "chrome/browser/ui/views/ssl_client_certificate_selector.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/certificate_viewer.h" 10 #include "chrome/browser/certificate_viewer.h"
11 #include "chrome/grit/generated_resources.h" 11 #include "chrome/grit/generated_resources.h"
12 #include "components/constrained_window/constrained_window_views.h" 12 #include "components/constrained_window/constrained_window_views.h"
13 #include "components/web_modal/popup_manager.h"
13 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "content/public/browser/client_certificate_delegate.h"
14 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
15 #include "net/cert/x509_certificate.h" 17 #include "net/cert/x509_certificate.h"
16 #include "net/ssl/ssl_cert_request_info.h" 18 #include "net/ssl/ssl_cert_request_info.h"
17 #include "ui/base/l10n/l10n_util.h" 19 #include "ui/base/l10n/l10n_util.h"
18 #include "ui/base/models/table_model.h" 20 #include "ui/base/models/table_model.h"
19 #include "ui/base/models/table_model_observer.h" 21 #include "ui/base/models/table_model_observer.h"
20 #include "ui/views/controls/button/label_button.h" 22 #include "ui/views/controls/button/label_button.h"
21 #include "ui/views/controls/label.h" 23 #include "ui/views/controls/label.h"
22 #include "ui/views/controls/table/table_view.h" 24 #include "ui/views/controls/table/table_view.h"
23 #include "ui/views/layout/grid_layout.h" 25 #include "ui/views/layout/grid_layout.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 void CertificateSelectorTableModel::SetObserver( 78 void CertificateSelectorTableModel::SetObserver(
77 ui::TableModelObserver* observer) { 79 ui::TableModelObserver* observer) {
78 } 80 }
79 81
80 /////////////////////////////////////////////////////////////////////////////// 82 ///////////////////////////////////////////////////////////////////////////////
81 // SSLClientCertificateSelector: 83 // SSLClientCertificateSelector:
82 84
83 SSLClientCertificateSelector::SSLClientCertificateSelector( 85 SSLClientCertificateSelector::SSLClientCertificateSelector(
84 content::WebContents* web_contents, 86 content::WebContents* web_contents,
85 const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info, 87 const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info,
86 const chrome::SelectCertificateCallback& callback) 88 scoped_ptr<content::ClientCertificateDelegate> delegate)
87 : SSLClientAuthObserver(web_contents->GetBrowserContext(), 89 : SSLClientAuthObserver(web_contents->GetBrowserContext(),
88 cert_request_info, callback), 90 cert_request_info,
91 delegate.Pass()),
89 model_(new CertificateSelectorTableModel(cert_request_info.get())), 92 model_(new CertificateSelectorTableModel(cert_request_info.get())),
90 web_contents_(web_contents), 93 web_contents_(web_contents),
91 table_(NULL), 94 table_(NULL),
92 view_cert_button_(NULL) { 95 view_cert_button_(NULL) {
93 DVLOG(1) << __FUNCTION__; 96 DVLOG(1) << __FUNCTION__;
94 } 97 }
95 98
96 SSLClientCertificateSelector::~SSLClientCertificateSelector() { 99 SSLClientCertificateSelector::~SSLClientCertificateSelector() {
97 table_->SetModel(NULL); 100 table_->SetModel(NULL);
98 } 101 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 cert)); 208 cert));
206 #else 209 #else
207 Unlocked(cert.get()); 210 Unlocked(cert.get());
208 #endif 211 #endif
209 return false; // Unlocked() will close the dialog. 212 return false; // Unlocked() will close the dialog.
210 } 213 }
211 214
212 return false; 215 return false;
213 } 216 }
214 217
218 bool SSLClientCertificateSelector::Close() {
219 DVLOG(1) << __FUNCTION__;
220 StopObserving();
221 CancelCertificateSelection();
222 return true;
223 }
224
215 views::View* SSLClientCertificateSelector::GetInitiallyFocusedView() { 225 views::View* SSLClientCertificateSelector::GetInitiallyFocusedView() {
216 return table_; 226 return table_;
217 } 227 }
218 228
219 views::View* SSLClientCertificateSelector::CreateExtraView() { 229 views::View* SSLClientCertificateSelector::CreateExtraView() {
220 DCHECK(!view_cert_button_); 230 DCHECK(!view_cert_button_);
221 view_cert_button_ = new views::LabelButton(this, 231 view_cert_button_ = new views::LabelButton(this,
222 l10n_util::GetStringUTF16(IDS_PAGEINFO_CERT_INFO_BUTTON)); 232 l10n_util::GetStringUTF16(IDS_PAGEINFO_CERT_INFO_BUTTON));
223 view_cert_button_->SetStyle(views::Button::STYLE_BUTTON); 233 view_cert_button_->SetStyle(views::Button::STYLE_BUTTON);
224 return view_cert_button_; 234 return view_cert_button_;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 DVLOG(1) << __FUNCTION__; 278 DVLOG(1) << __FUNCTION__;
269 CertificateSelected(cert); 279 CertificateSelected(cert);
270 GetWidget()->Close(); 280 GetWidget()->Close();
271 } 281 }
272 282
273 namespace chrome { 283 namespace chrome {
274 284
275 void ShowSSLClientCertificateSelector( 285 void ShowSSLClientCertificateSelector(
276 content::WebContents* contents, 286 content::WebContents* contents,
277 net::SSLCertRequestInfo* cert_request_info, 287 net::SSLCertRequestInfo* cert_request_info,
278 const chrome::SelectCertificateCallback& callback) { 288 scoped_ptr<content::ClientCertificateDelegate> delegate) {
279 DVLOG(1) << __FUNCTION__ << " " << contents; 289 DVLOG(1) << __FUNCTION__ << " " << contents;
280 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 290 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
281 (new SSLClientCertificateSelector( 291
282 contents, cert_request_info, callback))->Init(); 292 // Not all WebContentses can show modal dialogs.
293 //
294 // TODO(davidben): Move this hook to the WebContentsDelegate and only try to
295 // show a dialog in Browser's implementation. https://crbug.com/456255
296 if (web_modal::PopupManager::FromWebContents(contents) == nullptr) {
297 delegate->CancelCertificateSelection();
298 return;
299 }
300
301 (new SSLClientCertificateSelector(contents, cert_request_info,
302 delegate.Pass()))->Init();
283 } 303 }
284 304
285 } // namespace chrome 305 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698