OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/autofill/core/browser/autofill_manager.h" | 5 #include "components/autofill/core/browser/autofill_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 | 210 |
211 } // namespace | 211 } // namespace |
212 | 212 |
213 AutofillManager::AutofillManager( | 213 AutofillManager::AutofillManager( |
214 AutofillDriver* driver, | 214 AutofillDriver* driver, |
215 AutofillClient* client, | 215 AutofillClient* client, |
216 const std::string& app_locale, | 216 const std::string& app_locale, |
217 AutofillDownloadManagerState enable_download_manager) | 217 AutofillDownloadManagerState enable_download_manager) |
218 : driver_(driver), | 218 : driver_(driver), |
219 client_(client), | 219 client_(client), |
220 payments_client_( | 220 payments_client_(base::MakeUnique<payments::PaymentsClient>( |
221 new payments::PaymentsClient(driver->GetURLRequestContext(), this)), | 221 driver->GetURLRequestContext(), |
| 222 this)), |
222 app_locale_(app_locale), | 223 app_locale_(app_locale), |
223 personal_data_(client->GetPersonalDataManager()), | 224 personal_data_(client->GetPersonalDataManager()), |
224 autocomplete_history_manager_( | 225 autocomplete_history_manager_( |
225 new AutocompleteHistoryManager(driver, client)), | 226 base::MakeUnique<AutocompleteHistoryManager>(driver, client)), |
| 227 form_interactions_ukm_logger_( |
| 228 base::MakeUnique<AutofillMetrics::FormInteractionsUkmLogger>( |
| 229 client->GetUkmService())), |
226 address_form_event_logger_( | 230 address_form_event_logger_( |
227 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)), | 231 base::MakeUnique<AutofillMetrics::FormEventLogger>( |
| 232 false /* is_for_credit_card */, |
| 233 form_interactions_ukm_logger_.get())), |
228 credit_card_form_event_logger_( | 234 credit_card_form_event_logger_( |
229 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)), | 235 base::MakeUnique<AutofillMetrics::FormEventLogger>( |
| 236 true /* is_for_credit_card */, |
| 237 form_interactions_ukm_logger_.get())), |
230 has_logged_autofill_enabled_(false), | 238 has_logged_autofill_enabled_(false), |
231 has_logged_address_suggestions_count_(false), | 239 has_logged_address_suggestions_count_(false), |
232 did_show_suggestions_(false), | 240 did_show_suggestions_(false), |
233 user_did_type_(false), | 241 user_did_type_(false), |
234 user_did_autofill_(false), | 242 user_did_autofill_(false), |
235 user_did_edit_autofilled_field_(false), | 243 user_did_edit_autofilled_field_(false), |
236 user_did_accept_upload_prompt_(false), | 244 user_did_accept_upload_prompt_(false), |
237 external_delegate_(NULL), | 245 external_delegate_(NULL), |
238 test_delegate_(NULL), | 246 test_delegate_(NULL), |
239 #if defined(OS_ANDROID) || defined(OS_IOS) | 247 #if defined(OS_ANDROID) || defined(OS_IOS) |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 return; | 494 return; |
487 | 495 |
488 // We get the FormStructure corresponding to |pending_form_data_|, used in the | 496 // We get the FormStructure corresponding to |pending_form_data_|, used in the |
489 // upload process. |pending_form_data_| is reset. | 497 // upload process. |pending_form_data_| is reset. |
490 std::unique_ptr<FormStructure> upload_form = | 498 std::unique_ptr<FormStructure> upload_form = |
491 ValidateSubmittedForm(*pending_form_data_); | 499 ValidateSubmittedForm(*pending_form_data_); |
492 pending_form_data_.reset(); | 500 pending_form_data_.reset(); |
493 if (!upload_form) | 501 if (!upload_form) |
494 return; | 502 return; |
495 | 503 |
496 StartUploadProcess(std::move(upload_form), base::TimeTicks::Now(), false); | 504 StartUploadProcess(std::move(upload_form), TimeTicks::Now(), false); |
497 } | 505 } |
498 | 506 |
499 void AutofillManager::OnTextFieldDidChange(const FormData& form, | 507 void AutofillManager::OnTextFieldDidChange(const FormData& form, |
500 const FormFieldData& field, | 508 const FormFieldData& field, |
501 const TimeTicks& timestamp) { | 509 const TimeTicks& timestamp) { |
502 if (!IsValidFormData(form) || !IsValidFormFieldData(field)) | 510 if (!IsValidFormData(form) || !IsValidFormFieldData(field)) |
503 return; | 511 return; |
504 | 512 |
505 if (test_delegate_) | 513 if (test_delegate_) |
506 test_delegate_->OnTextFieldChanged(); | 514 test_delegate_->OnTextFieldChanged(); |
507 | 515 |
508 FormStructure* form_structure = NULL; | 516 FormStructure* form_structure = NULL; |
509 AutofillField* autofill_field = NULL; | 517 AutofillField* autofill_field = NULL; |
510 if (!GetCachedFormAndField(form, field, &form_structure, &autofill_field)) | 518 if (!GetCachedFormAndField(form, field, &form_structure, &autofill_field)) |
511 return; | 519 return; |
512 | 520 |
513 UpdatePendingForm(form); | 521 UpdatePendingForm(form); |
514 | 522 |
| 523 if (!user_did_type_ || autofill_field->is_autofilled) |
| 524 form_interactions_ukm_logger_->LogTextFieldDidChange(*autofill_field); |
| 525 |
515 if (!user_did_type_) { | 526 if (!user_did_type_) { |
516 user_did_type_ = true; | 527 user_did_type_ = true; |
517 AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE); | 528 AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE); |
518 } | 529 } |
519 | 530 |
520 if (autofill_field->is_autofilled) { | 531 if (autofill_field->is_autofilled) { |
521 autofill_field->is_autofilled = false; | 532 autofill_field->is_autofilled = false; |
522 autofill_field->set_previously_autofilled(true); | 533 autofill_field->set_previously_autofilled(true); |
523 AutofillMetrics::LogUserHappinessMetric( | 534 AutofillMetrics::LogUserHappinessMetric( |
524 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD); | 535 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD); |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 // Note that |submitted_form| is passed as a pointer rather than as a reference | 1382 // Note that |submitted_form| is passed as a pointer rather than as a reference |
1372 // so that we can get memory management right across threads. Note also that we | 1383 // so that we can get memory management right across threads. Note also that we |
1373 // explicitly pass in all the time stamps of interest, as the cached ones might | 1384 // explicitly pass in all the time stamps of interest, as the cached ones might |
1374 // get reset before this method executes. | 1385 // get reset before this method executes. |
1375 void AutofillManager::UploadFormDataAsyncCallback( | 1386 void AutofillManager::UploadFormDataAsyncCallback( |
1376 const FormStructure* submitted_form, | 1387 const FormStructure* submitted_form, |
1377 const TimeTicks& load_time, | 1388 const TimeTicks& load_time, |
1378 const TimeTicks& interaction_time, | 1389 const TimeTicks& interaction_time, |
1379 const TimeTicks& submission_time, | 1390 const TimeTicks& submission_time, |
1380 bool observed_submission) { | 1391 bool observed_submission) { |
1381 submitted_form->LogQualityMetrics(load_time, interaction_time, | 1392 submitted_form->LogQualityMetrics( |
1382 submission_time, | 1393 load_time, interaction_time, submission_time, |
1383 client_->GetRapporServiceImpl(), | 1394 client_->GetRapporServiceImpl(), form_interactions_ukm_logger_.get(), |
1384 did_show_suggestions_, observed_submission); | 1395 did_show_suggestions_, observed_submission); |
1385 | |
1386 if (submitted_form->ShouldBeCrowdsourced()) | 1396 if (submitted_form->ShouldBeCrowdsourced()) |
1387 UploadFormData(*submitted_form, observed_submission); | 1397 UploadFormData(*submitted_form, observed_submission); |
1388 } | 1398 } |
1389 | 1399 |
1390 void AutofillManager::UploadFormData(const FormStructure& submitted_form, | 1400 void AutofillManager::UploadFormData(const FormStructure& submitted_form, |
1391 bool observed_submission) { | 1401 bool observed_submission) { |
1392 if (!download_manager_) | 1402 if (!download_manager_) |
1393 return; | 1403 return; |
1394 | 1404 |
1395 // Check if the form is among the forms that were recently auto-filled. | 1405 // Check if the form is among the forms that were recently auto-filled. |
(...skipping 13 matching lines...) Expand all Loading... |
1409 submitted_form, was_autofilled, non_empty_types, | 1419 submitted_form, was_autofilled, non_empty_types, |
1410 std::string() /* login_form_signature */, observed_submission); | 1420 std::string() /* login_form_signature */, observed_submission); |
1411 } | 1421 } |
1412 | 1422 |
1413 void AutofillManager::Reset() { | 1423 void AutofillManager::Reset() { |
1414 // Note that upload_request_ is not reset here because the prompt to | 1424 // Note that upload_request_ is not reset here because the prompt to |
1415 // save a card is shown after page navigation. | 1425 // save a card is shown after page navigation. |
1416 ProcessPendingFormForUpload(); | 1426 ProcessPendingFormForUpload(); |
1417 DCHECK(!pending_form_data_); | 1427 DCHECK(!pending_form_data_); |
1418 form_structures_.clear(); | 1428 form_structures_.clear(); |
1419 address_form_event_logger_.reset( | 1429 form_interactions_ukm_logger_.reset( |
1420 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)); | 1430 new AutofillMetrics::FormInteractionsUkmLogger(client_->GetUkmService())); |
1421 credit_card_form_event_logger_.reset( | 1431 address_form_event_logger_.reset(new AutofillMetrics::FormEventLogger( |
1422 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)); | 1432 false /* is_for_credit_card */, form_interactions_ukm_logger_.get())); |
| 1433 credit_card_form_event_logger_.reset(new AutofillMetrics::FormEventLogger( |
| 1434 true /* is_for_credit_card */, form_interactions_ukm_logger_.get())); |
1423 #if defined(OS_ANDROID) || defined(OS_IOS) | 1435 #if defined(OS_ANDROID) || defined(OS_IOS) |
1424 autofill_assistant_.Reset(); | 1436 autofill_assistant_.Reset(); |
1425 #endif | 1437 #endif |
1426 has_logged_autofill_enabled_ = false; | 1438 has_logged_autofill_enabled_ = false; |
1427 has_logged_address_suggestions_count_ = false; | 1439 has_logged_address_suggestions_count_ = false; |
1428 did_show_suggestions_ = false; | 1440 did_show_suggestions_ = false; |
1429 user_did_type_ = false; | 1441 user_did_type_ = false; |
1430 user_did_autofill_ = false; | 1442 user_did_autofill_ = false; |
1431 user_did_edit_autofilled_field_ = false; | 1443 user_did_edit_autofilled_field_ = false; |
1432 masked_card_ = CreditCard(); | 1444 masked_card_ = CreditCard(); |
1433 unmasking_query_id_ = -1; | 1445 unmasking_query_id_ = -1; |
1434 unmasking_form_ = FormData(); | 1446 unmasking_form_ = FormData(); |
1435 unmasking_field_ = FormFieldData(); | 1447 unmasking_field_ = FormFieldData(); |
1436 forms_loaded_timestamps_.clear(); | 1448 forms_loaded_timestamps_.clear(); |
1437 initial_interaction_timestamp_ = TimeTicks(); | 1449 initial_interaction_timestamp_ = TimeTicks(); |
1438 external_delegate_->Reset(); | 1450 external_delegate_->Reset(); |
1439 } | 1451 } |
1440 | 1452 |
1441 AutofillManager::AutofillManager(AutofillDriver* driver, | 1453 AutofillManager::AutofillManager(AutofillDriver* driver, |
1442 AutofillClient* client, | 1454 AutofillClient* client, |
1443 PersonalDataManager* personal_data) | 1455 PersonalDataManager* personal_data) |
1444 : driver_(driver), | 1456 : driver_(driver), |
1445 client_(client), | 1457 client_(client), |
1446 payments_client_( | 1458 payments_client_(base::MakeUnique<payments::PaymentsClient>( |
1447 new payments::PaymentsClient(driver->GetURLRequestContext(), this)), | 1459 driver->GetURLRequestContext(), |
| 1460 this)), |
1448 app_locale_("en-US"), | 1461 app_locale_("en-US"), |
1449 personal_data_(personal_data), | 1462 personal_data_(personal_data), |
1450 autocomplete_history_manager_( | 1463 autocomplete_history_manager_( |
1451 new AutocompleteHistoryManager(driver, client)), | 1464 base::MakeUnique<AutocompleteHistoryManager>(driver, client)), |
| 1465 form_interactions_ukm_logger_( |
| 1466 base::MakeUnique<AutofillMetrics::FormInteractionsUkmLogger>( |
| 1467 client->GetUkmService())), |
1452 address_form_event_logger_( | 1468 address_form_event_logger_( |
1453 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)), | 1469 base::MakeUnique<AutofillMetrics::FormEventLogger>( |
| 1470 false /* is_for_credit_card */, |
| 1471 form_interactions_ukm_logger_.get())), |
1454 credit_card_form_event_logger_( | 1472 credit_card_form_event_logger_( |
1455 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)), | 1473 base::MakeUnique<AutofillMetrics::FormEventLogger>( |
| 1474 true /* is_for_credit_card */, |
| 1475 form_interactions_ukm_logger_.get())), |
1456 has_logged_autofill_enabled_(false), | 1476 has_logged_autofill_enabled_(false), |
1457 has_logged_address_suggestions_count_(false), | 1477 has_logged_address_suggestions_count_(false), |
1458 did_show_suggestions_(false), | 1478 did_show_suggestions_(false), |
1459 user_did_type_(false), | 1479 user_did_type_(false), |
1460 user_did_autofill_(false), | 1480 user_did_autofill_(false), |
1461 user_did_edit_autofilled_field_(false), | 1481 user_did_edit_autofilled_field_(false), |
1462 unmasking_query_id_(-1), | 1482 unmasking_query_id_(-1), |
1463 external_delegate_(NULL), | 1483 external_delegate_(NULL), |
1464 test_delegate_(NULL), | 1484 test_delegate_(NULL), |
1465 #if defined(OS_ANDROID) || defined(OS_IOS) | 1485 #if defined(OS_ANDROID) || defined(OS_IOS) |
(...skipping 10 matching lines...) Expand all Loading... |
1476 return false; | 1496 return false; |
1477 | 1497 |
1478 // No autofill data to return if the profiles are empty. | 1498 // No autofill data to return if the profiles are empty. |
1479 const std::vector<AutofillProfile*>& profiles = | 1499 const std::vector<AutofillProfile*>& profiles = |
1480 personal_data_->GetProfiles(); | 1500 personal_data_->GetProfiles(); |
1481 const std::vector<CreditCard*>& credit_cards = | 1501 const std::vector<CreditCard*>& credit_cards = |
1482 personal_data_->GetCreditCards(); | 1502 personal_data_->GetCreditCards(); |
1483 | 1503 |
1484 // Updating the FormEventLoggers for addresses and credit cards. | 1504 // Updating the FormEventLoggers for addresses and credit cards. |
1485 { | 1505 { |
1486 bool is_server_data_available = false; | 1506 size_t server_record_type_count = 0; |
1487 bool is_local_data_available = false; | 1507 size_t local_record_type_count = 0; |
1488 for (CreditCard* credit_card : credit_cards) { | 1508 for (CreditCard* credit_card : credit_cards) { |
1489 if (credit_card->record_type() == CreditCard::LOCAL_CARD) | 1509 if (credit_card->record_type() == CreditCard::LOCAL_CARD) |
1490 is_local_data_available = true; | 1510 local_record_type_count++; |
1491 else | 1511 else |
1492 is_server_data_available = true; | 1512 server_record_type_count++; |
1493 } | 1513 } |
1494 credit_card_form_event_logger_->set_is_server_data_available( | 1514 credit_card_form_event_logger_->set_server_record_type_count( |
1495 is_server_data_available); | 1515 server_record_type_count); |
1496 credit_card_form_event_logger_->set_is_local_data_available( | 1516 credit_card_form_event_logger_->set_local_record_type_count( |
1497 is_local_data_available); | 1517 local_record_type_count); |
1498 credit_card_form_event_logger_->set_is_context_secure( | 1518 credit_card_form_event_logger_->set_is_context_secure( |
1499 client_->IsContextSecure()); | 1519 client_->IsContextSecure()); |
1500 } | 1520 } |
1501 { | 1521 { |
1502 bool is_server_data_available = false; | 1522 size_t server_record_type_count = 0; |
1503 bool is_local_data_available = false; | 1523 size_t local_record_type_count = 0; |
1504 for (AutofillProfile* profile : profiles) { | 1524 for (AutofillProfile* profile : profiles) { |
1505 if (profile->record_type() == AutofillProfile::LOCAL_PROFILE) | 1525 if (profile->record_type() == AutofillProfile::LOCAL_PROFILE) |
1506 is_local_data_available = true; | 1526 local_record_type_count++; |
1507 else if (profile->record_type() == AutofillProfile::SERVER_PROFILE) | 1527 else if (profile->record_type() == AutofillProfile::SERVER_PROFILE) |
1508 is_server_data_available = true; | 1528 server_record_type_count++; |
1509 } | 1529 } |
1510 address_form_event_logger_->set_is_server_data_available( | 1530 address_form_event_logger_->set_server_record_type_count( |
1511 is_server_data_available); | 1531 server_record_type_count); |
1512 address_form_event_logger_->set_is_local_data_available( | 1532 address_form_event_logger_->set_local_record_type_count( |
1513 is_local_data_available); | 1533 local_record_type_count); |
1514 } | 1534 } |
1515 | 1535 |
1516 if (profiles.empty() && credit_cards.empty()) | 1536 if (profiles.empty() && credit_cards.empty()) |
1517 return false; | 1537 return false; |
1518 | 1538 |
1519 return true; | 1539 return true; |
1520 } | 1540 } |
1521 | 1541 |
1522 bool AutofillManager::GetProfile(int unique_id, | 1542 bool AutofillManager::GetProfile(int unique_id, |
1523 const AutofillProfile** profile) { | 1543 const AutofillProfile** profile) { |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 // Note that this may invalidate |data_model|, particularly if it is a Mac | 1692 // Note that this may invalidate |data_model|, particularly if it is a Mac |
1673 // address book entry. | 1693 // address book entry. |
1674 if (action == AutofillDriver::FORM_DATA_ACTION_FILL) | 1694 if (action == AutofillDriver::FORM_DATA_ACTION_FILL) |
1675 personal_data_->RecordUseOf(data_model); | 1695 personal_data_->RecordUseOf(data_model); |
1676 | 1696 |
1677 driver_->SendFormDataToRenderer(query_id, action, result); | 1697 driver_->SendFormDataToRenderer(query_id, action, result); |
1678 } | 1698 } |
1679 | 1699 |
1680 std::unique_ptr<FormStructure> AutofillManager::ValidateSubmittedForm( | 1700 std::unique_ptr<FormStructure> AutofillManager::ValidateSubmittedForm( |
1681 const FormData& form) { | 1701 const FormData& form) { |
1682 std::unique_ptr<FormStructure> submitted_form(new FormStructure(form)); | 1702 std::unique_ptr<FormStructure> submitted_form( |
| 1703 base::MakeUnique<FormStructure>(form)); |
1683 if (!ShouldUploadForm(*submitted_form)) | 1704 if (!ShouldUploadForm(*submitted_form)) |
1684 return std::unique_ptr<FormStructure>(); | 1705 return std::unique_ptr<FormStructure>(); |
1685 | 1706 |
1686 // Ignore forms not present in our cache. These are typically forms with | 1707 // Ignore forms not present in our cache. These are typically forms with |
1687 // wonky JavaScript that also makes them not auto-fillable. | 1708 // wonky JavaScript that also makes them not auto-fillable. |
1688 FormStructure* cached_submitted_form; | 1709 FormStructure* cached_submitted_form; |
1689 if (!FindCachedForm(form, &cached_submitted_form)) | 1710 if (!FindCachedForm(form, &cached_submitted_form)) |
1690 return std::unique_ptr<FormStructure>(); | 1711 return std::unique_ptr<FormStructure>(); |
1691 | 1712 |
1692 submitted_form->UpdateFromCache(*cached_submitted_form, false); | 1713 submitted_form->UpdateFromCache(*cached_submitted_form, false); |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1848 return suggestions; | 1869 return suggestions; |
1849 } | 1870 } |
1850 | 1871 |
1851 void AutofillManager::ParseForms(const std::vector<FormData>& forms) { | 1872 void AutofillManager::ParseForms(const std::vector<FormData>& forms) { |
1852 if (forms.empty()) | 1873 if (forms.empty()) |
1853 return; | 1874 return; |
1854 | 1875 |
1855 std::vector<FormStructure*> non_queryable_forms; | 1876 std::vector<FormStructure*> non_queryable_forms; |
1856 std::vector<FormStructure*> queryable_forms; | 1877 std::vector<FormStructure*> queryable_forms; |
1857 for (const FormData& form : forms) { | 1878 for (const FormData& form : forms) { |
1858 const auto parse_form_start_time = base::TimeTicks::Now(); | 1879 const auto parse_form_start_time = TimeTicks::Now(); |
1859 | 1880 |
1860 FormStructure* form_structure = nullptr; | 1881 FormStructure* form_structure = nullptr; |
1861 if (!ParseForm(form, &form_structure)) | 1882 if (!ParseForm(form, &form_structure)) |
1862 continue; | 1883 continue; |
1863 DCHECK(form_structure); | 1884 DCHECK(form_structure); |
1864 | 1885 |
1865 // Set aside forms with method GET or author-specified types, so that they | 1886 // Set aside forms with method GET or author-specified types, so that they |
1866 // are not included in the query to the server. | 1887 // are not included in the query to the server. |
1867 if (form_structure->ShouldBeCrowdsourced()) | 1888 if (form_structure->ShouldBeCrowdsourced()) |
1868 queryable_forms.push_back(form_structure); | 1889 queryable_forms.push_back(form_structure); |
1869 else | 1890 else |
1870 non_queryable_forms.push_back(form_structure); | 1891 non_queryable_forms.push_back(form_structure); |
1871 | 1892 |
1872 AutofillMetrics::LogParseFormTiming(base::TimeTicks::Now() - | 1893 AutofillMetrics::LogParseFormTiming(TimeTicks::Now() - |
1873 parse_form_start_time); | 1894 parse_form_start_time); |
1874 } | 1895 } |
1875 | 1896 |
1876 if (!queryable_forms.empty() && download_manager_) { | 1897 if (!queryable_forms.empty() && download_manager_) { |
1877 // Query the server if at least one of the forms was parsed. | 1898 // Query the server if at least one of the forms was parsed. |
1878 download_manager_->StartQueryRequest(queryable_forms); | 1899 download_manager_->StartQueryRequest(queryable_forms); |
1879 } | 1900 } |
1880 | 1901 |
1881 if (!queryable_forms.empty() || !non_queryable_forms.empty()) { | 1902 if (!queryable_forms.empty() || !non_queryable_forms.empty()) { |
1882 AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED); | 1903 AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED); |
| 1904 // Setup the url for metrics that we will collect for this form. |
| 1905 form_interactions_ukm_logger_->OnFormsLoaded(forms[0].origin); |
| 1906 |
1883 #if defined(OS_IOS) | 1907 #if defined(OS_IOS) |
1884 // Log this from same location as AutofillMetrics::FORMS_LOADED to ensure | 1908 // Log this from same location as AutofillMetrics::FORMS_LOADED to ensure |
1885 // that KeyboardAccessoryButtonsIOS and UserHappiness UMA metrics will be | 1909 // that KeyboardAccessoryButtonsIOS and UserHappiness UMA metrics will be |
1886 // directly comparable. | 1910 // directly comparable. |
1887 KeyboardAccessoryMetricsLogger::OnFormsLoaded(); | 1911 KeyboardAccessoryMetricsLogger::OnFormsLoaded(); |
1888 #endif | 1912 #endif |
1889 } | 1913 } |
1890 | 1914 |
1891 #if defined(OS_ANDROID) || defined(OS_IOS) | 1915 #if defined(OS_ANDROID) || defined(OS_IOS) |
1892 // When a credit card form is parsed and conditions are met, show an infobar | 1916 // When a credit card form is parsed and conditions are met, show an infobar |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2198 } | 2222 } |
2199 #endif // ENABLE_FORM_DEBUG_DUMP | 2223 #endif // ENABLE_FORM_DEBUG_DUMP |
2200 | 2224 |
2201 void AutofillManager::LogCardUploadDecisionUkm( | 2225 void AutofillManager::LogCardUploadDecisionUkm( |
2202 AutofillMetrics::CardUploadDecisionMetric upload_decision) { | 2226 AutofillMetrics::CardUploadDecisionMetric upload_decision) { |
2203 AutofillMetrics::LogCardUploadDecisionUkm( | 2227 AutofillMetrics::LogCardUploadDecisionUkm( |
2204 client_->GetUkmService(), pending_upload_request_url_, upload_decision); | 2228 client_->GetUkmService(), pending_upload_request_url_, upload_decision); |
2205 } | 2229 } |
2206 | 2230 |
2207 } // namespace autofill | 2231 } // namespace autofill |
OLD | NEW |