1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
// 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/memory/raw_ptr.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"
class ApplicationLocaleStorage;
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:
// `application_locale_storage` must be non-null and must outlive `this`.
DriveFileSuggestionProvider(
const ApplicationLocaleStorage* application_locale_storage,
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_
|