OLD | NEW |
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 <stddef.h> | 7 #include <stddef.h> |
| 8 |
8 #include <utility> | 9 #include <utility> |
9 | 10 |
10 #include "base/bind.h" | 11 #include "base/bind.h" |
11 #include "base/bind_helpers.h" | 12 #include "base/bind_helpers.h" |
12 #include "base/callback.h" | 13 #include "base/callback.h" |
13 #include "base/location.h" | 14 #include "base/location.h" |
14 #include "base/logging.h" | 15 #include "base/logging.h" |
15 #include "base/macros.h" | 16 #include "base/macros.h" |
| 17 #include "base/memory/ptr_util.h" |
16 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
17 #include "base/strings/string_piece.h" | 19 #include "base/strings/string_piece.h" |
18 #include "base/task_runner.h" | 20 #include "base/task_runner.h" |
19 #include "base/thread_task_runner_handle.h" | 21 #include "base/thread_task_runner_handle.h" |
20 #include "chrome/browser/chromeos/certificate_provider/certificate_provider.h" | 22 #include "chrome/browser/chromeos/certificate_provider/certificate_provider.h" |
21 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
22 #include "net/ssl/client_key_store.h" | 24 #include "net/ssl/client_key_store.h" |
23 | 25 |
24 namespace chromeos { | 26 namespace chromeos { |
25 | 27 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 // |service| must be dereferenceable on |service_task_runner|. | 78 // |service| must be dereferenceable on |service_task_runner|. |
77 // This provider is not thread safe, but can be used on any thread. | 79 // This provider is not thread safe, but can be used on any thread. |
78 CertificateProviderImpl( | 80 CertificateProviderImpl( |
79 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner, | 81 const scoped_refptr<base::SequencedTaskRunner>& service_task_runner, |
80 const base::WeakPtr<CertificateProviderService>& service); | 82 const base::WeakPtr<CertificateProviderService>& service); |
81 ~CertificateProviderImpl() override; | 83 ~CertificateProviderImpl() override; |
82 | 84 |
83 void GetCertificates(const base::Callback<void(const net::CertificateList&)>& | 85 void GetCertificates(const base::Callback<void(const net::CertificateList&)>& |
84 callback) override; | 86 callback) override; |
85 | 87 |
86 scoped_ptr<CertificateProvider> Copy() override; | 88 std::unique_ptr<CertificateProvider> Copy() override; |
87 | 89 |
88 private: | 90 private: |
89 static void GetCertificatesOnServiceThread( | 91 static void GetCertificatesOnServiceThread( |
90 const base::WeakPtr<CertificateProviderService>& service, | 92 const base::WeakPtr<CertificateProviderService>& service, |
91 const base::Callback<void(const net::CertificateList&)>& callback); | 93 const base::Callback<void(const net::CertificateList&)>& callback); |
92 | 94 |
93 const scoped_refptr<base::SequencedTaskRunner> service_task_runner_; | 95 const scoped_refptr<base::SequencedTaskRunner> service_task_runner_; |
94 // Must be dereferenced on |service_task_runner_| only. | 96 // Must be dereferenced on |service_task_runner_| only. |
95 const base::WeakPtr<CertificateProviderService> service_; | 97 const base::WeakPtr<CertificateProviderService> service_; |
96 | 98 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 base::ThreadTaskRunnerHandle::Get(); | 187 base::ThreadTaskRunnerHandle::Get(); |
186 const base::Callback<void(const net::CertificateList&)> | 188 const base::Callback<void(const net::CertificateList&)> |
187 callback_from_service_thread = base::Bind(&PostCertificatesToTaskRunner, | 189 callback_from_service_thread = base::Bind(&PostCertificatesToTaskRunner, |
188 source_task_runner, callback); | 190 source_task_runner, callback); |
189 | 191 |
190 service_task_runner_->PostTask( | 192 service_task_runner_->PostTask( |
191 FROM_HERE, base::Bind(&GetCertificatesOnServiceThread, service_, | 193 FROM_HERE, base::Bind(&GetCertificatesOnServiceThread, service_, |
192 callback_from_service_thread)); | 194 callback_from_service_thread)); |
193 } | 195 } |
194 | 196 |
195 scoped_ptr<CertificateProvider> | 197 std::unique_ptr<CertificateProvider> |
196 CertificateProviderService::CertificateProviderImpl::Copy() { | 198 CertificateProviderService::CertificateProviderImpl::Copy() { |
197 return make_scoped_ptr( | 199 return base::WrapUnique( |
198 new CertificateProviderImpl(service_task_runner_, service_)); | 200 new CertificateProviderImpl(service_task_runner_, service_)); |
199 } | 201 } |
200 | 202 |
201 // static | 203 // static |
202 void CertificateProviderService::CertificateProviderImpl:: | 204 void CertificateProviderService::CertificateProviderImpl:: |
203 GetCertificatesOnServiceThread( | 205 GetCertificatesOnServiceThread( |
204 const base::WeakPtr<CertificateProviderService>& service, | 206 const base::WeakPtr<CertificateProviderService>& service, |
205 const base::Callback<void(const net::CertificateList&)>& callback) { | 207 const base::Callback<void(const net::CertificateList&)>& callback) { |
206 if (!service) { | 208 if (!service) { |
207 callback.Run(net::CertificateList()); | 209 callback.Run(net::CertificateList()); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 | 304 |
303 // ClientKeyStore serializes access to |cert_key_provider_|. | 305 // ClientKeyStore serializes access to |cert_key_provider_|. |
304 // Once RemoveProvider() returns, it is guaranteed that there are no more | 306 // Once RemoveProvider() returns, it is guaranteed that there are no more |
305 // accesses to |cert_key_provider_| in flight and no references to | 307 // accesses to |cert_key_provider_| in flight and no references to |
306 // |cert_key_provider_| are remaining. This service will hold the last | 308 // |cert_key_provider_| are remaining. This service will hold the last |
307 // reference to |cert_key_provider_|. | 309 // reference to |cert_key_provider_|. |
308 net::ClientKeyStore::GetInstance()->RemoveProvider(cert_key_provider_.get()); | 310 net::ClientKeyStore::GetInstance()->RemoveProvider(cert_key_provider_.get()); |
309 cert_key_provider_.reset(); | 311 cert_key_provider_.reset(); |
310 } | 312 } |
311 | 313 |
312 void CertificateProviderService::SetDelegate(scoped_ptr<Delegate> delegate) { | 314 void CertificateProviderService::SetDelegate( |
| 315 std::unique_ptr<Delegate> delegate) { |
313 DCHECK(thread_checker_.CalledOnValidThread()); | 316 DCHECK(thread_checker_.CalledOnValidThread()); |
314 DCHECK(!delegate_); | 317 DCHECK(!delegate_); |
315 DCHECK(delegate); | 318 DCHECK(delegate); |
316 | 319 |
317 delegate_ = std::move(delegate); | 320 delegate_ = std::move(delegate); |
318 cert_key_provider_.reset( | 321 cert_key_provider_.reset( |
319 new CertKeyProviderImpl(base::ThreadTaskRunnerHandle::Get(), | 322 new CertKeyProviderImpl(base::ThreadTaskRunnerHandle::Get(), |
320 weak_factory_.GetWeakPtr(), &certificate_map_)); | 323 weak_factory_.GetWeakPtr(), &certificate_map_)); |
321 net::ClientKeyStore::GetInstance()->AddProvider(cert_key_provider_.get()); | 324 net::ClientKeyStore::GetInstance()->AddProvider(cert_key_provider_.get()); |
322 } | 325 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 const net::X509Certificate& cert, | 368 const net::X509Certificate& cert, |
366 bool* has_extension, | 369 bool* has_extension, |
367 std::string* extension_id) { | 370 std::string* extension_id) { |
368 DCHECK(thread_checker_.CalledOnValidThread()); | 371 DCHECK(thread_checker_.CalledOnValidThread()); |
369 | 372 |
370 CertificateInfo unused_info; | 373 CertificateInfo unused_info; |
371 return certificate_map_.LookUpCertificate(cert, has_extension, &unused_info, | 374 return certificate_map_.LookUpCertificate(cert, has_extension, &unused_info, |
372 extension_id); | 375 extension_id); |
373 } | 376 } |
374 | 377 |
375 scoped_ptr<CertificateProvider> | 378 std::unique_ptr<CertificateProvider> |
376 CertificateProviderService::CreateCertificateProvider() { | 379 CertificateProviderService::CreateCertificateProvider() { |
377 DCHECK(thread_checker_.CalledOnValidThread()); | 380 DCHECK(thread_checker_.CalledOnValidThread()); |
378 | 381 |
379 return make_scoped_ptr(new CertificateProviderImpl( | 382 return base::WrapUnique(new CertificateProviderImpl( |
380 base::ThreadTaskRunnerHandle::Get(), weak_factory_.GetWeakPtr())); | 383 base::ThreadTaskRunnerHandle::Get(), weak_factory_.GetWeakPtr())); |
381 } | 384 } |
382 | 385 |
383 void CertificateProviderService::OnExtensionUnloaded( | 386 void CertificateProviderService::OnExtensionUnloaded( |
384 const std::string& extension_id) { | 387 const std::string& extension_id) { |
385 DCHECK(thread_checker_.CalledOnValidThread()); | 388 DCHECK(thread_checker_.CalledOnValidThread()); |
386 | 389 |
387 for (const int cert_request_id : | 390 for (const int cert_request_id : |
388 certificate_requests_.DropExtension(extension_id)) { | 391 certificate_requests_.DropExtension(extension_id)) { |
389 std::map<std::string, CertificateInfoList> certificates; | 392 std::map<std::string, CertificateInfoList> certificates; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 const int sign_request_id = sign_requests_.AddRequest(extension_id, callback); | 470 const int sign_request_id = sign_requests_.AddRequest(extension_id, callback); |
468 if (!delegate_->DispatchSignRequestToExtension(extension_id, sign_request_id, | 471 if (!delegate_->DispatchSignRequestToExtension(extension_id, sign_request_id, |
469 hash, certificate, digest)) { | 472 hash, certificate, digest)) { |
470 sign_requests_.RemoveRequest(extension_id, sign_request_id, | 473 sign_requests_.RemoveRequest(extension_id, sign_request_id, |
471 nullptr /* callback */); | 474 nullptr /* callback */); |
472 callback.Run(net::ERR_FAILED, std::vector<uint8_t>()); | 475 callback.Run(net::ERR_FAILED, std::vector<uint8_t>()); |
473 } | 476 } |
474 } | 477 } |
475 | 478 |
476 } // namespace chromeos | 479 } // namespace chromeos |
OLD | NEW |