#ifndef ASH_WEBUI_SCANNING_SCANNING_HANDLER_H_
#define ASH_WEBUI_SCANNING_SCANNING_HANDLER_H_
#include <map>
#include <memory>
#include <string>
#include "base/files/file_path.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/values.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "ui/shell_dialogs/select_file_dialog.h"
namespace base {
class SequencedTaskRunner;
}
namespace content {
class WebUI;
}
namespace ash {
class ScanningAppDelegate;
class ScanningHandler : public content::WebUIMessageHandler,
public ui::SelectFileDialog::Listener {
public:
explicit ScanningHandler(
std::unique_ptr<ScanningAppDelegate> scanning_app_delegate);
~ScanningHandler() override;
ScanningHandler(const ScanningHandler&) = delete;
ScanningHandler& operator=(const ScanningHandler&) = delete;
void RegisterMessages() override;
void FileSelected(const ui::SelectedFileInfo& file, int index) override;
void FileSelectionCanceled() override;
base::Value::Dict CreateSelectedPathValue(const base::FilePath& path);
void AddStringToPluralMap(const std::string& name, int id);
void SetWebUIForTest(content::WebUI* web_ui);
private:
void HandleInitialize(const base::Value::List& args);
void HandleRequestScanToLocation(const base::Value::List& args);
void HandleOpenFilesInMediaApp(const base::Value::List& args);
void HandleShowFileInLocation(const base::Value::List& args);
void OnShowFileInLocation(const std::string& callback, bool files_app_opened);
void HandleGetPluralString(const base::Value::List& args);
void HandleGetMyFilesPath(const base::Value::List& args);
void HandleSaveScanSettings(const base::Value::List& args);
void HandleGetScanSettings(const base::Value::List& args);
void HandleEnsureValidFilePath(const base::Value::List& args);
void OnPathExists(const base::FilePath& file_path,
const std::string& callback,
bool file_path_exists);
std::string scan_location_callback_id_;
scoped_refptr<ui::SelectFileDialog> select_file_dialog_;
std::unique_ptr<ScanningAppDelegate> scanning_app_delegate_;
std::map<std::string, int> string_id_map_;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
base::WeakPtrFactory<ScanningHandler> weak_ptr_factory_{this};
};
}
#endif