[email protected] | f786717 | 2012-07-11 07:04:07 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 74b962a | 2011-06-03 21:22:54 | [diff] [blame] | 5 | #ifndef CONTENT_BROWSER_SSL_SSL_CLIENT_AUTH_HANDLER_H_ |
6 | #define CONTENT_BROWSER_SSL_SSL_CLIENT_AUTH_HANDLER_H_ | ||||
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 7 | |
8 | #include "base/basictypes.h" | ||||
[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 9 | #include "base/memory/ref_counted.h" |
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 10 | #include "base/sequenced_task_runner_helpers.h" |
11 | #include "content/common/content_export.h" | ||||
[email protected] | c38831a1 | 2011-10-28 12:44:49 | [diff] [blame] | 12 | #include "content/public/browser/browser_thread.h" |
[email protected] | 536fd0b | 2013-03-14 17:41:57 | [diff] [blame] | 13 | #include "net/ssl/ssl_cert_request_info.h" |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 14 | |
15 | namespace net { | ||||
[email protected] | 1ccb699 | 2013-10-30 04:46:20 | [diff] [blame] | 16 | class ClientCertStore; |
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 17 | class HttpNetworkSession; |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 18 | class URLRequest; |
[email protected] | edfe7fab | 2010-11-28 13:11:52 | [diff] [blame] | 19 | class X509Certificate; |
20 | } // namespace net | ||||
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 21 | |
[email protected] | 89f23a3 | 2012-10-24 22:31:24 | [diff] [blame] | 22 | namespace content { |
23 | |||||
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 24 | class ResourceContext; |
robliao | e9651b35 | 2014-11-26 18:01:50 | [diff] [blame] | 25 | |
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 26 | // This class handles the approval and selection of a certificate for SSL client |
27 | // authentication by the user. | ||||
28 | // It is self-owned and deletes itself when the UI reports the user selection or | ||||
29 | // when the net::URLRequest is cancelled. | ||||
30 | class CONTENT_EXPORT SSLClientAuthHandler | ||||
31 | : public base::RefCountedThreadSafe< | ||||
32 | SSLClientAuthHandler, BrowserThread::DeleteOnIOThread> { | ||||
33 | public: | ||||
davidben | 5b6618d | 2014-12-08 20:41:39 | [diff] [blame^] | 34 | using CertificateCallback = base::Callback<void(net::X509Certificate*)>; |
35 | |||||
[email protected] | 1ccb699 | 2013-10-30 04:46:20 | [diff] [blame] | 36 | SSLClientAuthHandler(scoped_ptr<net::ClientCertStore> client_cert_store, |
37 | net::URLRequest* request, | ||||
davidben | 5b6618d | 2014-12-08 20:41:39 | [diff] [blame^] | 38 | net::SSLCertRequestInfo* cert_request_info, |
39 | const CertificateCallback& callback); | ||||
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 40 | |
[email protected] | c99c442e | 2011-08-24 11:37:30 | [diff] [blame] | 41 | // Selects a certificate and resumes the URL request with that certificate. |
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 42 | // Should only be called on the IO thread. |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 43 | void SelectCertificate(); |
44 | |||||
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 45 | // Invoked when the request associated with this handler is cancelled. |
46 | // Should only be called on the IO thread. | ||||
47 | void OnRequestCancelled(); | ||||
48 | |||||
49 | // Calls DoCertificateSelected on the I/O thread. | ||||
50 | // Called on the UI thread after the user has made a selection (which may | ||||
51 | // be long after DoSelectCertificate returns, if the UI is modeless/async.) | ||||
52 | void CertificateSelected(net::X509Certificate* cert); | ||||
53 | |||||
54 | protected: | ||||
55 | virtual ~SSLClientAuthHandler(); | ||||
56 | |||||
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 57 | private: |
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 58 | friend class base::RefCountedThreadSafe< |
59 | SSLClientAuthHandler, BrowserThread::DeleteOnIOThread>; | ||||
60 | friend class BrowserThread; | ||||
61 | friend class base::DeleteHelper<SSLClientAuthHandler>; | ||||
62 | |||||
[email protected] | 1ccb699 | 2013-10-30 04:46:20 | [diff] [blame] | 63 | // Called when ClientCertStore is done retrieving the cert list. |
64 | void DidGetClientCerts(); | ||||
65 | |||||
davidben | 78fee7d | 2014-12-03 19:41:51 | [diff] [blame] | 66 | // Notifies that the user has selected a cert. |
67 | // Called on the IO thread. | ||||
68 | void DoCertificateSelected(net::X509Certificate* cert); | ||||
69 | |||||
70 | // Selects a client certificate on the UI thread. | ||||
71 | void DoSelectCertificate(int render_process_host_id, | ||||
72 | int render_frame_host_id); | ||||
[email protected] | c6176905 | 2011-05-18 18:38:35 | [diff] [blame] | 73 | |
[email protected] | 6981d963 | 2010-11-30 21:34:02 | [diff] [blame] | 74 | // The net::URLRequest that triggered this client auth. |
[email protected] | edfe7fab | 2010-11-28 13:11:52 | [diff] [blame] | 75 | net::URLRequest* request_; |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 76 | |
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 77 | // The certs to choose from. |
78 | scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; | ||||
79 | |||||
[email protected] | 1ccb699 | 2013-10-30 04:46:20 | [diff] [blame] | 80 | scoped_ptr<net::ClientCertStore> client_cert_store_; |
81 | |||||
davidben | 5b6618d | 2014-12-08 20:41:39 | [diff] [blame^] | 82 | // The callback to call when the certificate is selected. |
83 | CertificateCallback callback_; | ||||
84 | |||||
[email protected] | ce2b6226 | 2009-06-27 05:11:41 | [diff] [blame] | 85 | DISALLOW_COPY_AND_ASSIGN(SSLClientAuthHandler); |
86 | }; | ||||
87 | |||||
[email protected] | 89f23a3 | 2012-10-24 22:31:24 | [diff] [blame] | 88 | } // namespace content |
89 | |||||
[email protected] | 74b962a | 2011-06-03 21:22:54 | [diff] [blame] | 90 | #endif // CONTENT_BROWSER_SSL_SSL_CLIENT_AUTH_HANDLER_H_ |