diff options
Diffstat (limited to 'chrome/renderer/autofill/autofill_agent.cc')
-rw-r--r-- | chrome/renderer/autofill/autofill_agent.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/chrome/renderer/autofill/autofill_agent.cc b/chrome/renderer/autofill/autofill_agent.cc index 0e104fc7..f5c3bc8 100644 --- a/chrome/renderer/autofill/autofill_agent.cc +++ b/chrome/renderer/autofill/autofill_agent.cc @@ -180,10 +180,14 @@ void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) { // The document has now been fully loaded. Scan for forms to be sent up to // the browser. std::vector<FormData> forms; - form_cache_.ExtractForms(*frame, &forms); - if (!frame->parent()) + if (!frame->parent()) { topmost_frame_ = frame; + form_elements_.clear(); + form_cache_.ExtractFormsAndFormElements(*frame, &forms, &form_elements_); + } else { + form_cache_.ExtractForms(*frame, &forms); + } if (!forms.empty()) { Send(new AutofillHostMsg_FormsSeen(routing_id(), forms, @@ -657,9 +661,13 @@ void AutofillAgent::OnRequestAutocompleteResult( } void AutofillAgent::OnFillFormsAndClick( - const std::vector<FormData>& form_data, + const std::vector<FormData>& forms, const WebElementDescriptor& click_element_descriptor) { - // TODO(ramankk): Implement form filling. + DCHECK_EQ(forms.size(), form_elements_.size()); + + // Fill the form. + for (size_t i = 0; i < forms.size(); ++i) + FillFormIncludingNonFocusableElements(forms[i], form_elements_[i]); // It's possible that clicking the element to proceed in an Autocheckout // flow will not actually proceed to the next step in the flow, e.g. there |