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

Unified Diff: components/autofill/content/renderer/form_autofill_util.cc

Issue 2148303005: [Password Generation] Sends the flag whether a field has nonempty user input (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed a typo Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698