diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-05 22:01:04 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-05 22:01:04 +0000 |
commit | b715f7fea3d0a39e36b860a62010b89f1d6a1b12 (patch) | |
tree | 77dd1a6217e35cf44eb3b9c7fbda62bb48640edf /chrome/renderer/form_manager.cc | |
parent | de56fa14154a5b7f263b75e55763f01c64e2d35e (diff) | |
download | chromium_src-b715f7fea3d0a39e36b860a62010b89f1d6a1b12.zip chromium_src-b715f7fea3d0a39e36b860a62010b89f1d6a1b12.tar.gz chromium_src-b715f7fea3d0a39e36b860a62010b89f1d6a1b12.tar.bz2 |
AutoFill: Implement WebFormElementToFormData and use this to send form data to
the AutoFillManager. Don't check field labels for equality until we parse
labels again.
BUG=40297
TEST=FormManagerTest.WebFormElementToFormData
Review URL: http://codereview.chromium.org/1609007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43657 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/form_manager.cc')
-rw-r--r-- | chrome/renderer/form_manager.cc | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/chrome/renderer/form_manager.cc b/chrome/renderer/form_manager.cc index 7063e97..3d313b6 100644 --- a/chrome/renderer/form_manager.cc +++ b/chrome/renderer/form_manager.cc @@ -67,11 +67,11 @@ void FormManager::WebFormControlElementToFormField( // TODO(jhawkins): In WebKit, move value() and setValue() to // WebFormControlElement. string16 value; - if (element.formControlType() == ASCIIToUTF16("text")) { + if (element.formControlType() == WebString::fromUTF8("text")) { const WebInputElement& input_element = element.toConstElement<WebInputElement>(); value = input_element.value(); - } else if (element.formControlType() == ASCIIToUTF16("select-one")) { + } else if (element.formControlType() == WebString::fromUTF8("select-one")) { // TODO(jhawkins): This is ugly. WebSelectElement::value() is a non-const // method. Look into fixing this on the WebKit side. WebFormControlElement& e = const_cast<WebFormControlElement&>(element); @@ -81,6 +81,53 @@ void FormManager::WebFormControlElementToFormField( field->set_value(value); } +// static +bool FormManager::WebFormElementToFormData(const WebFormElement& element, + RequirementsMask requirements, + FormData* form) { + DCHECK(form); + + const WebFrame* frame = element.frame(); + if (!frame) + return false; + + if (requirements & REQUIRE_AUTOCOMPLETE && !element.autoComplete()) + return false; + + form->name = element.name(); + form->method = element.method(); + form->origin = frame->url(); + form->action = frame->completeURL(element.action()); + + // If the completed URL is not valid, just use the action we get from + // WebKit. + if (!form->action.is_valid()) + form->action = GURL(element.action()); + + WebVector<WebFormControlElement> control_elements; + element.getFormControlElements(control_elements); + for (size_t i = 0; i < control_elements.size(); ++i) { + const WebFormControlElement& control_element = control_elements[i]; + + if (requirements & REQUIRE_AUTOCOMPLETE && + control_element.formControlType() == WebString::fromUTF8("text")) { + const WebInputElement& input_element = + control_element.toConstElement<WebInputElement>(); + if (!input_element.autoComplete()) + continue; + } + + if (requirements & REQUIRE_ELEMENTS_ENABLED && !control_element.isEnabled()) + continue; + + FormField field; + WebFormControlElementToFormField(control_element, &field); + form->fields.push_back(field); + } + + return !form->fields.empty(); +} + void FormManager::ExtractForms(const WebFrame* frame) { DCHECK(frame); @@ -253,13 +300,14 @@ bool FormManager::FillForm(const FormData& form) { DCHECK_EQ(form.fields[i].name(), iter->second.nameForAutofill()); if (!form.fields[i].value().empty() && - iter->second.formControlType() != ASCIIToUTF16("submit")) { - if (iter->second.formControlType() == ASCIIToUTF16("text")) { + iter->second.formControlType() != WebString::fromUTF8("submit")) { + if (iter->second.formControlType() == WebString::fromUTF8("text")) { WebInputElement input_element = iter->second.toElement<WebInputElement>(); input_element.setValue(form.fields[i].value()); input_element.setAutofilled(true); - } else if (iter->second.formControlType() == ASCIIToUTF16("select-one")) { + } else if (iter->second.formControlType() == + WebString::fromUTF8("select-one")) { WebSelectElement select_element = iter->second.toElement<WebSelectElement>(); select_element.setValue(form.fields[i].value()); @@ -292,7 +340,7 @@ bool FormManager::FormElementToFormData(const WebFrame* frame, form->origin = frame->url(); form->action = frame->completeURL(form_element->form_element.action()); - // If the completed ULR is not valid, just use the action we get from + // If the completed URL is not valid, just use the action we get from // WebKit. if (!form->action.is_valid()) form->action = GURL(form_element->form_element.action()); @@ -304,7 +352,7 @@ bool FormManager::FormElementToFormData(const WebFrame* frame, WebFormControlElement control_element = element_iter->second; if (requirements & REQUIRE_AUTOCOMPLETE && - control_element.formControlType() == ASCIIToUTF16("text")) { + control_element.formControlType() == WebString::fromUTF8("text")) { const WebInputElement& input_element = control_element.toConstElement<WebInputElement>(); if (!input_element.autoComplete()) |