Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1615)

Unified Diff: chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc

Issue 2315443002: Make ClearBrowsingDataHandler only observe its own removal task (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
index 0835756a187d7dd8b42219c8698248eaef4e14db..06df7c80f127fa263c3d70abe096d5b2ce5a74cd 100644
--- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
+++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -42,12 +42,44 @@ const char* kCounterPrefs[] = {
namespace settings {
+// TaskObserver ----------------------------------------------------------------
+
+class ClearBrowsingDataHandler::TaskObserver
+ : public BrowsingDataRemover::Observer {
+ public:
+ TaskObserver(BrowsingDataRemover* remover, const base::Closure& callback);
+ ~TaskObserver() override;
+
+ void OnBrowsingDataRemoverDone() override;
+
+ private:
+ base::Closure callback_;
+ ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer>
+ remover_observer_;
+
+ DISALLOW_COPY_AND_ASSIGN(TaskObserver);
+};
+
+ClearBrowsingDataHandler::TaskObserver::TaskObserver(
+ BrowsingDataRemover* remover, const base::Closure& callback)
+ : callback_(callback),
+ remover_observer_(this) {
+ remover_observer_.Add(remover);
+}
+
+ClearBrowsingDataHandler::TaskObserver::~TaskObserver() {}
+
+void ClearBrowsingDataHandler::TaskObserver::OnBrowsingDataRemoverDone() {
+ remover_observer_.RemoveAll();
+ callback_.Run();
+}
+
+// ClearBrowsingDataHandler ----------------------------------------------------
+
ClearBrowsingDataHandler::ClearBrowsingDataHandler(content::WebUI* webui)
: profile_(Profile::FromWebUI(webui)),
sync_service_(ProfileSyncServiceFactory::GetForProfile(profile_)),
sync_service_observer_(this),
- remover_(nullptr),
- remover_observer_(this),
show_history_footer_(false),
show_history_deletion_dialog_(false),
weak_ptr_factory_(this) {}
@@ -77,26 +109,17 @@ void ClearBrowsingDataHandler::OnJavascriptAllowed() {
if (sync_service_)
sync_service_observer_.Add(sync_service_);
-
- if (!remover_)
- remover_ = BrowsingDataRemoverFactory::GetForBrowserContext(profile_);
-
- remover_observer_.Add(remover_);
}
void ClearBrowsingDataHandler::OnJavascriptDisallowed() {
- remover_observer_.RemoveAll();
profile_pref_registrar_.RemoveAll();
sync_service_observer_.RemoveAll();
+ task_observer_.reset();
}
void ClearBrowsingDataHandler::HandleClearBrowsingData(
const base::ListValue* args) {
- // We should never be called when the previous clearing has not yet finished.
- CHECK(!remover_->is_removing());
- CHECK_EQ(1U, args->GetSize());
- CHECK(webui_callback_id_.empty());
- CHECK(args->GetString(0, &webui_callback_id_));
+ DCHECK(!task_observer_);
PrefService* prefs = profile_->GetPrefs();
@@ -173,19 +196,25 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData(
int period_selected =
prefs->GetInteger(browsing_data::prefs::kDeleteTimePeriod);
- remover_->Remove(BrowsingDataRemover::Period(
- static_cast<browsing_data::TimePeriod>(period_selected)),
- remove_mask, origin_mask);
-}
-
-void ClearBrowsingDataHandler::OnBrowsingDataRemoving(bool is_removing) {
- CallJavascriptFunction("cr.webUIListenerCallback",
- base::StringValue("browsing-data-removing"),
- base::FundamentalValue(is_removing));
- if (is_removing || webui_callback_id_.empty())
- return;
+ std::string webui_callback_id;
+ CHECK_EQ(1U, args->GetSize());
+ CHECK(args->GetString(0, &webui_callback_id));
+
+ BrowsingDataRemover* remover =
+ BrowsingDataRemoverFactory::GetForBrowserContext(profile_);
+ task_observer_ = base::MakeUnique<TaskObserver>(
+ remover,
+ base::Bind(&ClearBrowsingDataHandler::OnClearingTaskFinished,
+ base::Unretained(this), webui_callback_id));
+ remover->RemoveAndReply(
+ BrowsingDataRemover::Period(
+ static_cast<browsing_data::TimePeriod>(period_selected)),
+ remove_mask, origin_mask, task_observer_.get());
+}
+void ClearBrowsingDataHandler::OnClearingTaskFinished(
+ const std::string& webui_callback_id) {
PrefService* prefs = profile_->GetPrefs();
int notice_shown_times =
prefs->GetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes);
@@ -210,9 +239,9 @@ void ClearBrowsingDataHandler::OnBrowsingDataRemoving(bool is_removing) {
"History.ClearBrowsingData.ShownHistoryNoticeAfterClearing", show_notice);
ResolveJavascriptCallback(
- base::StringValue(webui_callback_id_),
+ base::StringValue(webui_callback_id),
base::FundamentalValue(show_notice));
- webui_callback_id_.clear();
+ task_observer_.reset();
}
void ClearBrowsingDataHandler::OnBrowsingHistoryPrefChanged() {
@@ -229,6 +258,7 @@ void ClearBrowsingDataHandler::HandleInitialize(const base::ListValue* args) {
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
+ task_observer_.reset();
counters_.clear();
for (const std::string& pref : kCounterPrefs) {
@@ -239,8 +269,9 @@ void ClearBrowsingDataHandler::HandleInitialize(const base::ListValue* args) {
OnStateChanged();
RefreshHistoryNotice();
- ResolveJavascriptCallback(*callback_id,
- base::FundamentalValue(remover_->is_removing()));
+ ResolveJavascriptCallback(
+ *callback_id,
+ *base::Value::CreateNullValue() /* Promise<void> */);
}
void ClearBrowsingDataHandler::OnStateChanged() {
@@ -284,7 +315,7 @@ void ClearBrowsingDataHandler::UpdateHistoryNotice(bool show) {
}
void ClearBrowsingDataHandler::UpdateHistoryDeletionDialog(bool show) {
- // This is used by OnBrowsingDataRemoving (when the deletion finishes).
+ // This is used by OnClearingTaskFinished (when the deletion finishes).
show_history_deletion_dialog_ = show;
}
« no previous file with comments | « chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698