| // Copyright 2021 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_CHROME_SCANNING_APP_DELEGATE_H_ |
| #define CHROME_BROWSER_ASH_SCANNING_CHROME_SCANNING_APP_DELEGATE_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include "ash/webui/scanning/scanning_app_delegate.h" |
| #include "base/files/file_path.h" |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "chrome/browser/ash/scanning/scanning_file_path_helper.h" |
| |
| class PrefService; |
| |
| namespace base { |
| class SequencedTaskRunner; |
| } // namespace base |
| |
| namespace content { |
| class WebUI; |
| } // namespace content |
| |
| namespace ui { |
| class SelectFilePolicy; |
| } // namespace ui |
| |
| namespace user_prefs { |
| class PrefRegistrySyncable; |
| } // namespace user_prefs |
| |
| namespace ash { |
| |
| class ChromeScanningAppDelegate : public ScanningAppDelegate { |
| public: |
| explicit ChromeScanningAppDelegate(content::WebUI* web_ui); |
| ~ChromeScanningAppDelegate() override; |
| |
| ChromeScanningAppDelegate(const ChromeScanningAppDelegate&) = delete; |
| ChromeScanningAppDelegate& operator=(const ChromeScanningAppDelegate&) = |
| delete; |
| |
| // ScanningAppDelegate: |
| std::unique_ptr<ui::SelectFilePolicy> CreateChromeSelectFilePolicy() override; |
| std::string GetBaseNameFromPath(const base::FilePath& path) override; |
| base::FilePath GetMyFilesPath() override; |
| std::string GetScanSettingsFromPrefs() override; |
| bool IsFilePathSupported(const base::FilePath& path_to_file) override; |
| void OpenFilesInMediaApp( |
| const std::vector<base::FilePath>& file_paths) override; |
| void SaveScanSettingsToPrefs(const std::string& scan_settings) override; |
| void ShowFileInFilesApp(const base::FilePath& path_to_file, |
| base::OnceCallback<void(bool)> callback) override; |
| BindScanServiceCallback GetBindScanServiceCallback( |
| content::WebUI* web_ui) override; |
| |
| // Register scan settings prefs. |
| static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
| |
| // Initializes ScanningFilePathHelper with |google_drive_path_| and |
| // |my_files_path_|. |
| void SetValidPaths(const base::FilePath& google_drive_path, |
| const base::FilePath& my_files_path); |
| |
| void SetRemoveableMediaPathForTesting(const base::FilePath& path); |
| |
| private: |
| // Returns the PrefService for the active Profile. |
| PrefService* GetPrefs() const; |
| |
| // Callback for ShowFileInFilesApp(). |
| void OnPathExists(const base::FilePath& path_to_file, |
| base::OnceCallback<void(bool)>, |
| bool file_path_exists); |
| |
| raw_ptr<content::WebUI, DanglingUntriaged> web_ui_; // Owns |this|. |
| |
| // Helper class for for file path manipulation and verification. |
| ScanningFilePathHelper file_path_helper_; |
| |
| // Task runner for the I/O function base::PathExists(). |
| scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| |
| base::WeakPtrFactory<ChromeScanningAppDelegate> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_SCANNING_CHROME_SCANNING_APP_DELEGATE_H_ |