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

Unified Diff: components/autofill/renderer/autofill_agent.cc

Issue 13264002: Requery the autofill server when forms and input fields are dynamically added. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fun with merging Created 7 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
« no previous file with comments | « components/autofill/renderer/autofill_agent.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/renderer/autofill_agent.cc
diff --git a/components/autofill/renderer/autofill_agent.cc b/components/autofill/renderer/autofill_agent.cc
index beefed0615d9fa43558b617017fa0981e3a64538..fa2b8a8d84be1e8ca2b80cb0f7cc84d1007bd031 100644
--- a/components/autofill/renderer/autofill_agent.cc
+++ b/components/autofill/renderer/autofill_agent.cc
@@ -151,6 +151,8 @@ AutofillAgent::AutofillAgent(content::RenderView* render_view,
has_shown_autofill_popup_for_current_edit_(false),
did_set_node_text_(false),
autocheckout_click_in_progress_(false),
+ is_autocheckout_supported_(false),
+ has_new_forms_for_browser_(false),
try_to_show_autocheckout_bubble_(false),
ignore_text_changes_(false),
weak_ptr_factory_(this) {
@@ -214,11 +216,14 @@ void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) {
form_cache_.ExtractForms(*frame, &forms);
}
+ autofill::FormsSeenState state = has_more_forms ?
+ autofill::PARTIAL_FORMS_SEEN : autofill::NO_SPECIAL_FORMS_SEEN;
+
// Always communicate to browser process for topmost frame.
if (!forms.empty() || !frame->parent()) {
Send(new AutofillHostMsg_FormsSeen(routing_id(), forms,
forms_seen_timestamp_,
- has_more_forms));
+ state));
}
}
@@ -736,7 +741,8 @@ void AutofillAgent::OnGetAllForms() {
// Report to AutofillManager that all forms are being sent.
Send(new AutofillHostMsg_FormsSeen(routing_id(), forms,
- forms_seen_timestamp_, false));
+ forms_seen_timestamp_,
+ NO_SPECIAL_FORMS_SEEN));
}
void AutofillAgent::OnRequestAutocompleteResult(
@@ -783,7 +789,10 @@ void AutofillAgent::OnFillFormsAndClick(
}
void AutofillAgent::OnAutocheckoutSupported() {
+ is_autocheckout_supported_ = true;
try_to_show_autocheckout_bubble_ = true;
+ if (has_new_forms_for_browser_)
+ MaybeSendDynamicFormsSeen();
MaybeShowAutocheckoutBubble();
}
@@ -945,4 +954,38 @@ void AutofillAgent::HideHostAutofillUi() {
Send(new AutofillHostMsg_HideAutofillUi(routing_id()));
}
+void AutofillAgent::didAssociateFormControls(
+ const WebKit::WebVector<WebKit::WebNode>& nodes) {
+ for (size_t i = 0; i < nodes.size(); ++i) {
+ WebKit::WebNode node = nodes[i];
+ if (node.document().frame() == topmost_frame_) {
+ forms_seen_timestamp_ = base::TimeTicks::Now();
+ has_new_forms_for_browser_ = true;
+ break;
+ }
+ }
+
+ if (has_new_forms_for_browser_ && is_autocheckout_supported_)
+ MaybeSendDynamicFormsSeen();
+}
+
+void AutofillAgent::MaybeSendDynamicFormsSeen() {
+ has_new_forms_for_browser_ = false;
+ form_elements_.clear();
+ std::vector<FormData> forms;
+ // This will only be called for Autocheckout flows, so send all forms to
+ // save an IPC.
+ form_cache_.ExtractFormsAndFormElements(
+ *topmost_frame_, 0, &forms, &form_elements_);
+ autofill::FormsSeenState state = autofill::DYNAMIC_FORMS_SEEN;
+
+ if (!forms.empty()) {
+ if (click_timer_.IsRunning())
+ click_timer_.Stop();
+ Send(new AutofillHostMsg_FormsSeen(routing_id(), forms,
+ forms_seen_timestamp_,
+ state));
+ }
+}
+
} // namespace autofill
« no previous file with comments | « components/autofill/renderer/autofill_agent.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698