Index: chrome/browser/android/browsing_data/browsing_data_bridge.cc |
diff --git a/chrome/browser/android/browsing_data/browsing_data_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_bridge.cc |
index c690af16b478fed98df20e2a2f395322de6561cf..dabd5b4b222db0e76b326c0f660082427c06d19c 100644 |
--- a/chrome/browser/android/browsing_data/browsing_data_bridge.cc |
+++ b/chrome/browser/android/browsing_data/browsing_data_bridge.cc |
@@ -19,6 +19,7 @@ |
#include "base/metrics/histogram_macros.h" |
#include "base/scoped_observer.h" |
#include "base/values.h" |
+#include "chrome/browser/browsing_data/browsing_data_important_sites_util.h" |
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" |
#include "chrome/browser/engagement/important_sites_util.h" |
#include "chrome/browser/history/web_history_service_factory.h" |
@@ -48,44 +49,15 @@ Profile* GetOriginalProfile() { |
return ProfileManager::GetActiveUserProfile()->GetOriginalProfile(); |
} |
-// Merges |task_count| BrowsingDataRemover completion callbacks and redirects |
-// them back into Java. |
-class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer { |
- public: |
- // |obj| is expected to be the object passed into ClearBrowsingData(); e.g. a |
- // ChromePreference. |
- ClearBrowsingDataObserver(JNIEnv* env, |
- jobject obj, |
- BrowsingDataRemover* browsing_data_remover, |
- int task_count) |
- : task_count_(task_count), |
- weak_chrome_native_preferences_(env, obj), |
- observer_(this) { |
- DCHECK_GT(task_count, 0); |
- observer_.Add(browsing_data_remover); |
- } |
- |
- void OnBrowsingDataRemoverDone() override { |
- DCHECK(task_count_); |
- if (--task_count_) |
- return; |
- |
- // We delete ourselves when done. |
- std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this); |
- |
- JNIEnv* env = AttachCurrentThread(); |
- if (weak_chrome_native_preferences_.get(env).is_null()) |
- return; |
- |
- Java_BrowsingDataBridge_browsingDataCleared( |
- env, weak_chrome_native_preferences_.get(env)); |
- } |
+void OnBrowsingDataRemoverDone( |
+ JavaObjectWeakGlobalRef weak_chrome_native_preferences) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ if (weak_chrome_native_preferences.get(env).is_null()) |
+ return; |
- private: |
- int task_count_; |
- JavaObjectWeakGlobalRef weak_chrome_native_preferences_; |
- ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; |
-}; |
+ Java_BrowsingDataBridge_browsingDataCleared( |
+ env, weak_chrome_native_preferences.get(env)); |
+} |
} // namespace |
@@ -164,44 +136,15 @@ static void ClearBrowsingData( |
ignoring_domains, ignoring_domain_reasons); |
} |
- // Delete the types protected by Important Sites with a filter, |
- // and the rest completely. |
- int filterable_mask = |
- remove_mask & |
- ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; |
- int nonfilterable_mask = |
- remove_mask & |
- ~ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; |
- |
- // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
- // done with both removal tasks. |
- ClearBrowsingDataObserver* observer = new ClearBrowsingDataObserver( |
- env, obj, browsing_data_remover, 2 /* tasks_count */); |
+ base::OnceClosure callback = base::BindOnce( |
+ &OnBrowsingDataRemoverDone, JavaObjectWeakGlobalRef(env, obj)); |
browsing_data::TimePeriod period = |
static_cast<browsing_data::TimePeriod>(time_period); |
- browsing_data::RecordDeletionForPeriod(period); |
- if (filterable_mask) { |
- browsing_data_remover->RemoveWithFilterAndReply( |
- browsing_data::CalculateBeginDeleteTime(period), |
- browsing_data::CalculateEndDeleteTime(period), filterable_mask, |
- BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, |
- std::move(filter_builder), observer); |
- } else { |
- // Make sure |observer| doesn't wait for the filtered task. |
- observer->OnBrowsingDataRemoverDone(); |
- } |
- |
- if (nonfilterable_mask) { |
- browsing_data_remover->RemoveAndReply( |
- browsing_data::CalculateBeginDeleteTime(period), |
- browsing_data::CalculateEndDeleteTime(period), nonfilterable_mask, |
- BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, observer); |
- } else { |
- // Make sure |observer| doesn't wait for the non-filtered task. |
- observer->OnBrowsingDataRemoverDone(); |
- } |
+ browsing_data_important_sites_util::Remove( |
+ remove_mask, BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, period, |
+ std::move(filter_builder), browsing_data_remover, std::move(callback)); |
} |
static void ShowNoticeAboutOtherFormsOfBrowsingHistory( |