From e13ca411a78ee4cab69a51e099a53a77c9108028 Mon Sep 17 00:00:00 2001 From: "ahutter@chromium.org" Date: Thu, 11 Apr 2013 03:00:48 +0000 Subject: Preventing Autofill saving user entered data during Autocheckout. BUG=226740 Review URL: https://chromiumcodereview.appspot.com/13839003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193552 0039d316-1c4b-4281-b951-d872f2087c98 --- components/autofill/browser/autocheckout_manager.cc | 11 ++++++----- components/autofill/browser/autofill_manager.cc | 4 +++- components/autofill/browser/form_structure.cc | 4 +++- components/autofill/browser/form_structure.h | 8 ++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) (limited to 'components') diff --git a/components/autofill/browser/autocheckout_manager.cc b/components/autofill/browser/autocheckout_manager.cc index 4eadf45..b1998a6 100644 --- a/components/autofill/browser/autocheckout_manager.cc +++ b/components/autofill/browser/autocheckout_manager.cc @@ -114,12 +114,13 @@ void AutocheckoutManager::FillForms() { autofill_manager_->GetFormStructures(); for (std::vector::const_iterator iter = form_structures.begin(); iter != form_structures.end(); ++iter) { - const FormStructure& form_structure = **iter; - FormData form = form_structure.ToFormData(); - DCHECK_EQ(form_structure.field_count(), form.fields.size()); + FormStructure* form_structure = *iter; + form_structure->set_filled_by_autocheckout(true); + FormData form = form_structure->ToFormData(); + DCHECK_EQ(form_structure->field_count(), form.fields.size()); - for (size_t i = 0; i < form_structure.field_count(); ++i) { - const AutofillField* field = form_structure.field(i); + for (size_t i = 0; i < form_structure->field_count(); ++i) { + const AutofillField* field = form_structure->field(i); SetValue(*field, &form.fields[i]); } diff --git a/components/autofill/browser/autofill_manager.cc b/components/autofill/browser/autofill_manager.cc index cca6f87..e82aec8 100644 --- a/components/autofill/browser/autofill_manager.cc +++ b/components/autofill/browser/autofill_manager.cc @@ -403,7 +403,9 @@ bool AutofillManager::OnFormSubmitted(const FormData& form, return false; submitted_form->UpdateFromCache(*cached_submitted_form); - if (submitted_form->IsAutofillable(true)) + // Don't prompt the user to save data entered by Autocheckout. + if (submitted_form->IsAutofillable(true) && + !submitted_form->filled_by_autocheckout()) ImportFormData(*submitted_form); // Only upload server statistics and UMA metrics if at least some local data diff --git a/components/autofill/browser/form_structure.cc b/components/autofill/browser/form_structure.cc index 40b0f36..d7927a2 100644 --- a/components/autofill/browser/form_structure.cc +++ b/components/autofill/browser/form_structure.cc @@ -296,7 +296,8 @@ FormStructure::FormStructure(const FormData& form, upload_required_(USE_UPLOAD_RATES), server_experiment_id_("no server response"), has_author_specified_types_(false), - autocheckout_url_prefix_(autocheckout_url_prefix) { + autocheckout_url_prefix_(autocheckout_url_prefix), + filled_by_autocheckout_(false) { // Copy the form fields. std::map unique_names; for (std::vector::const_iterator field = @@ -745,6 +746,7 @@ void FormStructure::UpdateFromCache(const FormStructure& cached_form) { UpdateAutofillCount(); + filled_by_autocheckout_ = cached_form.filled_by_autocheckout(); server_experiment_id_ = cached_form.server_experiment_id(); // The form signature should match between query and upload requests to the diff --git a/components/autofill/browser/form_structure.h b/components/autofill/browser/form_structure.h index f7abd78..5512acc 100644 --- a/components/autofill/browser/form_structure.h +++ b/components/autofill/browser/form_structure.h @@ -165,6 +165,11 @@ class FormStructure { // |user_submitted| is currently always false. FormData ToFormData() const; + bool filled_by_autocheckout() const { return filled_by_autocheckout_; } + void set_filled_by_autocheckout(bool filled_by_autocheckout) { + filled_by_autocheckout_ = filled_by_autocheckout; + } + bool operator==(const FormData& form) const; bool operator!=(const FormData& form) const; @@ -244,6 +249,9 @@ class FormStructure { // autocheckout is not enabled for this form. std::string autocheckout_url_prefix_; + // Whether or not this form was filled by Autocheckout. + bool filled_by_autocheckout_; + DISALLOW_COPY_AND_ASSIGN(FormStructure); }; -- cgit v1.1