summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/autofill_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/autofill_helper.cc')
-rw-r--r--chrome/renderer/autofill_helper.cc64
1 files changed, 34 insertions, 30 deletions
diff --git a/chrome/renderer/autofill_helper.cc b/chrome/renderer/autofill_helper.cc
index 2f8b146..f7fd7a2 100644
--- a/chrome/renderer/autofill_helper.cc
+++ b/chrome/renderer/autofill_helper.cc
@@ -34,18 +34,6 @@ namespace {
// (so to avoid sending long strings through IPC).
const size_t kMaximumTextSizeForAutoFill = 1000;
-
-// |node| must correspond to a form field.
-// Returns true if |node| is auto-filled.
-bool NodeIsAutoFilled(const WebKit::WebNode& node) {
- const WebFormControlElement& element =
- reinterpret_cast<const WebFormControlElement&>(node);
-
- WebInputElement input_element =
- const_cast<WebFormControlElement&>(element).to<WebInputElement>();
- return input_element.isAutofilled();
-}
-
} // namespace
AutoFillHelper::AutoFillHelper(RenderView* render_view)
@@ -58,8 +46,8 @@ AutoFillHelper::AutoFillHelper(RenderView* render_view)
suggestions_options_index_(-1) {
}
-void AutoFillHelper::RemoveAutocompleteSuggestion(
- const WebKit::WebString& name, const WebKit::WebString& value) {
+void AutoFillHelper::RemoveAutocompleteSuggestion(const WebString& name,
+ const WebString& value) {
// The index of clear & options will have shifted down.
if (suggestions_clear_index_ != -1)
suggestions_clear_index_--;
@@ -192,6 +180,8 @@ void AutoFillHelper::FormDataFilled(int query_id,
void AutoFillHelper::DidSelectAutoFillSuggestion(const WebNode& node,
int unique_id) {
+ DCHECK_GE(unique_id, 0);
+
DidClearAutoFillSelection(node);
FillAutoFillFormData(node, unique_id, AUTOFILL_PREVIEW);
}
@@ -303,20 +293,13 @@ void AutoFillHelper::QueryAutoFillSuggestions(
autofill_query_node_ = node;
display_warning_if_disabled_ = display_warning_if_disabled;
- const WebFormControlElement& element = node.toConst<WebFormControlElement>();
+ webkit_glue::FormData form;
webkit_glue::FormField field;
- FormManager::WebFormControlElementToFormField(
- element, FormManager::EXTRACT_VALUE, &field);
-
- // WebFormControlElementToFormField does not scrape the DOM for the field
- // label, so find the label here.
- // TODO(jhawkins): Add form and field identities so we can use the cached form
- // data in FormManager.
- field.set_label(FormManager::LabelForElement(element));
+ if (!FindFormAndFieldForNode(node, &form, &field))
+ return;
- bool field_autofilled = NodeIsAutoFilled(node);
render_view_->Send(new ViewHostMsg_QueryFormFieldAutoFill(
- render_view_->routing_id(), autofill_query_id_, field_autofilled, field));
+ render_view_->routing_id(), autofill_query_id_, form, field));
}
void AutoFillHelper::FillAutoFillFormData(const WebNode& node,
@@ -326,15 +309,14 @@ void AutoFillHelper::FillAutoFillFormData(const WebNode& node,
autofill_query_id_ = query_counter++;
webkit_glue::FormData form;
- const WebInputElement element = node.toConst<WebInputElement>();
- if (!form_manager_.FindFormWithFormControlElement(
- element, FormManager::REQUIRE_NONE, &form))
+ webkit_glue::FormField field;
+ if (!FindFormAndFieldForNode(node, &form, &field))
return;
autofill_action_ = action;
- was_query_node_autofilled_ = element.isAutofilled();
+ was_query_node_autofilled_ = field.is_autofilled();
render_view_->Send(new ViewHostMsg_FillAutoFillFormData(
- render_view_->routing_id(), autofill_query_id_, form, unique_id));
+ render_view_->routing_id(), autofill_query_id_, form, field, unique_id));
}
void AutoFillHelper::SendForms(WebFrame* frame) {
@@ -360,3 +342,25 @@ void AutoFillHelper::SendForms(WebFrame* frame) {
forms));
}
}
+
+bool AutoFillHelper::FindFormAndFieldForNode(const WebNode& node,
+ webkit_glue::FormData* form,
+ webkit_glue::FormField* field) {
+ const WebInputElement& element = node.toConst<WebInputElement>();
+ if (!form_manager_.FindFormWithFormControlElement(element,
+ FormManager::REQUIRE_NONE,
+ form))
+ return false;
+
+ FormManager::WebFormControlElementToFormField(element,
+ FormManager::EXTRACT_VALUE,
+ field);
+
+ // WebFormControlElementToFormField does not scrape the DOM for the field
+ // label, so find the label here.
+ // TODO(jhawkins): Add form and field identities so we can use the cached form
+ // data in FormManager.
+ field->set_label(FormManager::LabelForElement(element));
+
+ return true;
+}