blob: bd43afdb481f591d6fdd0eeccbe5a5c9ad6b7d59 [file] [log] [blame]
// 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.
#include "ios/chrome/browser/signin/model/authentication_service_delegate_impl.h"
#include "base/check.h"
#include "base/check_deref.h"
#include "base/feature_list.h"
#include "base/functional/callback.h"
#include "base/time/time.h"
#include "components/browsing_data/core/browsing_data_utils.h"
#include "components/prefs/pref_service.h"
#include "ios/chrome/browser/browsing_data/model/browsing_data_remove_mask.h"
#include "ios/chrome/browser/browsing_data/model/browsing_data_remover.h"
#include "ios/chrome/browser/shared/model/prefs/pref_names.h"
#include "ios/chrome/browser/shared/model/profile/features.h"
AuthenticationServiceDelegateImpl::AuthenticationServiceDelegateImpl(
BrowsingDataRemover* data_remover,
PrefService* pref_service)
: data_remover_(CHECK_DEREF(data_remover)),
pref_service_(CHECK_DEREF(pref_service)) {}
void AuthenticationServiceDelegateImpl::ClearBrowsingData(
base::OnceClosure closure) {
data_remover_->Remove(browsing_data::TimePeriod::ALL_TIME,
BrowsingDataRemoveMask::REMOVE_ALL, std::move(closure));
}
void AuthenticationServiceDelegateImpl::ClearBrowsingDataForSignedinPeriod(
base::OnceClosure closure) {
BrowsingDataRemoveMask remove_mask =
BrowsingDataRemoveMask::REMOVE_ALL_FOR_TIME_PERIOD;
// Also close any tabs that were used since the signin. This requires
// separately querying the tab-usage timestamps first.
remove_mask |= BrowsingDataRemoveMask::CLOSE_TABS;
BrowsingDataRemover::RemovalParams params;
params.keep_active_tab =
BrowsingDataRemover::KeepActiveTabPolicy::kKeepActiveTab;
// If `kLastSigninTimestamp` has the default base::Time() value, data will be
// cleared for all time, which is intended to happen in this case.
const base::Time last_signin =
pref_service_->GetTime(prefs::kLastSigninTimestamp);
data_remover_->RemoveInRange(last_signin, base::Time::Now(), remove_mask,
std::move(closure), params);
}