#ifndef ASH_WEBUI_CAMERA_APP_UI_CAMERA_APP_UI_DELEGATE_H_
#define ASH_WEBUI_CAMERA_APP_UI_CAMERA_APP_UI_DELEGATE_H_
#include <cstdint>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "ash/webui/camera_app_ui/ocr.mojom-forward.h"
#include "ash/webui/camera_app_ui/pdf_builder.mojom-forward.h"
#include "base/containers/span.h"
#include "base/files/file_path.h"
#include "base/functional/callback.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
namespace content {
class BrowserContext;
class WebContents;
class WebUIDataSource;
}
namespace media_device_salt {
class MediaDeviceSaltService;
}
namespace ash {
class ProgressivePdf {
public:
virtual ~ProgressivePdf() = default;
virtual void NewPage(const std::vector<uint8_t>& jpg,
uint32_t page_index) = 0;
virtual void DeletePage(uint32_t page_index) = 0;
virtual void Save(base::OnceCallback<void(const std::vector<uint8_t>&)>) = 0;
};
class CameraAppUIDelegate {
public:
enum class FileMonitorResult {
kDeleted = 0,
kCanceled = 1,
kError = 2,
};
enum class StorageMonitorStatus {
kNormal = 0,
kLow = 1,
kCriticallyLow = 2,
kCanceled = 3,
kError = 4,
};
struct WifiConfig {
WifiConfig();
WifiConfig(const WifiConfig&);
WifiConfig& operator=(const WifiConfig&);
~WifiConfig();
std::string ssid;
std::string security;
std::optional<std::string> password;
std::optional<std::string> eap_method;
std::optional<std::string> eap_phase2_method;
std::optional<std::string> eap_identity;
std::optional<std::string> eap_anonymous_identity;
};
virtual ~CameraAppUIDelegate() = default;
virtual void PopulateLoadTimeData(content::WebUIDataSource* source) = 0;
virtual bool IsMetricsAndCrashReportingEnabled() = 0;
virtual void OpenFileInGallery(const std::string& name) = 0;
virtual void OpenFeedbackDialog(const std::string& placeholder) = 0;
virtual std::string GetFilePathInArcByName(const std::string& name) = 0;
virtual void OpenDevToolsWindow(content::WebContents* web_contents) = 0;
virtual void MonitorFileDeletion(
const std::string& name,
base::OnceCallback<void(FileMonitorResult)> callback) = 0;
virtual void MaybeTriggerSurvey() = 0;
virtual void StartStorageMonitor(
base::RepeatingCallback<void(StorageMonitorStatus)> monitor_callback) = 0;
virtual void StopStorageMonitor() = 0;
virtual void OpenStorageManagement() = 0;
virtual base::FilePath GetFilePathByName(const std::string& name) = 0;
virtual media_device_salt::MediaDeviceSaltService* GetMediaDeviceSaltService(
content::BrowserContext* context) = 0;
virtual void OpenWifiDialog(WifiConfig wifi_config) = 0;
virtual std::string GetSystemLanguage() = 0;
virtual void RenderPdfAsJpeg(
const std::vector<uint8_t>& pdf,
base::OnceCallback<void(const std::vector<uint8_t>&)> callback) = 0;
virtual void PerformOcr(
base::span<const uint8_t> jpeg_data,
base::OnceCallback<void(camera_app::mojom::OcrResultPtr)> callback) = 0;
virtual void CreatePdfBuilder(
mojo::PendingReceiver<camera_app::mojom::PdfBuilder>) = 0;
};
}
#endif