Index: components/browsing_data_ui/history_notice_utils.cc |
diff --git a/components/browsing_data_ui/history_notice_utils.cc b/components/browsing_data_ui/history_notice_utils.cc |
index c1568f2a188375f9629ffe3c3ea73e110fea8a62..6a54c26d407457b4c1ab2892112874101d7149a3 100644 |
--- a/components/browsing_data_ui/history_notice_utils.cc |
+++ b/components/browsing_data_ui/history_notice_utils.cc |
@@ -4,9 +4,50 @@ |
#include "components/browsing_data_ui/history_notice_utils.h" |
+#include "base/bind.h" |
#include "base/callback.h" |
-#include "components/browser_sync/browser/profile_sync_service.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/strings/stringprintf.h" |
#include "components/history/core/browser/web_history_service.h" |
+#include "components/sync_driver/sync_service.h" |
+#include "components/version_info/version_info.h" |
+ |
+namespace { |
+ |
+// Merges several asynchronous boolean callbacks into one that returns a boolean |
+// product of their responses. Deletes itself when done. |
+class MergeBooleanCallbacks { |
+ public: |
+ // Constructor. Upon receiving |expected_call_count| calls to |RunCallback|, |
+ // |target_callback| will be run with the boolean product of their results. |
+ MergeBooleanCallbacks( |
+ int expected_call_count, |
+ const base::Callback<void(bool)>& target_callback) |
+ : expected_call_count_(expected_call_count), |
+ target_callback_(target_callback), |
+ final_response_(true), |
+ call_count_(0) {} |
+ |
+ // This method is to be bound to all asynchronous callbacks which we want |
+ // to merge. |
+ void RunCallback(bool response) { |
+ final_response_ &= response; |
+ |
+ if (++call_count_ < expected_call_count_) |
+ return; |
+ |
+ target_callback_.Run(final_response_); |
+ base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
+ } |
+ |
+ private: |
+ int expected_call_count_; |
+ base::Callback<void(bool)> target_callback_; |
+ bool final_response_; |
+ int call_count_; |
+}; |
+ |
+} // namespace |
namespace browsing_data_ui { |
@@ -14,14 +55,16 @@ namespace testing { |
bool g_override_other_forms_of_browsing_history_query = false; |
-} |
+} // namespace testing |
void ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
- const ProfileSyncService* sync_service, |
+ const sync_driver::SyncService* sync_service, |
history::WebHistoryService* history_service, |
base::Callback<void(bool)> callback) { |
if (!sync_service || |
!sync_service->IsSyncActive() || |
+ !sync_service->GetActiveDataTypes().Has( |
+ syncer::HISTORY_DELETE_DIRECTIVES) || |
sync_service->IsUsingSecondaryPassphrase() || |
!history_service) { |
callback.Run(false); |
@@ -32,12 +75,48 @@ void ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
} |
void ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
- const ProfileSyncService* sync_service, |
+ const sync_driver::SyncService* sync_service, |
+ history::WebHistoryService* history_service, |
+ version_info::Channel channel, |
+ base::Callback<void(bool)> callback) { |
+ // If the query for other forms of browsing history is overriden for testing, |
+ // the conditions are identical with |
+ // ShouldShowNoticeAboutOtherFormsOfBrowsingHistory. |
+ if (testing::g_override_other_forms_of_browsing_history_query) { |
+ ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
+ sync_service, history_service, callback); |
+ return; |
+ } |
+ |
+ if (!sync_service || |
+ !sync_service->IsSyncActive() || |
+ !sync_service->GetActiveDataTypes().Has( |
+ syncer::HISTORY_DELETE_DIRECTIVES) || |
+ sync_service->IsUsingSecondaryPassphrase() || |
+ !history_service) { |
+ callback.Run(false); |
+ return; |
+ } |
+ |
+ // Return the boolean product of QueryWebAndAppActivity and |
+ // QueryOtherFormsOfBrowsingHistory. MergeBooleanCallbacks deletes itself |
+ // after processing both callbacks. |
+ MergeBooleanCallbacks* merger = new MergeBooleanCallbacks(2, callback); |
+ history_service->QueryWebAndAppActivity(base::Bind( |
+ &MergeBooleanCallbacks::RunCallback, base::Unretained(merger))); |
+ history_service->QueryOtherFormsOfBrowsingHistory( |
+ channel, |
+ base::Bind( |
+ &MergeBooleanCallbacks::RunCallback, base::Unretained(merger))); |
+} |
+ |
+// TODO(crbug.com/614319): This function is deprecated and should be removed. |
+void ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
+ const sync_driver::SyncService* sync_service, |
history::WebHistoryService* history_service, |
base::Callback<void(bool)> callback) { |
if (!history_service || |
- (!testing::g_override_other_forms_of_browsing_history_query && |
- !history_service->HasOtherFormsOfBrowsingHistory())) { |
+ !testing::g_override_other_forms_of_browsing_history_query) { |
callback.Run(false); |
return; |
} |