| Index: components/autofill/content/renderer/form_autofill_util.cc
|
| diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
|
| index 57da2255b98710af582f052f05cbed1f4168cdb5..35b23c2a5992665d1cd97c23669ea71554befe18 100644
|
| --- a/components/autofill/content/renderer/form_autofill_util.cc
|
| +++ b/components/autofill/content/renderer/form_autofill_util.cc
|
| @@ -958,6 +958,7 @@ void PreviewFormField(const FormFieldData& data,
|
| // [1, kMaxParseableFields].
|
| bool ExtractFieldsFromControlElements(
|
| const WebVector<WebFormControlElement>& control_elements,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| ExtractMask extract_mask,
|
| ScopedVector<FormFieldData>* form_fields,
|
| std::vector<bool>* fields_extracted,
|
| @@ -974,7 +975,9 @@ bool ExtractFieldsFromControlElements(
|
|
|
| // Create a new FormFieldData, fill it out and map it to the field's name.
|
| FormFieldData* form_field = new FormFieldData;
|
| - WebFormControlElementToFormField(control_element, extract_mask, form_field);
|
| + WebFormControlElementToFormField(control_element,
|
| + field_value_and_properties_map,
|
| + extract_mask, form_field);
|
| form_fields->push_back(form_field);
|
| (*element_map)[control_element] = form_field;
|
| (*fields_extracted)[i] = true;
|
| @@ -1061,6 +1064,7 @@ bool FormOrFieldsetsToFormData(
|
| const blink::WebFormControlElement* form_control_element,
|
| const std::vector<blink::WebElement>& fieldsets,
|
| const WebVector<WebFormControlElement>& control_elements,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| ExtractMask extract_mask,
|
| FormData* form,
|
| FormFieldData* field) {
|
| @@ -1082,9 +1086,9 @@ bool FormOrFieldsetsToFormData(
|
| // requirements and thus will be in the resulting |form|.
|
| std::vector<bool> fields_extracted(control_elements.size(), false);
|
|
|
| - if (!ExtractFieldsFromControlElements(control_elements, extract_mask,
|
| - &form_fields, &fields_extracted,
|
| - &element_map)) {
|
| + if (!ExtractFieldsFromControlElements(
|
| + control_elements, field_value_and_properties_map, extract_mask,
|
| + &form_fields, &fields_extracted, &element_map)) {
|
| return false;
|
| }
|
|
|
| @@ -1155,14 +1159,16 @@ bool UnownedFormElementsAndFieldSetsToFormData(
|
| const std::vector<blink::WebFormControlElement>& control_elements,
|
| const blink::WebFormControlElement* element,
|
| const blink::WebDocument& document,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| ExtractMask extract_mask,
|
| FormData* form,
|
| FormFieldData* field) {
|
| form->origin = GetCanonicalOriginForDocument(document);
|
| form->is_form_tag = false;
|
|
|
| - return FormOrFieldsetsToFormData(nullptr, element, fieldsets,
|
| - control_elements, extract_mask, form, field);
|
| + return FormOrFieldsetsToFormData(
|
| + nullptr, element, fieldsets, control_elements,
|
| + field_value_and_properties_map, extract_mask, form, field);
|
| }
|
|
|
| GURL StripAuthAndParams(const GURL& gurl) {
|
| @@ -1192,7 +1198,7 @@ ScopedLayoutPreventer::~ScopedLayoutPreventer() {
|
|
|
| bool ExtractFormData(const WebFormElement& form_element, FormData* data) {
|
| return WebFormElementToFormData(
|
| - form_element, WebFormControlElement(),
|
| + form_element, WebFormControlElement(), nullptr,
|
| static_cast<form_util::ExtractMask>(form_util::EXTRACT_VALUE |
|
| form_util::EXTRACT_OPTION_TEXT |
|
| form_util::EXTRACT_OPTIONS),
|
| @@ -1234,8 +1240,8 @@ bool IsFormVisible(blink::WebFrame* frame,
|
|
|
| if (action_is_empty) { // Both actions are empty, compare all fields.
|
| FormData extracted_form_data;
|
| - WebFormElementToFormData(form, WebFormControlElement(), EXTRACT_NONE,
|
| - &extracted_form_data, nullptr);
|
| + WebFormElementToFormData(form, WebFormControlElement(), nullptr,
|
| + EXTRACT_NONE, &extracted_form_data, nullptr);
|
| if (form_data.SameFormAs(extracted_form_data)) {
|
| return true; // Form still exists.
|
| }
|
| @@ -1357,9 +1363,11 @@ std::vector<WebFormControlElement> ExtractAutofillableElementsInForm(
|
| return ExtractAutofillableElementsFromSet(control_elements);
|
| }
|
|
|
| -void WebFormControlElementToFormField(const WebFormControlElement& element,
|
| - ExtractMask extract_mask,
|
| - FormFieldData* field) {
|
| +void WebFormControlElementToFormField(
|
| + const WebFormControlElement& element,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| + ExtractMask extract_mask,
|
| + FormFieldData* field) {
|
| DCHECK(field);
|
| DCHECK(!element.isNull());
|
| CR_DEFINE_STATIC_LOCAL(WebString, kAutocomplete, ("autocomplete"));
|
| @@ -1387,6 +1395,13 @@ void WebFormControlElementToFormField(const WebFormControlElement& element,
|
| if (element.hasAttribute(kClass))
|
| field->css_classes = element.getAttribute(kClass);
|
|
|
| + if (field_value_and_properties_map) {
|
| + FieldValueAndPropertiesMaskMap::const_iterator it =
|
| + field_value_and_properties_map->find(element);
|
| + if (it != field_value_and_properties_map->end())
|
| + field->properties_mask = it->second.second;
|
| + }
|
| +
|
| if (!IsAutofillableElement(element))
|
| return;
|
|
|
| @@ -1457,6 +1472,7 @@ void WebFormControlElementToFormField(const WebFormControlElement& element,
|
| bool WebFormElementToFormData(
|
| const blink::WebFormElement& form_element,
|
| const blink::WebFormControlElement& form_control_element,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| ExtractMask extract_mask,
|
| FormData* form,
|
| FormFieldData* field) {
|
| @@ -1477,9 +1493,9 @@ bool WebFormElementToFormData(
|
| form_element.getFormControlElements(control_elements);
|
|
|
| std::vector<blink::WebElement> dummy_fieldset;
|
| - return FormOrFieldsetsToFormData(&form_element, &form_control_element,
|
| - dummy_fieldset, control_elements,
|
| - extract_mask, form, field);
|
| + return FormOrFieldsetsToFormData(
|
| + &form_element, &form_control_element, dummy_fieldset, control_elements,
|
| + field_value_and_properties_map, extract_mask, form, field);
|
| }
|
|
|
| std::vector<WebFormControlElement> GetUnownedFormFieldElements(
|
| @@ -1532,8 +1548,8 @@ bool UnownedCheckoutFormElementsAndFieldSetsToFormData(
|
| if (!lang.empty() &&
|
| !base::StartsWith(lang, "en", base::CompareCase::INSENSITIVE_ASCII)) {
|
| return UnownedFormElementsAndFieldSetsToFormData(
|
| - fieldsets, control_elements, element, document, extract_mask, form,
|
| - field);
|
| + fieldsets, control_elements, element, document, nullptr, extract_mask,
|
| + form, field);
|
| }
|
|
|
| // A potential problem is that this only checks document.title(), but should
|
| @@ -1567,8 +1583,8 @@ bool UnownedCheckoutFormElementsAndFieldSetsToFormData(
|
| form->is_formless_checkout = true;
|
| // Found a keyword: treat this as an unowned form.
|
| return UnownedFormElementsAndFieldSetsToFormData(
|
| - fieldsets, control_elements, element, document, extract_mask, form,
|
| - field);
|
| + fieldsets, control_elements, element, document, nullptr, extract_mask,
|
| + form, field);
|
| }
|
| }
|
|
|
| @@ -1586,8 +1602,8 @@ bool UnownedCheckoutFormElementsAndFieldSetsToFormData(
|
| return false;
|
|
|
| return UnownedFormElementsAndFieldSetsToFormData(
|
| - fieldsets, elements_with_autocomplete, element, document, extract_mask,
|
| - form, field);
|
| + fieldsets, elements_with_autocomplete, element, document, nullptr,
|
| + extract_mask, form, field);
|
| }
|
|
|
| bool UnownedPasswordFormElementsAndFieldSetsToFormData(
|
| @@ -1595,12 +1611,13 @@ bool UnownedPasswordFormElementsAndFieldSetsToFormData(
|
| const std::vector<blink::WebFormControlElement>& control_elements,
|
| const blink::WebFormControlElement* element,
|
| const blink::WebDocument& document,
|
| + const FieldValueAndPropertiesMaskMap* field_value_and_properties_map,
|
| ExtractMask extract_mask,
|
| FormData* form,
|
| FormFieldData* field) {
|
| return UnownedFormElementsAndFieldSetsToFormData(
|
| - fieldsets, control_elements, element, document, extract_mask, form,
|
| - field);
|
| + fieldsets, control_elements, element, document,
|
| + field_value_and_properties_map, extract_mask, form, field);
|
| }
|
|
|
|
|
| @@ -1624,11 +1641,8 @@ bool FindFormAndFieldForFormControlElement(const WebFormControlElement& element,
|
| form, field);
|
| }
|
|
|
| - return WebFormElementToFormData(form_element,
|
| - element,
|
| - extract_mask,
|
| - form,
|
| - field);
|
| + return WebFormElementToFormData(form_element, element, nullptr, extract_mask,
|
| + form, field);
|
| }
|
|
|
| void FillForm(const FormData& form, const WebFormControlElement& element) {
|
|
|