Index: components/autofill/core/browser/autofill_manager.cc |
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc |
index 031691e3692fa0a22188f59bf5b926254b7dd435..962dffd1b951aebba3c0f90a9fca1b8c96cdfba5 100644 |
--- a/components/autofill/core/browser/autofill_manager.cc |
+++ b/components/autofill/core/browser/autofill_manager.cc |
@@ -742,7 +742,24 @@ void AutofillManager::OnSetDataList(const std::vector<base::string16>& values, |
void AutofillManager::OnLoadedServerPredictions( |
const std::string& response_xml, |
- const std::vector<FormStructure*>& queried_forms) { |
+ const std::vector<std::string>& form_signatures) { |
+ // We obtain the current valid FormStructures represented by |
+ // |form_signatures|. We invert both lists because most recent forms are at |
+ // the end of the list. |
+ std::vector<FormStructure*> queried_forms; |
+ for (const std::string& signature : base::Reversed(form_signatures)) { |
+ for (FormStructure* cur_form : base::Reversed(form_structures_)) { |
+ if (cur_form->FormSignature() == signature) { |
+ queried_forms.push_back(cur_form); |
+ continue; |
+ } |
+ } |
+ } |
+ // If there are no current forms corresponding to the queried signatures, drop |
+ // the query response. |
+ if (queried_forms.empty()) |
+ return; |
+ |
// Parse and store the server predictions. |
FormStructure::ParseQueryResponse(response_xml, queried_forms, |
client_->GetRapporService()); |