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

Side by Side Diff: chrome/browser/ssl/ssl_add_cert_handler.cc

Issue 302653006: Remove use of ResourceRequestInfo::GetRequestID from cert enrollment. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase again. Created 6 years, 6 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/ssl/ssl_add_cert_handler.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/ssl/ssl_tab_helper.h"
9 #include "chrome/browser/tab_contents/tab_util.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/resource_request_info.h"
12 #include "content/public/browser/web_contents.h"
13 #include "net/base/net_errors.h"
14 #include "net/cert/cert_database.h"
15 #include "net/cert/x509_certificate.h"
16 #include "net/url_request/url_request.h"
17
18 using content::BrowserThread;
19 using content::WebContents;
20
21 SSLAddCertHandler::SSLAddCertHandler(net::URLRequest* request,
22 net::X509Certificate* cert,
23 int render_process_host_id,
24 int render_view_id)
25 : cert_(cert),
26 render_process_host_id_(render_process_host_id),
27 render_view_id_(render_view_id) {
28 network_request_id_
29 = content::ResourceRequestInfo::ForRequest(request)->GetRequestID();
30 // Stay alive until the process completes and Finished() is called.
31 AddRef();
32 // Delay adding the certificate until the next mainloop iteration.
33 BrowserThread::PostTask(
34 BrowserThread::IO, FROM_HERE,
35 base::Bind(&SSLAddCertHandler::Run, this));
36 }
37
38 SSLAddCertHandler::~SSLAddCertHandler() {}
39
40 void SSLAddCertHandler::Run() {
41 int cert_error = net::CertDatabase::GetInstance()->CheckUserCert(cert_.get());
42 if (cert_error != net::OK) {
43 LOG_IF(ERROR, cert_error == net::ERR_NO_PRIVATE_KEY_FOR_CERT)
44 << "No corresponding private key in store for cert: "
45 << (cert_.get() ? cert_->subject().GetDisplayName() : "NULL");
46
47 BrowserThread::PostTask(
48 BrowserThread::UI, FROM_HERE,
49 base::Bind(
50 &SSLAddCertHandler::CallVerifyClientCertificateError, this,
51 cert_error));
52 Finished(false);
53 return;
54 }
55 // TODO(davidben): Move the existing certificate dialog elsewhere, make
56 // AskToAddCert send a message to the RenderViewHostDelegate, and ask when we
57 // cannot completely verify the certificate for whatever reason.
58
59 // AskToAddCert();
60 Finished(true);
61 }
62
63 #if !defined(OS_MACOSX)
64 void SSLAddCertHandler::AskToAddCert() {
65 // TODO(snej): Someone should add Windows and GTK implementations with UI.
66 Finished(true);
67 }
68 #endif
69
70 void SSLAddCertHandler::Finished(bool add_cert) {
71 int cert_error = net::OK;
72 if (add_cert)
73 cert_error = net::CertDatabase::GetInstance()->AddUserCert(cert_.get());
74
75 BrowserThread::PostTask(
76 BrowserThread::UI, FROM_HERE,
77 base::Bind(
78 &SSLAddCertHandler::CallAddClientCertificate, this,
79 add_cert, cert_error));
80
81 Release();
82 }
83
84 void SSLAddCertHandler::CallVerifyClientCertificateError(int cert_error) {
85 WebContents* tab = tab_util::GetWebContentsByID(
86 render_process_host_id_, render_view_id_);
87 if (!tab)
88 return;
89
90 SSLTabHelper* ssl_tab_helper = SSLTabHelper::FromWebContents(tab);
91 ssl_tab_helper->OnVerifyClientCertificateError(this, cert_error);
92 }
93
94 void SSLAddCertHandler::CallAddClientCertificate(bool add_cert,
95 int cert_error) {
96 WebContents* tab = tab_util::GetWebContentsByID(
97 render_process_host_id_, render_view_id_);
98 if (!tab)
99 return;
100
101 SSLTabHelper* ssl_tab_helper = SSLTabHelper::FromWebContents(tab);
102 if (add_cert) {
103 if (cert_error == net::OK) {
104 ssl_tab_helper->OnAddClientCertificateSuccess(this);
105 } else {
106 ssl_tab_helper->OnAddClientCertificateError(this, cert_error);
107 }
108 }
109 ssl_tab_helper->OnAddClientCertificateFinished(this);
110 }
OLDNEW
« no previous file with comments | « chrome/browser/ssl/ssl_add_cert_handler.h ('k') | chrome/browser/ssl/ssl_add_cert_handler_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698