Index: chrome/browser/autofill/autofill_manager.cc |
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc |
index e11a6d46083d69db54c609ad3fb19f21097e81a4..bea6f797dca463c1d4b1436638a641baac9289ad 100644 |
--- a/chrome/browser/autofill/autofill_manager.cc |
+++ b/chrome/browser/autofill/autofill_manager.cc |
@@ -57,6 +57,8 @@ namespace { |
const double kAutofillPositiveUploadRateDefaultValue = 0.20; |
const double kAutofillNegativeUploadRateDefaultValue = 0.20; |
+const size_t kMaxRecentFormSignaturesToRemember = 3; |
+ |
const string16::value_type kCreditCardPrefix[] = {'*', 0}; |
// Removes duplicate suggestions whilst preserving their original order. |
@@ -561,7 +563,12 @@ void AutofillManager::OnFillAutofillFormData(int query_id, |
// proceed to the next |result| field, and the next |form_structure|. |
++i; |
} |
- autofilled_forms_signatures_.push_front(form_structure->FormSignature()); |
+ |
+ autofilled_form_signatures_.push_front(form_structure->FormSignature()); |
+ // Only remember the last few forms that we've seen, both to avoid false |
+ // positives and to avoid wasting memory. |
+ if (autofilled_form_signatures_.size() > kMaxRecentFormSignaturesToRemember) |
+ autofilled_form_signatures_.pop_back(); |
host->Send(new AutofillMsg_FormDataFilled( |
host->routing_id(), query_id, result)); |
@@ -642,25 +649,24 @@ void AutofillManager::ImportFormData(const FormStructure& submitted_form) { |
} |
void AutofillManager::UploadFormData(const FormStructure& submitted_form) { |
- if (!disable_download_manager_requests_) { |
- bool was_autofilled = false; |
- // Check if the form among last 3 forms that were auto-filled. |
- // Clear older signatures. |
- std::list<std::string>::iterator it; |
- int total_form_checked = 0; |
- for (it = autofilled_forms_signatures_.begin(); |
- it != autofilled_forms_signatures_.end() && total_form_checked < 3; |
- ++it, ++total_form_checked) { |
- if (*it == submitted_form.FormSignature()) |
- was_autofilled = true; |
- } |
- // Remove outdated form signatures. |
- if (total_form_checked == 3 && it != autofilled_forms_signatures_.end()) { |
- autofilled_forms_signatures_.erase(it, |
- autofilled_forms_signatures_.end()); |
- } |
- download_manager_.StartUploadRequest(submitted_form, was_autofilled); |
+ if (disable_download_manager_requests_) |
+ return; |
+ |
+ // Check if the form is among the forms that were recently auto-filled. |
+ bool was_autofilled = false; |
+ for (std::list<std::string>::const_iterator it = |
+ autofilled_form_signatures_.begin(); |
+ it != autofilled_form_signatures_.end() && !was_autofilled; |
+ ++it) { |
+ if (*it == submitted_form.FormSignature()) |
+ was_autofilled = true; |
} |
+ |
+ FieldTypeSet available_types; |
+ personal_data_->GetAvailableFieldTypes(&available_types); |
+ |
+ download_manager_.StartUploadRequest(submitted_form, was_autofilled, |
+ available_types); |
} |
void AutofillManager::Reset() { |