| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_SCANNING_LORGNETTE_SCANNER_MANAGER_H_ |
| #define CHROME_BROWSER_ASH_SCANNING_LORGNETTE_SCANNER_MANAGER_H_ |
| |
| #include <cstdint> |
| #include <memory> |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| #include "base/functional/callback.h" |
| #include "chromeos/ash/components/dbus/lorgnette/lorgnette_service.pb.h" |
| #include "chromeos/ash/components/dbus/lorgnette_manager/lorgnette_manager_client.h" |
| #include "components/keyed_service/core/keyed_service.h" |
| |
| class Profile; |
| |
| namespace ash { |
| |
| class ZeroconfScannerDetector; |
| |
| // Top-level manager of available scanners in Chrome OS. All functions in this |
| // class must be called from a sequenced context. |
| class LorgnetteScannerManager : public KeyedService { |
| public: |
| using GetScannerNamesCallback = |
| base::OnceCallback<void(std::vector<std::string> scanner_names)>; |
| using GetScannerInfoListCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::ListScannersResponse>& response)>; |
| using GetScannerCapabilitiesCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::ScannerCapabilities>& capabilities)>; |
| using OpenScannerCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::OpenScannerResponse>& response)>; |
| using CloseScannerCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::CloseScannerResponse>& response)>; |
| using SetOptionsCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::SetOptionsResponse>& response)>; |
| using GetCurrentConfigCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::GetCurrentConfigResponse>& response)>; |
| using StartPreparedScanCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::StartPreparedScanResponse>& response)>; |
| using ReadScanDataCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::ReadScanDataResponse>& response)>; |
| using ProgressCallback = |
| base::RepeatingCallback<void(uint32_t progress_percent, |
| uint32_t page_number)>; |
| using PageCallback = base::RepeatingCallback<void(std::string scan_data, |
| uint32_t page_number)>; |
| using CompletionCallback = |
| base::OnceCallback<void(lorgnette::ScanFailureMode failure_mode)>; |
| using CancelCallback = base::OnceCallback<void(bool success)>; |
| using CancelScanCallback = base::OnceCallback<void( |
| const std::optional<lorgnette::CancelScanResponse>& response)>; |
| |
| enum class LocalScannerFilter { |
| kLocalScannersOnly = 0, |
| kIncludeNetworkScanners |
| }; |
| |
| enum class SecureScannerFilter { |
| kSecureScannersOnly = 0, |
| kIncludeUnsecureScanners |
| }; |
| |
| ~LorgnetteScannerManager() override = default; |
| |
| static std::unique_ptr<LorgnetteScannerManager> Create( |
| std::unique_ptr<ZeroconfScannerDetector> zeroconf_scanner_detector, |
| Profile* profile); |
| |
| // Returns the names of all available, deduplicated scanners. |
| virtual void GetScannerNames(GetScannerNamesCallback callback) = 0; |
| |
| // Returns ScannerInfo objects for all of the available lorgnette scanners and |
| // zeroconf scanners, filtered by |local_only| and |secure_only|. |
| virtual void GetScannerInfoList(const std::string& client_id, |
| LocalScannerFilter local_only, |
| SecureScannerFilter secure_only, |
| GetScannerInfoListCallback callback) = 0; |
| |
| // Returns the capabilities of the scanner specified by |scanner_name|. If |
| // |scanner_name| does not correspond to a known scanner, std::nullopt is |
| // returned in the callback. |
| virtual void GetScannerCapabilities( |
| const std::string& scanner_name, |
| GetScannerCapabilitiesCallback callback) = 0; |
| |
| // Opens the scanner described by |request|. If an error occurs, |
| // std::nullopt is returned in the callback. |
| virtual void OpenScanner(const lorgnette::OpenScannerRequest& request, |
| OpenScannerCallback callback) = 0; |
| |
| // Closes the scanner described by |request|. If an error occurs, |
| // std::nullopt is returned in the callback. |
| virtual void CloseScanner(const lorgnette::CloseScannerRequest& request, |
| CloseScannerCallback callback) = 0; |
| |
| // Sets the options described by |request|. If an error occurs, std::nullopt |
| // is returned in the callback. |
| virtual void SetOptions(const lorgnette::SetOptionsRequest& request, |
| SetOptionsCallback callback) = 0; |
| |
| // Gets the config for the scanner described by |request|. If an error |
| // occurs, std::nullopt is returned in the callback. |
| virtual void GetCurrentConfig( |
| const lorgnette::GetCurrentConfigRequest& request, |
| GetCurrentConfigCallback callback) = 0; |
| |
| // Starts a scan using information in |request| and returns the result using |
| // the provided |callback|. If an error occurs, std::nullopt is returned in |
| // the callback. |
| virtual void StartPreparedScan( |
| const lorgnette::StartPreparedScanRequest& request, |
| StartPreparedScanCallback callback) = 0; |
| |
| // Reads the scan data described by |request|. If an error occurs, |
| // std::nullopt is returned in the callback. |
| virtual void ReadScanData(const lorgnette::ReadScanDataRequest& request, |
| ReadScanDataCallback callback) = 0; |
| |
| // Returns whether or not an ADF scanner that flips alternate pages was |
| // selected based on |scanner_name| and |source_name|. |
| virtual bool IsRotateAlternate(const std::string& scanner_name, |
| const std::string& source_name) = 0; |
| |
| // Performs a scan with the scanner specified by |scanner_name| using the |
| // given |scan_properties|. As each page is scanned, |progress_callback| is |
| // called with the current progress percent from 0 to 100. As each scanned |
| // page is completed, |page_callback| is called with the image data for that |
| // page. If |scanner_name| does not correspond to a known scanner, false is |
| // returned in |completion_callback|. After the scan has completed, |
| // |completion_callback| will be called with argument success=true. |
| virtual void Scan(const std::string& scanner_name, |
| const lorgnette::ScanSettings& settings, |
| ProgressCallback progress_callback, |
| PageCallback page_callback, |
| CompletionCallback completion_callback) = 0; |
| |
| // Request to cancel the currently running scan job. This function makes the |
| // assumption that LorgnetteManagerClient only has one scan running at a time. |
| virtual void CancelScan(CancelCallback cancel_callback) = 0; |
| |
| // Request to cancel the scan specified by the JobHandle in |request| and |
| // return the result using the provided |callback|. If an error occurs, |
| // std::nullopt is returned in the callback. |
| virtual void CancelScan(const lorgnette::CancelScanRequest& request, |
| CancelScanCallback callback) = 0; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_SCANNING_LORGNETTE_SCANNER_MANAGER_H_ |