OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <cert.h> | 5 #include <cert.h> |
6 #include <cryptohi.h> | 6 #include <cryptohi.h> |
7 #include <keyhi.h> | 7 #include <keyhi.h> |
8 #include <secder.h> | 8 #include <secder.h> |
9 #include <stddef.h> | 9 #include <stddef.h> |
10 #include <stdint.h> | 10 #include <stdint.h> |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 std::unique_ptr<net::CertificateList> matches, | 236 std::unique_ptr<net::CertificateList> matches, |
237 const std::string& error_message) { | 237 const std::string& error_message) { |
238 origin_task_runner_->PostTask( | 238 origin_task_runner_->PostTask( |
239 from, base::Bind(callback_, base::Passed(&matches), error_message)); | 239 from, base::Bind(callback_, base::Passed(&matches), error_message)); |
240 } | 240 } |
241 | 241 |
242 const std::string username_hash_; | 242 const std::string username_hash_; |
243 const bool use_system_key_slot_; | 243 const bool use_system_key_slot_; |
244 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; | 244 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; |
245 std::unique_ptr<net::ClientCertStore> cert_store_; | 245 std::unique_ptr<net::ClientCertStore> cert_store_; |
| 246 std::unique_ptr<net::CertificateList> certs_; |
246 | 247 |
247 private: | 248 private: |
248 // Must be called on origin thread, therefore use CallBack(). | 249 // Must be called on origin thread, therefore use CallBack(). |
249 subtle::SelectCertificatesCallback callback_; | 250 subtle::SelectCertificatesCallback callback_; |
250 }; | 251 }; |
251 | 252 |
252 class GetCertificatesState : public NSSOperationState { | 253 class GetCertificatesState : public NSSOperationState { |
253 public: | 254 public: |
254 explicit GetCertificatesState(const GetCertificatesCallback& callback); | 255 explicit GetCertificatesState(const GetCertificatesCallback& callback); |
255 ~GetCertificatesState() override {} | 256 ~GetCertificatesState() override {} |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 .WithPriority(base::TaskPriority::BACKGROUND) | 543 .WithPriority(base::TaskPriority::BACKGROUND) |
543 .WithShutdownBehavior( | 544 .WithShutdownBehavior( |
544 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN), | 545 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN), |
545 base::Bind(&SignRSAOnWorkerThread, base::Passed(&state))); | 546 base::Bind(&SignRSAOnWorkerThread, base::Passed(&state))); |
546 } | 547 } |
547 | 548 |
548 // Called when ClientCertStoreChromeOS::GetClientCerts is done. Builds the list | 549 // Called when ClientCertStoreChromeOS::GetClientCerts is done. Builds the list |
549 // of net::CertificateList and calls back. Used by | 550 // of net::CertificateList and calls back. Used by |
550 // SelectCertificatesOnIOThread(). | 551 // SelectCertificatesOnIOThread(). |
551 void DidSelectCertificatesOnIOThread( | 552 void DidSelectCertificatesOnIOThread( |
552 std::unique_ptr<SelectCertificatesState> state, | 553 std::unique_ptr<SelectCertificatesState> state) { |
553 net::CertificateList certs) { | |
554 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 554 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
555 state->CallBack(FROM_HERE, | 555 state->CallBack(FROM_HERE, std::move(state->certs_), |
556 base::MakeUnique<net::CertificateList>(std::move(certs)), | |
557 std::string() /* no error */); | 556 std::string() /* no error */); |
558 } | 557 } |
559 | 558 |
560 // Continues selecting certificates on the IO thread. Used by | 559 // Continues selecting certificates on the IO thread. Used by |
561 // SelectClientCertificates(). | 560 // SelectClientCertificates(). |
562 void SelectCertificatesOnIOThread( | 561 void SelectCertificatesOnIOThread( |
563 std::unique_ptr<SelectCertificatesState> state) { | 562 std::unique_ptr<SelectCertificatesState> state) { |
564 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 563 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
565 state->cert_store_.reset(new ClientCertStoreChromeOS( | 564 state->cert_store_.reset(new ClientCertStoreChromeOS( |
566 nullptr, // no additional provider | 565 nullptr, // no additional provider |
567 base::MakeUnique<ClientCertFilterChromeOS>(state->use_system_key_slot_, | 566 base::MakeUnique<ClientCertFilterChromeOS>(state->use_system_key_slot_, |
568 state->username_hash_), | 567 state->username_hash_), |
569 ClientCertStoreChromeOS::PasswordDelegateFactory())); | 568 ClientCertStoreChromeOS::PasswordDelegateFactory())); |
570 | 569 |
| 570 state->certs_.reset(new net::CertificateList); |
| 571 |
571 SelectCertificatesState* state_ptr = state.get(); | 572 SelectCertificatesState* state_ptr = state.get(); |
572 state_ptr->cert_store_->GetClientCerts( | 573 state_ptr->cert_store_->GetClientCerts( |
573 *state_ptr->cert_request_info_, | 574 *state_ptr->cert_request_info_, state_ptr->certs_.get(), |
574 base::Bind(&DidSelectCertificatesOnIOThread, base::Passed(&state))); | 575 base::Bind(&DidSelectCertificatesOnIOThread, base::Passed(&state))); |
575 } | 576 } |
576 | 577 |
577 // Filters the obtained certificates on a worker thread. Used by | 578 // Filters the obtained certificates on a worker thread. Used by |
578 // DidGetCertificates(). | 579 // DidGetCertificates(). |
579 void FilterCertificatesOnWorkerThread( | 580 void FilterCertificatesOnWorkerThread( |
580 std::unique_ptr<GetCertificatesState> state) { | 581 std::unique_ptr<GetCertificatesState> state) { |
581 std::unique_ptr<net::CertificateList> client_certs(new net::CertificateList); | 582 std::unique_ptr<net::CertificateList> client_certs(new net::CertificateList); |
582 for (net::CertificateList::const_iterator it = state->certs_->begin(); | 583 for (net::CertificateList::const_iterator it = state->certs_->begin(); |
583 it != state->certs_->end(); | 584 it != state->certs_->end(); |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
905 NSSOperationState* state_ptr = state.get(); | 906 NSSOperationState* state_ptr = state.get(); |
906 GetCertDatabase(std::string() /* don't get any specific slot */, | 907 GetCertDatabase(std::string() /* don't get any specific slot */, |
907 base::Bind(&GetTokensWithDB, base::Passed(&state)), | 908 base::Bind(&GetTokensWithDB, base::Passed(&state)), |
908 browser_context, | 909 browser_context, |
909 state_ptr); | 910 state_ptr); |
910 } | 911 } |
911 | 912 |
912 } // namespace platform_keys | 913 } // namespace platform_keys |
913 | 914 |
914 } // namespace chromeos | 915 } // namespace chromeos |
OLD | NEW |