blob: 72b4380d688b439af37eeaf04c9bb53de6986988 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_DOWNLOAD_MODEL_AUTO_DELETION_SCHEDULER_H_
#define IOS_CHROME_BROWSER_DOWNLOAD_MODEL_AUTO_DELETION_SCHEDULER_H_
#include <vector>
#import "base/memory/raw_ptr.h"
namespace auto_deletion {
class ScheduledFile;
} // namespace auto_deletion
namespace base {
class Time;
} // namespace base
class PrefService;
namespace auto_deletion {
// A class that is responsible for managing which downloaded files are enrolled
// for auto-deletion and when they should be deleted. This class is not
// responsible for the actual deletion of the files.
class Scheduler {
public:
Scheduler(PrefService* local_state);
~Scheduler();
// The Scheduler is non-copyable and non-movable.
Scheduler(const Scheduler&) = delete;
Scheduler& operator=(const Scheduler&) = delete;
Scheduler(Scheduler&&) = delete;
Scheduler& operator=(Scheduler&&) = delete;
// Returns a list of files whose scheduled deletion dates have elapsed.
[[nodiscard]] std::vector<ScheduledFile> IdentifyExpiredFiles(
base::Time instant);
// Removes the ScheduledFiles whose deletion dates have elased.
void RemoveExpiredFiles(base::Time instant);
// Schedules the file for deletion.
void ScheduleFile(ScheduledFile file);
// Removes all the ScheduledFiles regardless of deletion date.
void Clear();
private:
// Returns whether the file is older than one month.
bool IsFileReadyForDeletion(base::Time instant, const ScheduledFile& file);
// The PrefService where the list of ScheduledFiles awaiting automatic
// deletion is stored.
raw_ptr<PrefService> local_state_;
};
} // namespace auto_deletion
#endif // IOS_CHROME_BROWSER_DOWNLOAD_MODEL_AUTO_DELETION_SCHEDULER_H_