cert_verifier_service.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2020 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. #ifndef SERVICES_CERT_VERIFIER_CERT_VERIFIER_SERVICE_H_
  5. #define SERVICES_CERT_VERIFIER_CERT_VERIFIER_SERVICE_H_
  6. #include <memory>
  7. #include "base/memory/scoped_refptr.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "mojo/public/cpp/bindings/pending_receiver.h"
  10. #include "mojo/public/cpp/bindings/pending_remote.h"
  11. #include "mojo/public/cpp/bindings/receiver_set.h"
  12. #include "net/cert/cert_net_fetcher.h"
  13. #include "net/cert/cert_verifier.h"
  14. #include "net/cert/cert_verify_proc.h"
  15. #include "net/log/net_log_with_source.h"
  16. #include "services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h"
  17. #include "services/network/public/mojom/cert_verifier_service.mojom.h"
  18. #include "services/network/public/mojom/url_loader_factory.mojom.h"
  19. namespace net {
  20. class ChromeRootStoreData;
  21. }
  22. // Defines an implementation of a Cert Verifier Service to be queried by network
  23. // service or others.
  24. namespace cert_verifier {
  25. class CertVerifierServiceFactoryImpl;
  26. namespace internal {
  27. // This class will delete itself upon disconnection of its Mojo receiver.
  28. class CertVerifierServiceImpl : public mojom::CertVerifierService {
  29. public:
  30. explicit CertVerifierServiceImpl(
  31. std::unique_ptr<net::CertVerifierWithUpdatableProc> verifier,
  32. mojo::PendingReceiver<mojom::CertVerifierService> receiver,
  33. scoped_refptr<CertNetFetcherURLLoader> cert_net_fetcher);
  34. // mojom::CertVerifierService implementation:
  35. void Verify(const net::CertVerifier::RequestParams& params,
  36. uint32_t netlog_source_type,
  37. uint32_t netlog_source_id,
  38. base::TimeTicks netlog_source_start_time,
  39. mojo::PendingRemote<mojom::CertVerifierRequest>
  40. cert_verifier_request) override;
  41. void SetConfig(const net::CertVerifier::Config& config) override;
  42. void EnableNetworkAccess(
  43. mojo::PendingRemote<network::mojom::URLLoaderFactory>,
  44. mojo::PendingRemote<mojom::URLLoaderFactoryConnector> reconnector)
  45. override;
  46. // Set a pointer to the CertVerifierServiceFactory so that it may be notified
  47. // when we are deleted.
  48. void SetCertVerifierServiceFactory(
  49. base::WeakPtr<cert_verifier::CertVerifierServiceFactoryImpl>
  50. service_factory_impl);
  51. // Update the wrapped verifier with new ChromeRootStoreData.
  52. void UpdateChromeRootStoreData(
  53. const net::ChromeRootStoreData* root_store_data);
  54. private:
  55. ~CertVerifierServiceImpl() override;
  56. void OnDisconnectFromService();
  57. std::unique_ptr<net::CertVerifierWithUpdatableProc> verifier_;
  58. mojo::Receiver<mojom::CertVerifierService> receiver_;
  59. scoped_refptr<CertNetFetcherURLLoader> cert_net_fetcher_;
  60. base::WeakPtr<cert_verifier::CertVerifierServiceFactoryImpl>
  61. service_factory_impl_;
  62. };
  63. } // namespace internal
  64. } // namespace cert_verifier
  65. #endif // SERVICES_CERT_VERIFIER_CERT_VERIFIER_SERVICE_H_