Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(753)

Unified Diff: components/autofill/content/renderer/form_cache.cc

Issue 242613006: [Autofill] Enable Autofill for dynamically created forms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test fix Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/autofill/content/renderer/form_cache.cc
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc
index 8e3fc33a9acce657c46ebbaf2b2a7a0222a82bca..bc5519b2fd71e67b836150a0b0893629174ca1db 100644
--- a/components/autofill/content/renderer/form_cache.cc
+++ b/components/autofill/content/renderer/form_cache.cc
@@ -20,6 +20,7 @@
#include "third_party/WebKit/public/web/WebFormElement.h"
#include "third_party/WebKit/public/web/WebInputElement.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "third_party/WebKit/public/web/WebNodeList.h"
#include "third_party/WebKit/public/web/WebSelectElement.h"
#include "third_party/WebKit/public/web/WebTextAreaElement.h"
#include "ui/base/l10n/l10n_util.h"
@@ -68,22 +69,11 @@ FormCache::FormCache() {
FormCache::~FormCache() {
}
-void FormCache::ExtractForms(const WebFrame& frame,
- std::vector<FormData>* forms) {
- ExtractFormsAndFormElements(frame, kRequiredAutofillFields, forms, NULL);
-}
-
-bool FormCache::ExtractFormsAndFormElements(
- const WebFrame& frame,
- size_t minimum_required_fields,
- std::vector<FormData>* forms,
- std::vector<WebFormElement>* web_form_elements) {
- // Reset the cache for this frame.
- ResetFrame(frame);
-
+void FormCache::ExtractNewForms(const WebFrame& frame,
+ std::vector<FormData>* forms) {
WebDocument document = frame.document();
if (document.isNull())
- return false;
+ return;
web_documents_.insert(document);
@@ -91,7 +81,6 @@ bool FormCache::ExtractFormsAndFormElements(
document.forms(web_forms);
size_t num_fields_seen = 0;
- bool has_skipped_forms = false;
for (size_t i = 0; i < web_forms.size(); ++i) {
WebFormElement form_element = web_forms[i];
@@ -128,9 +117,8 @@ bool FormCache::ExtractFormsAndFormElements(
// To avoid overly expensive computation, we impose a minimum number of
// allowable fields. The corresponding maximum number of allowable fields
// is imposed by WebFormElementToFormData().
- if (num_editable_elements < minimum_required_fields &&
+ if (num_editable_elements < kRequiredAutofillFields &&
control_elements.size() > 0) {
- has_skipped_forms = true;
continue;
}
@@ -147,17 +135,12 @@ bool FormCache::ExtractFormsAndFormElements(
if (num_fields_seen > kMaxParseableFields)
break;
- if (form.fields.size() >= minimum_required_fields) {
+ if (form.fields.size() >= kRequiredAutofillFields &&
+ !parsed_forms_[&frame].count(form)) {
forms->push_back(form);
- if (web_form_elements)
- web_form_elements->push_back(form_element);
- } else {
- has_skipped_forms = true;
+ parsed_forms_[&frame].insert(form);
}
}
-
- // Return true if there are any WebFormElements skipped, else false.
- return has_skipped_forms;
}
void FormCache::ResetFrame(const WebFrame& frame) {
@@ -175,6 +158,7 @@ void FormCache::ResetFrame(const WebFrame& frame) {
web_documents_.erase(*it);
}
+ parsed_forms_[&frame].clear();
RemoveOldElements(frame, &initial_select_values_);
RemoveOldElements(frame, &initial_checked_state_);
}
« no previous file with comments | « components/autofill/content/renderer/form_cache.h ('k') | components/autofill/core/browser/autofill_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698