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 b3da547c0127cbce1c742528a22b03c8b3d96a01..b0431637b9685c9830576a1bdfd5893af144e33e 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 |
@@ -21,11 +21,18 @@ |
#include "chrome/browser/browsing_data/passwords_counter.h" |
#include "chrome/browser/history/web_history_service_factory.h" |
#include "chrome/browser/sync/profile_sync_service_factory.h" |
+#include "chrome/common/channel_info.h" |
#include "chrome/common/pref_names.h" |
#include "components/browsing_data_ui/history_notice_utils.h" |
#include "components/prefs/pref_service.h" |
#include "content/public/browser/web_ui.h" |
+namespace { |
+ |
+const int kMaxTimesHistoryNoticeShown = 1; |
+ |
+} |
+ |
namespace settings { |
ClearBrowsingDataHandler::ClearBrowsingDataHandler(content::WebUI* webui) |
@@ -166,9 +173,33 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData( |
void ClearBrowsingDataHandler::OnBrowsingDataRemoverDone() { |
remover_->RemoveObserver(this); |
remover_ = nullptr; |
+ |
+ PrefService* prefs = profile_->GetPrefs(); |
+ int notice_shown_times = |
+ prefs->GetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes); |
+ |
+ // When the deletion is complete, we might show an additional dialog with |
+ // a notice about other forms of browsing history. This is the case if |
+ const bool show_notice = |
+ // 1. The dialog is relevant for the user. |
+ should_show_history_deletion_dialog_ && |
+ // 2. The selected data types contained browsing history. |
+ prefs->GetBoolean(prefs::kDeleteBrowsingHistory) && |
+ // 3. The notice has been shown less than |kMaxTimesHistoryNoticeShown|. |
+ notice_shown_times < kMaxTimesHistoryNoticeShown; |
dschuyler
2016/06/25 01:34:54
nit: not a big deal, but if #2 and #3 were swapped
msramek
2016/06/27 15:24:59
Done.
|
+ |
+ if (show_notice) { |
+ // Increment the preference. |
+ prefs->SetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes, |
+ notice_shown_times + 1); |
dschuyler
2016/06/25 01:34:54
trivia: it looks like there is a potential race
co
msramek
2016/06/27 15:24:59
Acknowledged. Thanks for pointing it out.
|
+ } |
+ |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "History.ClearBrowsingData.ShownHistoryNoticeAfterClearing", show_notice); |
+ |
ResolveJavascriptCallback( |
base::StringValue(webui_callback_id_), |
- *base::Value::CreateNullValue()); |
+ base::FundamentalValue(show_notice)); |
webui_callback_id_.clear(); |
} |
@@ -210,6 +241,21 @@ void ClearBrowsingDataHandler::RefreshHistoryNotice() { |
WebHistoryServiceFactory::GetForProfile(profile_), |
base::Bind(&ClearBrowsingDataHandler::UpdateHistoryNotice, |
weak_ptr_factory_.GetWeakPtr())); |
+ |
+ // If the dialog with history notice has been shown less than |
+ // |kMaxTimesHistoryNoticeShown| times, we might have to show it when the |
+ // user deletes history. Find out if the conditions are met. |
+ int notice_shown_times = profile_->GetPrefs()-> |
+ GetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes); |
+ |
+ if (notice_shown_times < kMaxTimesHistoryNoticeShown) { |
+ browsing_data_ui::ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
+ sync_service_, |
+ WebHistoryServiceFactory::GetForProfile(profile_), |
+ chrome::GetChannel(), |
+ base::Bind(&ClearBrowsingDataHandler::UpdateHistoryDeletionDialog, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ } |
} |
void ClearBrowsingDataHandler::UpdateHistoryNotice(bool show) { |
@@ -221,6 +267,11 @@ void ClearBrowsingDataHandler::UpdateHistoryNotice(bool show) { |
should_show_history_footer_); |
} |
+void ClearBrowsingDataHandler::UpdateHistoryDeletionDialog(bool show) { |
+ // This is used by OnBrowsingDataRemoverDone (when the deletion finishes). |
+ should_show_history_deletion_dialog_ = show; |
+} |
+ |
void ClearBrowsingDataHandler::AddCounter( |
std::unique_ptr<BrowsingDataCounter> counter) { |
counter->Init( |