Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: components/autofill/core/browser/autofill_manager.cc

Issue 2800853004: UKM that threads together multiple form interaction events. (Closed)
Patch Set: Uses size_t for local and server record type count. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « components/autofill/core/browser/autofill_manager.h ('k') | components/autofill/core/browser/autofill_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698