data_decoder_service.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2016 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_DATA_DECODER_DATA_DECODER_SERVICE_H_
  5. #define SERVICES_DATA_DECODER_DATA_DECODER_SERVICE_H_
  6. #include "build/chromeos_buildflags.h"
  7. #include "components/web_package/mojom/web_bundle_parser.mojom.h"
  8. #include "mojo/public/cpp/bindings/pending_receiver.h"
  9. #include "mojo/public/cpp/bindings/receiver_set.h"
  10. #include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
  11. #include "services/data_decoder/public/mojom/gzipper.mojom.h"
  12. #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
  13. #include "services/data_decoder/public/mojom/json_parser.mojom.h"
  14. #include "services/data_decoder/public/mojom/web_bundler.mojom.h"
  15. #include "services/data_decoder/public/mojom/xml_parser.mojom.h"
  16. #if BUILDFLAG(IS_CHROMEOS_ASH)
  17. #include "services/data_decoder/public/mojom/ble_scan_parser.mojom.h"
  18. #endif
  19. namespace data_decoder {
  20. class DataDecoderService : public mojom::DataDecoderService {
  21. public:
  22. DataDecoderService();
  23. explicit DataDecoderService(
  24. mojo::PendingReceiver<mojom::DataDecoderService> receiver);
  25. DataDecoderService(const DataDecoderService&) = delete;
  26. DataDecoderService& operator=(const DataDecoderService&) = delete;
  27. ~DataDecoderService() override;
  28. // May be used to establish a latent DataDecoderService binding for this
  29. // instance. May only be called once, and only if this instance was default-
  30. // constructed.
  31. void BindReceiver(mojo::PendingReceiver<mojom::DataDecoderService> receiver);
  32. // Configures the service to drop ImageDecoder receivers instead of binding
  33. // them. Useful for tests simulating service failures.
  34. void SimulateImageDecoderCrashForTesting(bool drop) {
  35. drop_image_decoders_ = drop;
  36. }
  37. // Same as above but for JsonParser receivers.
  38. void SimulateJsonParserCrashForTesting(bool drop) {
  39. drop_json_parsers_ = drop;
  40. }
  41. // Configures the service to use |binder| to bind
  42. // WebBundleParserFactory in subsequent
  43. // BindWebBundleParserFactory() calls.
  44. void SetWebBundleParserFactoryBinderForTesting(
  45. base::RepeatingCallback<void(
  46. mojo::PendingReceiver<web_package::mojom::WebBundleParserFactory>)>
  47. binder) {
  48. web_bundle_parser_factory_binder_ = binder;
  49. }
  50. // Configures the service to use |binder| to bind WebBundler in subsequent
  51. // BindWebBundler() calls.
  52. void SetWebBundlerBinderForTesting(
  53. base::RepeatingCallback<void(mojo::PendingReceiver<mojom::WebBundler>)>
  54. binder) {
  55. web_bundler_binder_ = binder;
  56. }
  57. private:
  58. // mojom::DataDecoderService implementation:
  59. void BindImageDecoder(
  60. mojo::PendingReceiver<mojom::ImageDecoder> receiver) override;
  61. void BindJsonParser(
  62. mojo::PendingReceiver<mojom::JsonParser> receiver) override;
  63. void BindXmlParser(mojo::PendingReceiver<mojom::XmlParser> receiver) override;
  64. void BindWebBundleParserFactory(
  65. mojo::PendingReceiver<web_package::mojom::WebBundleParserFactory>
  66. receiver) override;
  67. void BindWebBundler(
  68. mojo::PendingReceiver<mojom::WebBundler> receiver) override;
  69. void BindGzipper(mojo::PendingReceiver<mojom::Gzipper> receiver) override;
  70. #if BUILDFLAG(IS_CHROMEOS_ASH)
  71. void BindBleScanParser(
  72. mojo::PendingReceiver<mojom::BleScanParser> receiver) override;
  73. #endif // BUILDFLAG(IS_CHROMEOS_ASH)
  74. // In-process instances (e.g. on iOS or in tests) may have multiple concurrent
  75. // remote DataDecoderService clients.
  76. mojo::ReceiverSet<mojom::DataDecoderService> receivers_;
  77. bool drop_image_decoders_ = false;
  78. bool drop_json_parsers_ = false;
  79. base::RepeatingCallback<void(
  80. mojo::PendingReceiver<web_package::mojom::WebBundleParserFactory>)>
  81. web_bundle_parser_factory_binder_;
  82. base::RepeatingCallback<void(mojo::PendingReceiver<mojom::WebBundler>)>
  83. web_bundler_binder_;
  84. };
  85. } // namespace data_decoder
  86. #endif // SERVICES_DATA_DECODER_DATA_DECODER_SERVICE_H_