diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-04 18:34:41 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-04 18:34:41 +0000 |
commit | 46240ac35d0a84f6f2905b02a4e8cc7554962410 (patch) | |
tree | 7b3bd812e2093b00f57c5959f4ac30d4da5bfbbc /components/autofill/content/renderer/form_cache.cc | |
parent | 8638b8865464d4b0d2518a2186a1a1756a5b8544 (diff) | |
download | chromium_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.cc | 34 |
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_); } |