#ifndef CHROME_BROWSER_BROWSING_DATA_CHROME_BROWSING_DATA_LIFETIME_MANAGER_H_
#define CHROME_BROWSER_BROWSING_DATA_CHROME_BROWSING_DATA_LIFETIME_MANAGER_H_
#include <stdint.h>
#include <optional>
#include <utility>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/sync/base/user_selectable_type.h"
#include "content/public/browser/browsing_data_remover.h"
namespace content {
class BrowserContext;
}
class Profile;
namespace browsing_data {
namespace policy_fields {
extern const char kTimeToLiveInHours[];
extern const char kDataTypes[];
}
}
class ChromeBrowsingDataLifetimeManager : public KeyedService {
public:
struct ScheduledRemovalSettings {
uint64_t remove_mask;
uint64_t origin_type_mask;
int time_to_live_in_hours;
};
explicit ChromeBrowsingDataLifetimeManager(
content::BrowserContext* browser_context);
ChromeBrowsingDataLifetimeManager(const ChromeBrowsingDataLifetimeManager&) =
delete;
ChromeBrowsingDataLifetimeManager& operator=(
const ChromeBrowsingDataLifetimeManager&) = delete;
~ChromeBrowsingDataLifetimeManager() override;
void Shutdown() override;
void SetEndTimeForTesting(std::optional<base::Time> end_time_for_testing) {
end_time_for_testing_ = std::move(end_time_for_testing);
}
void SetBrowsingDataRemoverObserverForTesting(
content::BrowsingDataRemover::Observer* observer) {
testing_data_remover_observer_ = observer;
}
void ClearBrowsingDataForOnExitPolicy(bool keep_browser_alive);
private:
void UpdateScheduledRemovalSettings();
void StartScheduledBrowsingDataRemoval();
std::vector<ScheduledRemovalSettings> scheduled_removals_settings_;
PrefChangeRegistrar pref_change_registrar_;
raw_ptr<Profile> profile_;
raw_ptr<content::BrowsingDataRemover::Observer, DanglingUntriaged>
testing_data_remover_observer_ = nullptr;
std::optional<base::Time> end_time_for_testing_;
base::WeakPtrFactory<ChromeBrowsingDataLifetimeManager> weak_ptr_factory_{
this};
bool IsConditionSatisfiedForBrowsingDataRemoval(
const syncer::UserSelectableTypeSet sync_types);
};
#endif