| // Copyright 2024 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_UI_ASH_PICKER_PICKER_FILE_SUGGESTER_H_ |
| #define CHROME_BROWSER_UI_ASH_PICKER_PICKER_FILE_SUGGESTER_H_ |
| |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| #include "base/files/file_path.h" |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/weak_ptr.h" |
| #include "chrome/browser/ash/fileapi/recent_file.h" |
| #include "url/gurl.h" |
| |
| class Profile; |
| |
| class PickerFileSuggester { |
| public: |
| struct LocalFile { |
| std::u16string title; |
| base::FilePath path; |
| }; |
| |
| struct DriveFile { |
| DriveFile(std::optional<std::string> id, |
| std::u16string title, |
| base::FilePath local_path, |
| GURL url); |
| ~DriveFile(); |
| DriveFile(const DriveFile&); |
| DriveFile(DriveFile&&); |
| DriveFile& operator=(const DriveFile&); |
| DriveFile& operator=(DriveFile&&); |
| |
| std::optional<std::string> id; |
| std::u16string title; |
| base::FilePath local_path; |
| GURL url; |
| }; |
| |
| using RecentLocalImagesCallback = |
| base::OnceCallback<void(std::vector<LocalFile>)>; |
| using RecentDriveFilesCallback = |
| base::OnceCallback<void(std::vector<DriveFile>)>; |
| |
| explicit PickerFileSuggester(Profile* profile); |
| ~PickerFileSuggester(); |
| PickerFileSuggester(const PickerFileSuggester&) = delete; |
| PickerFileSuggester& operator=(const PickerFileSuggester&) = delete; |
| |
| // Any in-flight requests are cancelled when this object is destroyed. |
| void GetRecentLocalImages(size_t max_files, |
| RecentLocalImagesCallback callback); |
| void GetRecentDriveFiles(size_t max_files, RecentDriveFilesCallback callback); |
| |
| private: |
| void OnGetRecentLocalImages(RecentLocalImagesCallback callback, |
| const std::vector<ash::RecentFile>& recent_files); |
| void OnGetRecentDriveFiles(RecentDriveFilesCallback callback, |
| const std::vector<ash::RecentFile>& recent_files); |
| |
| raw_ptr<Profile> profile_; |
| base::WeakPtrFactory<PickerFileSuggester> weak_factory_{this}; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_ASH_PICKER_PICKER_FILE_SUGGESTER_H_ |