Chromium Code Reviews| 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..c87867e92ee474e1b0ddeb62b16d06cf7a1ecd13 100644 |
| --- a/components/browsing_data_ui/history_notice_utils.cc |
| +++ b/components/browsing_data_ui/history_notice_utils.cc |
| @@ -4,9 +4,51 @@ |
| #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 +56,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 +76,50 @@ void ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
| } |
| void ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
| - const ProfileSyncService* sync_service, |
| + const sync_driver::SyncService* sync_service, |
| + history::WebHistoryService* history_service, |
| + version_info::Channel channel, |
| + bool is_tablet, |
| + 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, is_tablet, |
| + base::Bind( |
| + &MergeBooleanCallbacks::RunCallback, base::Unretained(merger))); |
| +} |
| + |
| +// TODO(msarda): 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())) { |
| + false /* !history_service->HasOtherFormsOfBrowsingHistory() */)) { |
|
sdefresne
2016/05/24 08:32:29
Can you remove this /* comment */?
msramek
2016/05/24 12:03:00
Done.
I originally left it there just to demonstr
|
| callback.Run(false); |
| return; |
| } |