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

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

Issue 884843002: Recording in UMA when a user interacted with an address form or a credit card form. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: inlining web_profiles() call Created 5 years, 10 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 8
9 #include <limits> 9 #include <limits>
10 #include <map> 10 #include <map>
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 AutofillDriver* driver, 142 AutofillDriver* driver,
143 AutofillClient* client, 143 AutofillClient* client,
144 const std::string& app_locale, 144 const std::string& app_locale,
145 AutofillDownloadManagerState enable_download_manager) 145 AutofillDownloadManagerState enable_download_manager)
146 : driver_(driver), 146 : driver_(driver),
147 client_(client), 147 client_(client),
148 app_locale_(app_locale), 148 app_locale_(app_locale),
149 personal_data_(client->GetPersonalDataManager()), 149 personal_data_(client->GetPersonalDataManager()),
150 autocomplete_history_manager_( 150 autocomplete_history_manager_(
151 new AutocompleteHistoryManager(driver, client)), 151 new AutocompleteHistoryManager(driver, client)),
152 address_form_event_logger_(
153 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)),
154 credit_card_form_event_logger_(
155 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)),
152 has_logged_autofill_enabled_(false), 156 has_logged_autofill_enabled_(false),
153 has_logged_address_suggestions_count_(false), 157 has_logged_address_suggestions_count_(false),
154 did_show_suggestions_(false), 158 did_show_suggestions_(false),
155 user_did_type_(false), 159 user_did_type_(false),
156 user_did_autofill_(false), 160 user_did_autofill_(false),
157 user_did_edit_autofilled_field_(false), 161 user_did_edit_autofilled_field_(false),
158 external_delegate_(NULL), 162 external_delegate_(NULL),
159 test_delegate_(NULL), 163 test_delegate_(NULL),
160 weak_ptr_factory_(this) { 164 weak_ptr_factory_(this) {
161 if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) { 165 if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) {
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 if (!IsValidFormData(form) || !IsValidFormFieldData(field)) 452 if (!IsValidFormData(form) || !IsValidFormFieldData(field))
449 return; 453 return;
450 454
451 std::vector<Suggestion> suggestions; 455 std::vector<Suggestion> suggestions;
452 456
453 external_delegate_->OnQuery(query_id, 457 external_delegate_->OnQuery(query_id,
454 form, 458 form,
455 field, 459 field,
456 bounding_box, 460 bounding_box,
457 display_warning); 461 display_warning);
462
463 // Need to refresh models before using the form_event_loggers.
464 bool is_autofill_possible = RefreshDataModels();
465
458 FormStructure* form_structure = NULL; 466 FormStructure* form_structure = NULL;
459 AutofillField* autofill_field = NULL; 467 AutofillField* autofill_field = NULL;
460 if (RefreshDataModels() && 468 bool got_autofillable_form =
469 GetCachedFormAndField(form, field, &form_structure, &autofill_field) &&
470 // Don't send suggestions or track forms that aren't auto-fillable.
471 form_structure->IsAutofillable();
472
473 // Logging interactions of forms that are autofillable.
474 if (got_autofillable_form) {
475 if (autofill_field->Type().group() == CREDIT_CARD)
476 credit_card_form_event_logger_->OnDidInteractWithAutofillableForm();
477 else
478 address_form_event_logger_->OnDidInteractWithAutofillableForm();
479 }
480
481 if (is_autofill_possible &&
461 driver_->RendererIsAvailable() && 482 driver_->RendererIsAvailable() &&
462 GetCachedFormAndField(form, field, &form_structure, &autofill_field) && 483 got_autofillable_form) {
463 // Don't send suggestions for forms that aren't auto-fillable.
464 form_structure->IsAutofillable()) {
465 AutofillType type = autofill_field->Type(); 484 AutofillType type = autofill_field->Type();
466 bool is_filling_credit_card = (type.group() == CREDIT_CARD); 485 bool is_filling_credit_card = (type.group() == CREDIT_CARD);
467 if (is_filling_credit_card) { 486 if (is_filling_credit_card) {
468 suggestions = GetCreditCardSuggestions(field, type); 487 suggestions = GetCreditCardSuggestions(field, type);
469 } else { 488 } else {
470 suggestions = 489 suggestions =
471 GetProfileSuggestions(*form_structure, field, *autofill_field); 490 GetProfileSuggestions(*form_structure, field, *autofill_field);
472 } 491 }
473
474 if (!suggestions.empty()) { 492 if (!suggestions.empty()) {
475 // Don't provide Autofill suggestions when Autofill is disabled, and don't 493 // Don't provide Autofill suggestions when Autofill is disabled, and don't
476 // provide credit card suggestions for non-HTTPS pages. However, provide a 494 // provide credit card suggestions for non-HTTPS pages. However, provide a
477 // warning to the user in these cases. 495 // warning to the user in these cases.
478 int warning = 0; 496 int warning = 0;
479 if (is_filling_credit_card && !FormIsHTTPS(*form_structure)) { 497 if (is_filling_credit_card && !FormIsHTTPS(*form_structure)) {
480 warning = IDS_AUTOFILL_WARNING_INSECURE_CONNECTION; 498 warning = IDS_AUTOFILL_WARNING_INSECURE_CONNECTION;
481 } 499 }
482 if (warning) { 500 if (warning) {
483 Suggestion warning_suggestion(l10n_util::GetStringUTF16(warning)); 501 Suggestion warning_suggestion(l10n_util::GetStringUTF16(warning));
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 if (!download_manager_) 838 if (!download_manager_)
821 return false; 839 return false;
822 840
823 return download_manager_->StartUploadRequest(form_structure, 841 return download_manager_->StartUploadRequest(form_structure,
824 false /* was_autofilled */, 842 false /* was_autofilled */,
825 available_field_types); 843 available_field_types);
826 } 844 }
827 845
828 void AutofillManager::Reset() { 846 void AutofillManager::Reset() {
829 form_structures_.clear(); 847 form_structures_.clear();
848 address_form_event_logger_.reset(
849 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */));
850 credit_card_form_event_logger_.reset(
851 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */));
830 has_logged_autofill_enabled_ = false; 852 has_logged_autofill_enabled_ = false;
831 has_logged_address_suggestions_count_ = false; 853 has_logged_address_suggestions_count_ = false;
832 did_show_suggestions_ = false; 854 did_show_suggestions_ = false;
833 user_did_type_ = false; 855 user_did_type_ = false;
834 user_did_autofill_ = false; 856 user_did_autofill_ = false;
835 user_did_edit_autofilled_field_ = false; 857 user_did_edit_autofilled_field_ = false;
836 unmasking_card_ = CreditCard(); 858 unmasking_card_ = CreditCard();
837 unmasking_query_id_ = -1; 859 unmasking_query_id_ = -1;
838 unmasking_form_ = FormData(); 860 unmasking_form_ = FormData();
839 unmasking_field_ = FormFieldData(); 861 unmasking_field_ = FormFieldData();
840 forms_loaded_timestamps_.clear(); 862 forms_loaded_timestamps_.clear();
841 initial_interaction_timestamp_ = TimeTicks(); 863 initial_interaction_timestamp_ = TimeTicks();
842 external_delegate_->Reset(); 864 external_delegate_->Reset();
843 } 865 }
844 866
845 AutofillManager::AutofillManager(AutofillDriver* driver, 867 AutofillManager::AutofillManager(AutofillDriver* driver,
846 AutofillClient* client, 868 AutofillClient* client,
847 PersonalDataManager* personal_data) 869 PersonalDataManager* personal_data)
848 : driver_(driver), 870 : driver_(driver),
849 client_(client), 871 client_(client),
850 app_locale_("en-US"), 872 app_locale_("en-US"),
851 personal_data_(personal_data), 873 personal_data_(personal_data),
852 autocomplete_history_manager_( 874 autocomplete_history_manager_(
853 new AutocompleteHistoryManager(driver, client)), 875 new AutocompleteHistoryManager(driver, client)),
876 address_form_event_logger_(
877 new AutofillMetrics::FormEventLogger(false /* is_for_credit_card */)),
878 credit_card_form_event_logger_(
879 new AutofillMetrics::FormEventLogger(true /* is_for_credit_card */)),
854 has_logged_autofill_enabled_(false), 880 has_logged_autofill_enabled_(false),
855 has_logged_address_suggestions_count_(false), 881 has_logged_address_suggestions_count_(false),
856 did_show_suggestions_(false), 882 did_show_suggestions_(false),
857 user_did_type_(false), 883 user_did_type_(false),
858 user_did_autofill_(false), 884 user_did_autofill_(false),
859 user_did_edit_autofilled_field_(false), 885 user_did_edit_autofilled_field_(false),
860 unmasking_query_id_(-1), 886 unmasking_query_id_(-1),
861 external_delegate_(NULL), 887 external_delegate_(NULL),
862 test_delegate_(NULL), 888 test_delegate_(NULL),
863 weak_ptr_factory_(this) { 889 weak_ptr_factory_(this) {
864 DCHECK(driver_); 890 DCHECK(driver_);
865 DCHECK(client_); 891 DCHECK(client_);
866 } 892 }
867 893
868 bool AutofillManager::RefreshDataModels() const { 894 bool AutofillManager::RefreshDataModels() {
869 if (!IsAutofillEnabled()) 895 if (!IsAutofillEnabled())
870 return false; 896 return false;
871 897
872 // No autofill data to return if the profiles are empty. 898 // No autofill data to return if the profiles are empty.
873 if (personal_data_->GetProfiles().empty() && 899 const std::vector<AutofillProfile*>& profiles =
874 personal_data_->GetCreditCards().empty()) { 900 personal_data_->GetProfiles();
901 const std::vector<CreditCard*>& credit_cards =
902 personal_data_->GetCreditCards();
903
904 // Updating the FormEventLoggers for addresses and credit cards.
905 {
906 bool is_server_data_available = false;
907 bool is_local_data_available = false;
908 for (CreditCard* credit_card : credit_cards) {
909 if (credit_card->record_type() == CreditCard::LOCAL_CARD)
910 is_local_data_available = true;
911 else
912 is_server_data_available = true;
913 }
914 credit_card_form_event_logger_->set_is_server_data_available(
915 is_server_data_available);
916 credit_card_form_event_logger_->set_is_local_data_available(
917 is_local_data_available);
918 }
919 {
920 bool is_server_data_available = false;
921 bool is_local_data_available = false;
922 for (AutofillProfile* profile : profiles) {
923 if (profile->record_type() == AutofillProfile::LOCAL_PROFILE)
924 is_local_data_available = true;
925 else
926 is_server_data_available = true;
927 }
928 address_form_event_logger_->set_is_server_data_available(
929 is_server_data_available);
930 address_form_event_logger_->set_is_local_data_available(
931 is_local_data_available);
932 }
933
934 if (profiles.empty() && credit_cards.empty())
875 return false; 935 return false;
876 }
877 936
878 return true; 937 return true;
879 } 938 }
880 939
881 bool AutofillManager::GetProfileOrCreditCard( 940 bool AutofillManager::GetProfileOrCreditCard(
882 int unique_id, 941 int unique_id,
883 const AutofillDataModel** data_model, 942 const AutofillDataModel** data_model,
884 size_t* variant, 943 size_t* variant,
885 bool* is_credit_card) const { 944 bool* is_credit_card) const {
886 // Unpack the |unique_id| into component parts. 945 // Unpack the |unique_id| into component parts.
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 return false; 1384 return false;
1326 1385
1327 // Disregard forms that we wouldn't ever autofill in the first place. 1386 // Disregard forms that we wouldn't ever autofill in the first place.
1328 if (!form.ShouldBeParsed()) 1387 if (!form.ShouldBeParsed())
1329 return false; 1388 return false;
1330 1389
1331 return true; 1390 return true;
1332 } 1391 }
1333 1392
1334 } // namespace autofill 1393 } // 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