123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "services/shape_detection/barcode_detection_provider_mac.h"
- #include <memory>
- #include <utility>
- #include "base/logging.h"
- #include "mojo/public/cpp/bindings/pending_receiver.h"
- #include "mojo/public/cpp/bindings/self_owned_receiver.h"
- #include "services/shape_detection/barcode_detection_impl_mac.h"
- #include "services/shape_detection/barcode_detection_impl_mac_vision.h"
- namespace shape_detection {
- BarcodeDetectionProviderMac::BarcodeDetectionProviderMac() = default;
- BarcodeDetectionProviderMac::BarcodeDetectionProviderMac(
- std::unique_ptr<VisionAPIInterface> vision_api)
- : vision_api_(std::move(vision_api)) {}
- BarcodeDetectionProviderMac::~BarcodeDetectionProviderMac() = default;
- // static
- void BarcodeDetectionProviderMac::Create(
- mojo::PendingReceiver<mojom::BarcodeDetectionProvider> receiver) {
- mojo::MakeSelfOwnedReceiver(std::make_unique<BarcodeDetectionProviderMac>(),
- std::move(receiver));
- }
- void BarcodeDetectionProviderMac::CreateBarcodeDetection(
- mojo::PendingReceiver<mojom::BarcodeDetection> receiver,
- mojom::BarcodeDetectorOptionsPtr options) {
- if (!vision_api_)
- vision_api_ = VisionAPIInterface::Create();
- if (!BarcodeDetectionImplMacVision::IsBlockedMacOSVersion()) {
- auto impl =
- std::make_unique<BarcodeDetectionImplMacVision>(std::move(options));
- auto* impl_ptr = impl.get();
- impl_ptr->SetReceiver(
- mojo::MakeSelfOwnedReceiver(std::move(impl), std::move(receiver)));
- return;
- }
- mojo::MakeSelfOwnedReceiver(std::make_unique<BarcodeDetectionImplMac>(),
- std::move(receiver));
- }
- void BarcodeDetectionProviderMac::EnumerateSupportedFormats(
- EnumerateSupportedFormatsCallback callback) {
- // If we have supported formats already cached, return them.
- if (supported_formats_) {
- DLOG_IF(WARNING, supported_formats_->empty())
- << "Supported formats requested previously but error or none "
- << "recognized.";
- std::move(callback).Run(supported_formats_.value());
- return;
- }
- if (!vision_api_)
- vision_api_ = VisionAPIInterface::Create();
- if (!BarcodeDetectionImplMacVision::IsBlockedMacOSVersion()) {
- supported_formats_ = BarcodeDetectionImplMacVision::GetSupportedSymbologies(
- vision_api_.get());
- std::move(callback).Run(supported_formats_.value());
- return;
- }
- supported_formats_ = std::vector<mojom::BarcodeFormat>(
- BarcodeDetectionImplMac::GetSupportedSymbologies());
- std::move(callback).Run(supported_formats_.value());
- }
- } // namespace shape_detection
|