summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/form_manager.cc
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-05 22:01:04 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-05 22:01:04 +0000
commitb715f7fea3d0a39e36b860a62010b89f1d6a1b12 (patch)
tree77dd1a6217e35cf44eb3b9c7fbda62bb48640edf /chrome/renderer/form_manager.cc
parentde56fa14154a5b7f263b75e55763f01c64e2d35e (diff)
downloadchromium_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.cc62
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())