| // Copyright 2022 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_FILE_SUGGEST_DRIVE_FILE_SUGGESTION_PROVIDER_H_ |
| #define CHROME_BROWSER_ASH_FILE_SUGGEST_DRIVE_FILE_SUGGESTION_PROVIDER_H_ |
| |
| #include "base/task/sequenced_task_runner.h" |
| #include "chrome/browser/ash/file_suggest/file_suggestion_provider.h" |
| #include "chrome/browser/ash/file_suggest/item_suggest_cache.h" |
| #include "chromeos/ash/components/drivefs/mojom/drivefs.mojom.h" |
| |
| namespace drive { |
| class DriveIntegrationService; |
| } // namespace drive |
| |
| namespace ash { |
| enum class DriveSuggestValidationStatus; |
| class FileSuggestKeyedService; |
| |
| // A suggestion provider that handles the drive file suggestions. |
| class DriveFileSuggestionProvider : public FileSuggestionProvider { |
| public: |
| DriveFileSuggestionProvider( |
| Profile* profile, |
| base::RepeatingCallback<void(FileSuggestionType)> notify_update_callback); |
| DriveFileSuggestionProvider(const DriveFileSuggestionProvider&) = delete; |
| DriveFileSuggestionProvider& operator=(const DriveFileSuggestionProvider&) = |
| delete; |
| ~DriveFileSuggestionProvider() override; |
| |
| // FileSuggestionProvider: |
| void GetSuggestFileData(GetSuggestFileDataCallback callback) override; |
| void MaybeUpdateItemSuggestCache( |
| base::PassKey<FileSuggestKeyedService>) override; |
| |
| ItemSuggestCache* item_suggest_cache_for_test() { |
| return item_suggest_cache_.get(); |
| } |
| |
| private: |
| // Called when locating drive files through the drive service is completed. |
| // Returns the location result through `paths`. `raw_suggest_results` is the |
| // file suggestion data before validation. |
| void OnDriveFilePathsLocated( |
| std::vector<ItemSuggestCache::Result> raw_suggest_results, |
| std::optional<std::vector<drivefs::mojom::FilePathOrErrorPtr>> paths); |
| |
| // Ends the validation on drive suggestion file paths and publishes the |
| // result. |
| void EndDriveFilePathValidation( |
| DriveSuggestValidationStatus validation_status, |
| const std::optional<std::vector<FileSuggestData>>& suggest_results); |
| |
| const raw_ptr<Profile> profile_; |
| |
| const raw_ptr<drive::DriveIntegrationService> drive_service_; |
| |
| // The drive client from which the raw suggest data (i.e. the data before |
| // validation) is fetched. |
| std::unique_ptr<ItemSuggestCache> item_suggest_cache_; |
| |
| // Guards the callback registered on `item_suggest_cache_`. |
| base::CallbackListSubscription item_suggest_subscription_; |
| |
| // The callbacks that run when the drive suggest results are ready. |
| // Use a callback list to handle the edge case that multiple data consumers |
| // wait for the drive suggest results. |
| base::OnceCallbackList<GetSuggestFileDataCallback::RunType> |
| on_drive_results_ready_callback_list_; |
| |
| // A drive file needs to have been modified more recently than this to be |
| // considered valid. |
| const base::TimeDelta drive_file_max_last_modified_time_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| |
| // Used to post the task to filter drive suggestion results. |
| scoped_refptr<base::SequencedTaskRunner> result_filter_task_runner_; |
| |
| // Used to guard the calling to get drive suggestion results. |
| base::WeakPtrFactory<DriveFileSuggestionProvider> weak_factory_{this}; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_FILE_SUGGEST_DRIVE_FILE_SUGGESTION_PROVIDER_H_ |