| // 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); |
| } |