Chromium Code Reviews| Index: components/autofill/core/browser/autofill_manager.cc |
| diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc |
| index b780de8caceffd1700b55c08cc61196f365f5c1e..635abf6ad647664df5514989f67bcacd2def39ba 100644 |
| --- a/components/autofill/core/browser/autofill_manager.cc |
| +++ b/components/autofill/core/browser/autofill_manager.cc |
| @@ -35,6 +35,7 @@ |
| #include "components/autofill/core/browser/personal_data_manager.h" |
| #include "components/autofill/core/browser/phone_number.h" |
| #include "components/autofill/core/browser/phone_number_i18n.h" |
| +#include "components/autofill/core/common/autofill_data_sanitizer.h" |
| #include "components/autofill/core/common/autofill_pref_names.h" |
| #include "components/autofill/core/common/autofill_switches.h" |
| #include "components/autofill/core/common/form_data.h" |
| @@ -230,8 +231,16 @@ void AutofillManager::SetExternalDelegate(AutofillExternalDelegate* delegate) { |
| autocomplete_history_manager_->SetExternalDelegate(delegate); |
| } |
| +void AutofillManager::ShowAutofillSettings() { |
| + manager_delegate_->ShowAutofillSettings(); |
| +} |
| + |
| bool AutofillManager::OnFormSubmitted(const FormData& form, |
| const TimeTicks& timestamp) { |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedFormData(form)) |
| + return false; |
| + |
| // Let Autocomplete know as well. |
| autocomplete_history_manager_->OnFormSubmitted(form); |
| @@ -301,6 +310,10 @@ bool AutofillManager::OnFormSubmitted(const FormData& form, |
| void AutofillManager::OnFormsSeen(const std::vector<FormData>& forms, |
| const TimeTicks& timestamp, |
| autofill::FormsSeenState state) { |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedFormDataVector(forms)) |
| + return; |
| + |
| bool is_post_document_load = state == autofill::DYNAMIC_FORMS_SEEN; |
| // If new forms were added dynamically, treat as a new page. |
| if (is_post_document_load) |
| @@ -325,6 +338,10 @@ void AutofillManager::OnFormsSeen(const std::vector<FormData>& forms, |
| void AutofillManager::OnTextFieldDidChange(const FormData& form, |
| const FormFieldData& field, |
| const TimeTicks& timestamp) { |
| + // Bail if the arguments appear to be corrupt. |
|
palmer
2013/12/20 19:53:36
Nit: I'd drop the instances of this comment. The f
Ilya Sherman
2013/12/20 23:54:52
Done.
|
| + if (!IsSanitizedFormData(form) || !IsSanitizedFormFieldData(field)) |
| + return; |
| + |
| FormStructure* form_structure = NULL; |
| AutofillField* autofill_field = NULL; |
| if (!GetCachedFormAndField(form, field, &form_structure, &autofill_field)) |
| @@ -355,6 +372,10 @@ void AutofillManager::OnQueryFormFieldAutofill(int query_id, |
| const FormFieldData& field, |
| const gfx::RectF& bounding_box, |
| bool display_warning) { |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedFormData(form) || !IsSanitizedFormFieldData(field)) |
| + return; |
| + |
| std::vector<base::string16> values; |
| std::vector<base::string16> labels; |
| std::vector<base::string16> icons; |
| @@ -442,6 +463,10 @@ void AutofillManager::OnFillAutofillFormData(int query_id, |
| const FormData& form, |
| const FormFieldData& field, |
| int unique_id) { |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedFormData(form) || !IsSanitizedFormFieldData(field)) |
| + return; |
| + |
| const AutofillDataModel* data_model = NULL; |
| size_t variant = 0; |
| FormStructure* form_structure = NULL; |
| @@ -522,10 +547,6 @@ void AutofillManager::OnFillAutofillFormData(int query_id, |
| driver_->SendFormDataToRenderer(query_id, result); |
| } |
| -void AutofillManager::OnShowAutofillDialog() { |
| - manager_delegate_->ShowAutofillSettings(); |
| -} |
| - |
| void AutofillManager::OnDidPreviewAutofillFormData() { |
| if (test_delegate_) |
| test_delegate_->DidPreviewFormData(); |
| @@ -599,9 +620,14 @@ void AutofillManager::SetTestDelegate( |
| } |
| void AutofillManager::OnAddPasswordFormMapping( |
| - const FormFieldData& form, |
| + const FormFieldData& username_field, |
| const PasswordFormFillData& fill_data) { |
| - external_delegate_->AddPasswordFormMapping(form, fill_data); |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedFormFieldData(username_field) || |
| + !IsSanitizedPasswordFormFillData(fill_data)) |
| + return; |
| + |
| + external_delegate_->AddPasswordFormMapping(username_field, fill_data); |
| } |
| void AutofillManager::OnShowPasswordSuggestions( |
| @@ -609,6 +635,12 @@ void AutofillManager::OnShowPasswordSuggestions( |
| const gfx::RectF& bounds, |
| const std::vector<base::string16>& suggestions, |
| const std::vector<base::string16>& realms) { |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedString16Vector(suggestions) || |
| + !IsSanitizedString16Vector(realms) || |
| + suggestions.size() != realms.size()) |
| + return; |
| + |
| external_delegate_->OnShowPasswordSuggestions(suggestions, |
| realms, |
| field, |
| @@ -617,7 +649,10 @@ void AutofillManager::OnShowPasswordSuggestions( |
| void AutofillManager::OnSetDataList(const std::vector<base::string16>& values, |
| const std::vector<base::string16>& labels) { |
| - if (values.size() != labels.size()) |
| + // Bail if the arguments appear to be corrupt. |
| + if (!IsSanitizedString16Vector(values) || |
| + !IsSanitizedString16Vector(labels) || |
| + values.size() != labels.size()) |
| return; |
| external_delegate_->SetCurrentDataListValues(values, labels); |