| 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..d5a1d44829f37f9184f0d76e77bfe1b6a03e216d 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,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;
|
| }
|
|
|