data_decoder_service.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. #include "services/data_decoder/data_decoder_service.h"
  5. #include <memory>
  6. #include "base/bind.h"
  7. #include "base/threading/thread_task_runner_handle.h"
  8. #include "base/time/time.h"
  9. #include "build/build_config.h"
  10. #include "build/chromeos_buildflags.h"
  11. #include "components/web_package/web_bundle_parser_factory.h"
  12. #include "mojo/public/cpp/bindings/generic_pending_receiver.h"
  13. #include "mojo/public/cpp/bindings/self_owned_receiver.h"
  14. #include "services/data_decoder/gzipper.h"
  15. #include "services/data_decoder/json_parser_impl.h"
  16. #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
  17. #include "services/data_decoder/web_bundler.h"
  18. #include "services/data_decoder/xml_parser.h"
  19. #if BUILDFLAG(IS_CHROMEOS_ASH)
  20. #include "services/data_decoder/ble_scan_parser_impl.h"
  21. #endif // BUILDFLAG(IS_CHROMEOS_ASH)
  22. #if !BUILDFLAG(IS_IOS)
  23. #include "services/data_decoder/image_decoder_impl.h"
  24. #endif
  25. namespace data_decoder {
  26. DataDecoderService::DataDecoderService() = default;
  27. DataDecoderService::DataDecoderService(
  28. mojo::PendingReceiver<mojom::DataDecoderService> receiver) {
  29. receivers_.Add(this, std::move(receiver));
  30. }
  31. DataDecoderService::~DataDecoderService() = default;
  32. void DataDecoderService::BindReceiver(
  33. mojo::PendingReceiver<mojom::DataDecoderService> receiver) {
  34. receivers_.Add(this, std::move(receiver));
  35. }
  36. void DataDecoderService::BindImageDecoder(
  37. mojo::PendingReceiver<mojom::ImageDecoder> receiver) {
  38. #if BUILDFLAG(IS_IOS)
  39. LOG(FATAL) << "ImageDecoder not supported on iOS.";
  40. #else
  41. if (drop_image_decoders_)
  42. return;
  43. mojo::MakeSelfOwnedReceiver(std::make_unique<ImageDecoderImpl>(),
  44. std::move(receiver));
  45. #endif
  46. }
  47. void DataDecoderService::BindJsonParser(
  48. mojo::PendingReceiver<mojom::JsonParser> receiver) {
  49. if (drop_json_parsers_)
  50. return;
  51. mojo::MakeSelfOwnedReceiver(std::make_unique<JsonParserImpl>(),
  52. std::move(receiver));
  53. }
  54. void DataDecoderService::BindXmlParser(
  55. mojo::PendingReceiver<mojom::XmlParser> receiver) {
  56. mojo::MakeSelfOwnedReceiver(std::make_unique<XmlParser>(),
  57. std::move(receiver));
  58. }
  59. void DataDecoderService::BindWebBundleParserFactory(
  60. mojo::PendingReceiver<web_package::mojom::WebBundleParserFactory>
  61. receiver) {
  62. if (web_bundle_parser_factory_binder_) {
  63. web_bundle_parser_factory_binder_.Run(std::move(receiver));
  64. } else {
  65. mojo::MakeSelfOwnedReceiver(
  66. std::make_unique<web_package::WebBundleParserFactory>(),
  67. std::move(receiver));
  68. }
  69. }
  70. void DataDecoderService::BindWebBundler(
  71. mojo::PendingReceiver<mojom::WebBundler> receiver) {
  72. if (web_bundler_binder_) {
  73. web_bundler_binder_.Run(std::move(receiver));
  74. } else {
  75. mojo::MakeSelfOwnedReceiver(std::make_unique<WebBundler>(),
  76. std::move(receiver));
  77. }
  78. }
  79. void DataDecoderService::BindGzipper(
  80. mojo::PendingReceiver<mojom::Gzipper> receiver) {
  81. mojo::MakeSelfOwnedReceiver(std::make_unique<Gzipper>(), std::move(receiver));
  82. }
  83. #if BUILDFLAG(IS_CHROMEOS_ASH)
  84. void DataDecoderService::BindBleScanParser(
  85. mojo::PendingReceiver<mojom::BleScanParser> receiver) {
  86. mojo::MakeSelfOwnedReceiver(std::make_unique<BleScanParserImpl>(),
  87. std::move(receiver));
  88. }
  89. #endif // BUILDFLAG(IS_CHROMEOS_ASH)
  90. } // namespace data_decoder