Chromium Code Reviews| Index: components/browsing_data/core/counters/autofill_counter.cc |
| diff --git a/components/browsing_data/core/counters/autofill_counter.cc b/components/browsing_data/core/counters/autofill_counter.cc |
| index 6e40f26cb13137dbfd8b8f5ec6eb17cbc57f6269..be5b5d4d5de296b625dd8ce79749a6bf8b06ed29 100644 |
| --- a/components/browsing_data/core/counters/autofill_counter.cc |
| +++ b/components/browsing_data/core/counters/autofill_counter.cc |
| @@ -8,29 +8,49 @@ |
| #include <utility> |
| #include <vector> |
| +#include "base/memory/ptr_util.h" |
| #include "components/autofill/core/browser/autofill_profile.h" |
| #include "components/autofill/core/browser/credit_card.h" |
| #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
| #include "components/browsing_data/core/pref_names.h" |
| +#include "components/sync/driver/sync_service.h" |
| + |
| +namespace { |
| + |
| +bool IsAutofillSyncEnabled(const syncer::SyncService* sync_service) { |
| + return sync_service && sync_service->IsFirstSetupComplete() && |
| + sync_service->IsSyncActive() && |
| + sync_service->GetActiveDataTypes().Has(syncer::AUTOFILL); |
| +} |
| + |
| +} // namespace |
| namespace browsing_data { |
| AutofillCounter::AutofillCounter( |
| - scoped_refptr<autofill::AutofillWebDataService> web_data_service) |
| + scoped_refptr<autofill::AutofillWebDataService> web_data_service, |
| + syncer::SyncService* sync_service) |
| : web_data_service_(web_data_service), |
| + sync_service_(sync_service), |
| suggestions_query_(0), |
| credit_cards_query_(0), |
| addresses_query_(0), |
| num_suggestions_(0), |
| num_credit_cards_(0), |
| - num_addresses_(0) {} |
| + num_addresses_(0), |
| + autofill_sync_enabled_() {} |
| AutofillCounter::~AutofillCounter() { |
| CancelAllRequests(); |
| + if (sync_service_) |
| + sync_service_->RemoveObserver(this); |
| } |
| void AutofillCounter::OnInitialized() { |
| DCHECK(web_data_service_); |
| + if (sync_service_) |
| + sync_service_->AddObserver(this); |
| + autofill_sync_enabled_ = IsAutofillSyncEnabled(sync_service_); |
| } |
| const char* AutofillCounter::GetPrefName() const { |
| @@ -150,8 +170,9 @@ void AutofillCounter::OnWebDataServiceRequestDone( |
| if (suggestions_query_ || credit_cards_query_ || addresses_query_) |
| return; |
| - std::unique_ptr<Result> reported_result(new AutofillResult( |
| - this, num_suggestions_, num_credit_cards_, num_addresses_)); |
| + auto reported_result = base::MakeUnique<AutofillResult>( |
| + this, num_suggestions_, num_credit_cards_, num_addresses_, |
| + autofill_sync_enabled_); |
| ReportResult(std::move(reported_result)); |
| } |
| @@ -164,15 +185,25 @@ void AutofillCounter::CancelAllRequests() { |
| web_data_service_->CancelRequest(addresses_query_); |
| } |
| +void AutofillCounter::OnStateChanged(syncer::SyncService* sync) { |
|
msramek
2017/04/28 19:13:13
Ditto here. We may be able to start moving things
|
| + bool sync_enabled_new = IsAutofillSyncEnabled(sync); |
| + if (autofill_sync_enabled_ != sync_enabled_new) { |
| + autofill_sync_enabled_ = sync_enabled_new; |
| + Restart(); |
| + } |
| +} |
| + |
| // AutofillCounter::AutofillResult --------------------------------------------- |
| AutofillCounter::AutofillResult::AutofillResult(const AutofillCounter* source, |
| ResultInt num_suggestions, |
| ResultInt num_credit_cards, |
| - ResultInt num_addresses) |
| + ResultInt num_addresses, |
| + bool autofill_sync_enabled_) |
| : FinishedResult(source, num_suggestions), |
| num_credit_cards_(num_credit_cards), |
| - num_addresses_(num_addresses) {} |
| + num_addresses_(num_addresses), |
| + autofill_sync_enabled_(autofill_sync_enabled_) {} |
| AutofillCounter::AutofillResult::~AutofillResult() {} |