Index: components/autofill/core/browser/autofill_manager.cc |
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc |
index a137044e6cee718c77b96572c36a7ba618f39f04..7b3c274be4d36f0b4d69e0e405417a0fe7955cd6 100644 |
--- a/components/autofill/core/browser/autofill_manager.cc |
+++ b/components/autofill/core/browser/autofill_manager.cc |
@@ -217,16 +217,24 @@ AutofillManager::AutofillManager( |
AutofillDownloadManagerState enable_download_manager) |
: driver_(driver), |
client_(client), |
- payments_client_( |
- new payments::PaymentsClient(driver->GetURLRequestContext(), this)), |
+ payments_client_(base::MakeUnique<payments::PaymentsClient>( |
+ driver->GetURLRequestContext(), |
+ this)), |
app_locale_(app_locale), |
personal_data_(client->GetPersonalDataManager()), |
autocomplete_history_manager_( |
- new AutocompleteHistoryManager(driver, client)), |
+ base::MakeUnique<AutocompleteHistoryManager>(driver, client)), |
+ form_interactions_ukm_logger_( |
+ base::MakeUnique<AutofillMetrics::FormInteractionsUkmLogger>( |
+ client->GetUkmService())), |
address_form_event_logger_( |
- new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)), |
+ base::MakeUnique<AutofillMetrics::FormEventLogger>( |
+ false /* is_for_credit_card */, |
+ form_interactions_ukm_logger_.get())), |
credit_card_form_event_logger_( |
- new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)), |
+ base::MakeUnique<AutofillMetrics::FormEventLogger>( |
+ true /* is_for_credit_card */, |
+ form_interactions_ukm_logger_.get())), |
has_logged_autofill_enabled_(false), |
has_logged_address_suggestions_count_(false), |
did_show_suggestions_(false), |
@@ -493,7 +501,7 @@ void AutofillManager::ProcessPendingFormForUpload() { |
if (!upload_form) |
return; |
- StartUploadProcess(std::move(upload_form), base::TimeTicks::Now(), false); |
+ StartUploadProcess(std::move(upload_form), TimeTicks::Now(), false); |
} |
void AutofillManager::OnTextFieldDidChange(const FormData& form, |
@@ -512,6 +520,9 @@ void AutofillManager::OnTextFieldDidChange(const FormData& form, |
UpdatePendingForm(form); |
+ if (!user_did_type_ || autofill_field->is_autofilled) |
+ form_interactions_ukm_logger_->LogTextFieldDidChange(*autofill_field); |
+ |
if (!user_did_type_) { |
user_did_type_ = true; |
AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE); |
@@ -1378,11 +1389,10 @@ void AutofillManager::UploadFormDataAsyncCallback( |
const TimeTicks& interaction_time, |
const TimeTicks& submission_time, |
bool observed_submission) { |
- submitted_form->LogQualityMetrics(load_time, interaction_time, |
- submission_time, |
- client_->GetRapporServiceImpl(), |
- did_show_suggestions_, observed_submission); |
- |
+ submitted_form->LogQualityMetrics( |
+ load_time, interaction_time, submission_time, |
+ client_->GetRapporServiceImpl(), form_interactions_ukm_logger_.get(), |
+ did_show_suggestions_, observed_submission); |
if (submitted_form->ShouldBeCrowdsourced()) |
UploadFormData(*submitted_form, observed_submission); |
} |
@@ -1416,10 +1426,12 @@ void AutofillManager::Reset() { |
ProcessPendingFormForUpload(); |
DCHECK(!pending_form_data_); |
form_structures_.clear(); |
- address_form_event_logger_.reset( |
- new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)); |
- credit_card_form_event_logger_.reset( |
- new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)); |
+ form_interactions_ukm_logger_.reset( |
+ new AutofillMetrics::FormInteractionsUkmLogger(client_->GetUkmService())); |
+ address_form_event_logger_.reset(new AutofillMetrics::FormEventLogger( |
+ false /* is_for_credit_card */, form_interactions_ukm_logger_.get())); |
+ credit_card_form_event_logger_.reset(new AutofillMetrics::FormEventLogger( |
+ true /* is_for_credit_card */, form_interactions_ukm_logger_.get())); |
#if defined(OS_ANDROID) || defined(OS_IOS) |
autofill_assistant_.Reset(); |
#endif |
@@ -1443,16 +1455,24 @@ AutofillManager::AutofillManager(AutofillDriver* driver, |
PersonalDataManager* personal_data) |
: driver_(driver), |
client_(client), |
- payments_client_( |
- new payments::PaymentsClient(driver->GetURLRequestContext(), this)), |
+ payments_client_(base::MakeUnique<payments::PaymentsClient>( |
+ driver->GetURLRequestContext(), |
+ this)), |
app_locale_("en-US"), |
personal_data_(personal_data), |
autocomplete_history_manager_( |
- new AutocompleteHistoryManager(driver, client)), |
+ base::MakeUnique<AutocompleteHistoryManager>(driver, client)), |
+ form_interactions_ukm_logger_( |
+ base::MakeUnique<AutofillMetrics::FormInteractionsUkmLogger>( |
+ client->GetUkmService())), |
address_form_event_logger_( |
- new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)), |
+ base::MakeUnique<AutofillMetrics::FormEventLogger>( |
+ false /* is_for_credit_card */, |
+ form_interactions_ukm_logger_.get())), |
credit_card_form_event_logger_( |
- new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)), |
+ base::MakeUnique<AutofillMetrics::FormEventLogger>( |
+ true /* is_for_credit_card */, |
+ form_interactions_ukm_logger_.get())), |
has_logged_autofill_enabled_(false), |
has_logged_address_suggestions_count_(false), |
did_show_suggestions_(false), |
@@ -1483,34 +1503,34 @@ bool AutofillManager::RefreshDataModels() { |
// Updating the FormEventLoggers for addresses and credit cards. |
{ |
- bool is_server_data_available = false; |
- bool is_local_data_available = false; |
+ size_t server_record_type_count = 0; |
+ size_t local_record_type_count = 0; |
for (CreditCard* credit_card : credit_cards) { |
if (credit_card->record_type() == CreditCard::LOCAL_CARD) |
- is_local_data_available = true; |
+ local_record_type_count++; |
else |
- is_server_data_available = true; |
+ server_record_type_count++; |
} |
- credit_card_form_event_logger_->set_is_server_data_available( |
- is_server_data_available); |
- credit_card_form_event_logger_->set_is_local_data_available( |
- is_local_data_available); |
+ credit_card_form_event_logger_->set_server_record_type_count( |
+ server_record_type_count); |
+ credit_card_form_event_logger_->set_local_record_type_count( |
+ local_record_type_count); |
credit_card_form_event_logger_->set_is_context_secure( |
client_->IsContextSecure()); |
} |
{ |
- bool is_server_data_available = false; |
- bool is_local_data_available = false; |
+ size_t server_record_type_count = 0; |
+ size_t local_record_type_count = 0; |
for (AutofillProfile* profile : profiles) { |
if (profile->record_type() == AutofillProfile::LOCAL_PROFILE) |
- is_local_data_available = true; |
+ local_record_type_count++; |
else if (profile->record_type() == AutofillProfile::SERVER_PROFILE) |
- is_server_data_available = true; |
+ server_record_type_count++; |
} |
- address_form_event_logger_->set_is_server_data_available( |
- is_server_data_available); |
- address_form_event_logger_->set_is_local_data_available( |
- is_local_data_available); |
+ address_form_event_logger_->set_server_record_type_count( |
+ server_record_type_count); |
+ address_form_event_logger_->set_local_record_type_count( |
+ local_record_type_count); |
} |
if (profiles.empty() && credit_cards.empty()) |
@@ -1679,7 +1699,8 @@ void AutofillManager::FillOrPreviewDataModelForm( |
std::unique_ptr<FormStructure> AutofillManager::ValidateSubmittedForm( |
const FormData& form) { |
- std::unique_ptr<FormStructure> submitted_form(new FormStructure(form)); |
+ std::unique_ptr<FormStructure> submitted_form( |
+ base::MakeUnique<FormStructure>(form)); |
if (!ShouldUploadForm(*submitted_form)) |
return std::unique_ptr<FormStructure>(); |
@@ -1855,7 +1876,7 @@ void AutofillManager::ParseForms(const std::vector<FormData>& forms) { |
std::vector<FormStructure*> non_queryable_forms; |
std::vector<FormStructure*> queryable_forms; |
for (const FormData& form : forms) { |
- const auto parse_form_start_time = base::TimeTicks::Now(); |
+ const auto parse_form_start_time = TimeTicks::Now(); |
FormStructure* form_structure = nullptr; |
if (!ParseForm(form, &form_structure)) |
@@ -1869,7 +1890,7 @@ void AutofillManager::ParseForms(const std::vector<FormData>& forms) { |
else |
non_queryable_forms.push_back(form_structure); |
- AutofillMetrics::LogParseFormTiming(base::TimeTicks::Now() - |
+ AutofillMetrics::LogParseFormTiming(TimeTicks::Now() - |
parse_form_start_time); |
} |
@@ -1880,6 +1901,9 @@ void AutofillManager::ParseForms(const std::vector<FormData>& forms) { |
if (!queryable_forms.empty() || !non_queryable_forms.empty()) { |
AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED); |
+ // Setup the url for metrics that we will collect for this form. |
+ form_interactions_ukm_logger_->OnFormsLoaded(forms[0].origin); |
+ |
#if defined(OS_IOS) |
// Log this from same location as AutofillMetrics::FORMS_LOADED to ensure |
// that KeyboardAccessoryButtonsIOS and UserHappiness UMA metrics will be |