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

Side by Side Diff: chrome/browser/chromeos/certificate_provider/certificate_provider_service.cc

Issue 1422573008: Plumbing SSLPrivateKey (//net) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removing un-needed forward decl. Created 5 years, 1 month 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
« no previous file with comments | « no previous file | chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/chromeos/certificate_provider/certificate_provider_serv ice.h" 5 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // |certificate_map| must outlive this provider. |service| must be 45 // |certificate_map| must outlive this provider. |service| must be
46 // dereferenceable on |service_task_runner|. 46 // dereferenceable on |service_task_runner|.
47 // This provider may be accessed from any thread. Methods and destructor must 47 // This provider may be accessed from any thread. Methods and destructor must
48 // never be called concurrently. 48 // never be called concurrently.
49 CertKeyProviderImpl( 49 CertKeyProviderImpl(
50 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner, 50 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner,
51 const base::WeakPtr<CertificateProviderService>& service, 51 const base::WeakPtr<CertificateProviderService>& service,
52 certificate_provider::ThreadSafeCertificateMap* certificate_map); 52 certificate_provider::ThreadSafeCertificateMap* certificate_map);
53 ~CertKeyProviderImpl() override; 53 ~CertKeyProviderImpl() override;
54 54
55 bool GetCertificateKey(const net::X509Certificate& cert, 55 bool GetCertificateKey(
56 scoped_ptr<net::SSLPrivateKey>* private_key) override; 56 const net::X509Certificate& cert,
57 scoped_refptr<net::SSLPrivateKey>* private_key) override;
57 58
58 private: 59 private:
59 const scoped_refptr<base::SequencedTaskRunner> service_task_runner_; 60 const scoped_refptr<base::SequencedTaskRunner> service_task_runner_;
60 // Must be dereferenced on |service_task_runner_| only. 61 // Must be dereferenced on |service_task_runner_| only.
61 base::WeakPtr<CertificateProviderService> service_; 62 base::WeakPtr<CertificateProviderService> service_;
62 certificate_provider::ThreadSafeCertificateMap* const certificate_map_; 63 certificate_provider::ThreadSafeCertificateMap* const certificate_map_;
63 64
64 DISALLOW_COPY_AND_ASSIGN(CertKeyProviderImpl); 65 DISALLOW_COPY_AND_ASSIGN(CertKeyProviderImpl);
65 }; 66 };
66 67
(...skipping 30 matching lines...) Expand all
97 // Objects of this class must be used on a single thread. Any thread is allowed. 98 // Objects of this class must be used on a single thread. Any thread is allowed.
98 class CertificateProviderService::SSLPrivateKey : public net::SSLPrivateKey { 99 class CertificateProviderService::SSLPrivateKey : public net::SSLPrivateKey {
99 public: 100 public:
100 // Any calls back to |service| will be posted to |service_task_runner|. 101 // Any calls back to |service| will be posted to |service_task_runner|.
101 // |service| must be dereferenceable on |service_task_runner|. 102 // |service| must be dereferenceable on |service_task_runner|.
102 SSLPrivateKey( 103 SSLPrivateKey(
103 const std::string& extension_id, 104 const std::string& extension_id,
104 const CertificateInfo& cert_info, 105 const CertificateInfo& cert_info,
105 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner, 106 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner,
106 const base::WeakPtr<CertificateProviderService>& service); 107 const base::WeakPtr<CertificateProviderService>& service);
107 ~SSLPrivateKey() override;
108 108
109 // net::SSLPrivateKey: 109 // net::SSLPrivateKey:
110 Type GetType() override; 110 Type GetType() override;
111 std::vector<net::SSLPrivateKey::Hash> GetDigestPreferences() override; 111 std::vector<net::SSLPrivateKey::Hash> GetDigestPreferences() override;
112 size_t GetMaxSignatureLengthInBytes() override; 112 size_t GetMaxSignatureLengthInBytes() override;
113 void SignDigest(Hash hash, 113 void SignDigest(Hash hash,
114 const base::StringPiece& input, 114 const base::StringPiece& input,
115 const SignCallback& callback) override; 115 const SignCallback& callback) override;
116 116
117 private: 117 private:
118 ~SSLPrivateKey() override;
119
118 static void SignDigestOnServiceTaskRunner( 120 static void SignDigestOnServiceTaskRunner(
119 const base::WeakPtr<CertificateProviderService>& service, 121 const base::WeakPtr<CertificateProviderService>& service,
120 const std::string& extension_id, 122 const std::string& extension_id,
121 const scoped_refptr<net::X509Certificate>& certificate, 123 const scoped_refptr<net::X509Certificate>& certificate,
122 Hash hash, 124 Hash hash,
123 const std::string& input, 125 const std::string& input,
124 const SignCallback& callback); 126 const SignCallback& callback);
125 127
126 void DidSignDigest(const SignCallback& callback, 128 void DidSignDigest(const SignCallback& callback,
127 net::Error error, 129 net::Error error,
(...skipping 15 matching lines...) Expand all
143 const base::WeakPtr<CertificateProviderService>& service, 145 const base::WeakPtr<CertificateProviderService>& service,
144 certificate_provider::ThreadSafeCertificateMap* certificate_map) 146 certificate_provider::ThreadSafeCertificateMap* certificate_map)
145 : service_task_runner_(service_task_runner), 147 : service_task_runner_(service_task_runner),
146 service_(service), 148 service_(service),
147 certificate_map_(certificate_map) {} 149 certificate_map_(certificate_map) {}
148 150
149 CertificateProviderService::CertKeyProviderImpl::~CertKeyProviderImpl() {} 151 CertificateProviderService::CertKeyProviderImpl::~CertKeyProviderImpl() {}
150 152
151 bool CertificateProviderService::CertKeyProviderImpl::GetCertificateKey( 153 bool CertificateProviderService::CertKeyProviderImpl::GetCertificateKey(
152 const net::X509Certificate& cert, 154 const net::X509Certificate& cert,
153 scoped_ptr<net::SSLPrivateKey>* private_key) { 155 scoped_refptr<net::SSLPrivateKey>* private_key) {
154 bool is_currently_provided = false; 156 bool is_currently_provided = false;
155 CertificateInfo info; 157 CertificateInfo info;
156 std::string extension_id; 158 std::string extension_id;
157 certificate_map_->LookUpCertificate(cert, &is_currently_provided, &info, 159 certificate_map_->LookUpCertificate(cert, &is_currently_provided, &info,
158 &extension_id); 160 &extension_id);
159 if (!is_currently_provided) 161 if (!is_currently_provided)
160 return false; 162 return false;
161 163
162 private_key->reset( 164 *private_key =
163 new SSLPrivateKey(extension_id, info, service_task_runner_, service_)); 165 new SSLPrivateKey(extension_id, info, service_task_runner_, service_);
166
164 return true; 167 return true;
165 } 168 }
166 169
167 CertificateProviderService::CertificateProviderImpl::CertificateProviderImpl( 170 CertificateProviderService::CertificateProviderImpl::CertificateProviderImpl(
168 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner, 171 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner,
169 const base::WeakPtr<CertificateProviderService>& service) 172 const base::WeakPtr<CertificateProviderService>& service)
170 : service_task_runner_(service_task_runner), service_(service) {} 173 : service_task_runner_(service_task_runner), service_(service) {}
171 174
172 CertificateProviderService::CertificateProviderImpl:: 175 CertificateProviderService::CertificateProviderImpl::
173 ~CertificateProviderImpl() {} 176 ~CertificateProviderImpl() {}
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 : extension_id_(extension_id), 214 : extension_id_(extension_id),
212 cert_info_(cert_info), 215 cert_info_(cert_info),
213 service_task_runner_(service_task_runner), 216 service_task_runner_(service_task_runner),
214 service_(service), 217 service_(service),
215 weak_factory_(this) { 218 weak_factory_(this) {
216 // This constructor is called on |service_task_runner|. Only subsequent calls 219 // This constructor is called on |service_task_runner|. Only subsequent calls
217 // to member functions have to be on a common thread. 220 // to member functions have to be on a common thread.
218 thread_checker_.DetachFromThread(); 221 thread_checker_.DetachFromThread();
219 } 222 }
220 223
221 CertificateProviderService::SSLPrivateKey::~SSLPrivateKey() {
222 DCHECK(thread_checker_.CalledOnValidThread());
223 }
224
225 CertificateProviderService::SSLPrivateKey::Type 224 CertificateProviderService::SSLPrivateKey::Type
226 CertificateProviderService::SSLPrivateKey::GetType() { 225 CertificateProviderService::SSLPrivateKey::GetType() {
227 DCHECK(thread_checker_.CalledOnValidThread()); 226 DCHECK(thread_checker_.CalledOnValidThread());
228 return cert_info_.type; 227 return cert_info_.type;
229 } 228 }
230 229
231 std::vector<net::SSLPrivateKey::Hash> 230 std::vector<net::SSLPrivateKey::Hash>
232 CertificateProviderService::SSLPrivateKey::GetDigestPreferences() { 231 CertificateProviderService::SSLPrivateKey::GetDigestPreferences() {
233 DCHECK(thread_checker_.CalledOnValidThread()); 232 DCHECK(thread_checker_.CalledOnValidThread());
234 return cert_info_.supported_hashes; 233 return cert_info_.supported_hashes;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 // destroyed in the meantime. 271 // destroyed in the meantime.
273 base::Bind(&SSLPrivateKey::DidSignDigest, 272 base::Bind(&SSLPrivateKey::DidSignDigest,
274 weak_factory_.GetWeakPtr(), callback)); 273 weak_factory_.GetWeakPtr(), callback));
275 274
276 service_task_runner_->PostTask( 275 service_task_runner_->PostTask(
277 FROM_HERE, base::Bind(&SSLPrivateKey::SignDigestOnServiceTaskRunner, 276 FROM_HERE, base::Bind(&SSLPrivateKey::SignDigestOnServiceTaskRunner,
278 service_, extension_id_, cert_info_.certificate, 277 service_, extension_id_, cert_info_.certificate,
279 hash, input.as_string(), bound_callback)); 278 hash, input.as_string(), bound_callback));
280 } 279 }
281 280
281 CertificateProviderService::SSLPrivateKey::~SSLPrivateKey() {
282 DCHECK(thread_checker_.CalledOnValidThread());
283 }
284
282 void CertificateProviderService::SSLPrivateKey::DidSignDigest( 285 void CertificateProviderService::SSLPrivateKey::DidSignDigest(
283 const SignCallback& callback, 286 const SignCallback& callback,
284 net::Error error, 287 net::Error error,
285 const std::vector<uint8_t>& signature) { 288 const std::vector<uint8_t>& signature) {
286 DCHECK(thread_checker_.CalledOnValidThread()); 289 DCHECK(thread_checker_.CalledOnValidThread());
287 callback.Run(error, signature); 290 callback.Run(error, signature);
288 } 291 }
289 292
290 CertificateProviderService::CertificateProviderService() 293 CertificateProviderService::CertificateProviderService()
291 : weak_factory_(this) {} 294 : weak_factory_(this) {}
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 const int sign_request_id = sign_requests_.AddRequest(extension_id, callback); 463 const int sign_request_id = sign_requests_.AddRequest(extension_id, callback);
461 if (!delegate_->DispatchSignRequestToExtension(extension_id, sign_request_id, 464 if (!delegate_->DispatchSignRequestToExtension(extension_id, sign_request_id,
462 hash, certificate, digest)) { 465 hash, certificate, digest)) {
463 sign_requests_.RemoveRequest(extension_id, sign_request_id, 466 sign_requests_.RemoveRequest(extension_id, sign_request_id,
464 nullptr /* callback */); 467 nullptr /* callback */);
465 callback.Run(net::ERR_FAILED, std::vector<uint8_t>()); 468 callback.Run(net::ERR_FAILED, std::vector<uint8_t>());
466 } 469 }
467 } 470 }
468 471
469 } // namespace chromeos 472 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698