summaryrefslogtreecommitdiffstats
path: root/components/autofill/content/renderer/form_cache.cc
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-04 18:34:41 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-04 18:34:41 +0000
commit46240ac35d0a84f6f2905b02a4e8cc7554962410 (patch)
tree7b3bd812e2093b00f57c5959f4ac30d4da5bfbbc /components/autofill/content/renderer/form_cache.cc
parent8638b8865464d4b0d2518a2186a1a1756a5b8544 (diff)
downloadchromium_src-46240ac35d0a84f6f2905b02a4e8cc7554962410.zip
chromium_src-46240ac35d0a84f6f2905b02a4e8cc7554962410.tar.gz
chromium_src-46240ac35d0a84f6f2905b02a4e8cc7554962410.tar.bz2
Revert of [Autofill] Enable Autofill for dynamically created forms. (https://codereview.chromium.org/242613006/)
Reason for revert: Broke DataDrivenHeuristics03 on the Mac debug bots: http://build.chromium.org/p/chromium.mac/buildstatus?builder=Mac%2010.6%20Tests%20%28dbg%29%284%29&number=40752 http://build.chromium.org/p/chromium.mac/buildstatus?builder=Mac%2010.7%20Tests%20%28dbg%29%284%29&number=23124 Original issue's description: > [Autofill] Enable Autofill for dynamically created forms. > > The appropriate hooks with Blink already exist, this change just causes > the browser to be informed whenever a form is added or changed. > > BUG=360904 > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=268107 NOTRY=true NOTREECHECKS=true TBR=tsepez,isherman,gcasto Review URL: https://codereview.chromium.org/265203002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268113 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/autofill/content/renderer/form_cache.cc')
-rw-r--r--components/autofill/content/renderer/form_cache.cc34
1 files changed, 25 insertions, 9 deletions
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc
index bc5519b..8e3fc33 100644
--- a/components/autofill/content/renderer/form_cache.cc
+++ b/components/autofill/content/renderer/form_cache.cc
@@ -20,7 +20,6 @@
#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"
@@ -69,11 +68,22 @@ FormCache::FormCache() {
FormCache::~FormCache() {
}
-void FormCache::ExtractNewForms(const WebFrame& frame,
- std::vector<FormData>* forms) {
+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);
+
WebDocument document = frame.document();
if (document.isNull())
- return;
+ return false;
web_documents_.insert(document);
@@ -81,6 +91,7 @@ void FormCache::ExtractNewForms(const WebFrame& frame,
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];
@@ -117,8 +128,9 @@ void FormCache::ExtractNewForms(const WebFrame& frame,
// 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 < kRequiredAutofillFields &&
+ if (num_editable_elements < minimum_required_fields &&
control_elements.size() > 0) {
+ has_skipped_forms = true;
continue;
}
@@ -135,12 +147,17 @@ void FormCache::ExtractNewForms(const WebFrame& frame,
if (num_fields_seen > kMaxParseableFields)
break;
- if (form.fields.size() >= kRequiredAutofillFields &&
- !parsed_forms_[&frame].count(form)) {
+ if (form.fields.size() >= minimum_required_fields) {
forms->push_back(form);
- parsed_forms_[&frame].insert(form);
+ if (web_form_elements)
+ web_form_elements->push_back(form_element);
+ } else {
+ has_skipped_forms = true;
}
}
+
+ // Return true if there are any WebFormElements skipped, else false.
+ return has_skipped_forms;
}
void FormCache::ResetFrame(const WebFrame& frame) {
@@ -158,7 +175,6 @@ void FormCache::ResetFrame(const WebFrame& frame) {
web_documents_.erase(*it);
}
- parsed_forms_[&frame].clear();
RemoveOldElements(frame, &initial_select_values_);
RemoveOldElements(frame, &initial_checked_state_);
}