Chromium Code Reviews| Index: chrome/renderer/autofill/autofill_agent.cc |
| diff --git a/chrome/renderer/autofill/autofill_agent.cc b/chrome/renderer/autofill/autofill_agent.cc |
| index f293635e2f12f19b1138d00a1f81ae2c817d37e4..fb609503e0d37e42db12cb3c621ee7af18a8beac 100644 |
| --- a/chrome/renderer/autofill/autofill_agent.cc |
| +++ b/chrome/renderer/autofill/autofill_agent.cc |
| @@ -19,6 +19,7 @@ |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| #include "ui/base/keycodes/keyboard_codes.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -59,6 +60,7 @@ AutofillAgent::AutofillAgent( |
| suggestions_clear_index_(-1), |
| suggestions_options_index_(-1), |
| has_shown_autofill_popup_for_current_edit_(false), |
| + has_external_delegate_(false), |
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
| render_view->GetWebView()->setAutofillClient(this); |
| } |
| @@ -74,6 +76,8 @@ bool AutofillAgent::OnMessageReceived(const IPC::Message& message) { |
| OnFieldTypePredictionsAvailable) |
| IPC_MESSAGE_HANDLER(AutofillMsg_SelectAutofillSuggestionAtIndex, |
| OnSelectAutofillSuggestionAtIndex) |
| + IPC_MESSAGE_HANDLER(AutofillMsg_HasExternalDelegate, |
| + HasExternalDelegate) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -124,6 +128,9 @@ bool AutofillAgent::InputElementClicked(const WebInputElement& element, |
| } |
| bool AutofillAgent::InputElementLostFocus() { |
| + if (has_external_delegate_) |
| + Send(new AutofillDelegateMsg_HideAutofillPopup(routing_id())); |
| + |
| return false; |
| } |
| @@ -252,6 +259,8 @@ void AutofillAgent::OnSuggestionsReturned(int query_id, |
| if (values.empty()) { |
| // No suggestions, any popup currently showing is obsolete. |
| web_view->hidePopups(); |
| + if (has_external_delegate_) |
| + Send(new AutofillDelegateMsg_HideAutofillPopup(routing_id())); |
|
Ilya Sherman
2011/11/07 21:48:49
This call shouldn't be necessary -- all the releva
csharp1
2011/11/08 19:59:00
Done.
|
| return; |
| } |
| @@ -315,11 +324,30 @@ void AutofillAgent::OnSuggestionsReturned(int query_id, |
| separator_index = values.size(); |
| } |
| - // Send to WebKit for display. |
| if (!v.empty() && !autofill_query_element_.isNull() && |
| autofill_query_element_.isFocusable()) { |
| - web_view->applyAutofillSuggestions( |
| - autofill_query_element_, v, l, i, ids, separator_index); |
| + if (has_external_delegate_) { |
| + // Send to an external delegate for display. |
| + WebKit::WebRect autofill_element_rect = |
| + autofill_query_element_.getRect(); |
| + |
| + Send(new AutofillDelegateMsg_AutofillElementBounds( |
| + routing_id(), |
| + autofill_element_rect.x, |
| + autofill_element_rect.y, |
| + autofill_element_rect.width, |
| + autofill_element_rect.height)); |
| + |
| + Send(new AutofillDelegateMsg_ShowAutofillSuggestions( |
| + routing_id(), query_id, v, l, i, ids)); |
|
Ilya Sherman
2011/11/07 21:48:49
We'll need to rework how warnings are handled; but
csharp1
2011/11/08 19:59:00
So if I understand correctly, you are suggesting t
Ilya Sherman
2011/11/08 21:06:16
Right. Once the transition to the browser-side UI
csharp
2011/11/09 16:18:37
Ok, I've added a todo to copy the logic over. I qu
|
| + } else { |
| + // Send to WebKit for display. |
| + web_view->applyAutofillSuggestions( |
| + autofill_query_element_, v, l, i, ids, separator_index); |
| + } |
| + } else { |
| + if (has_external_delegate_) |
| + Send(new AutofillDelegateMsg_HideAutofillPopup(routing_id())); |
| } |
| Send(new AutofillHostMsg_DidShowAutofillSuggestions( |
| @@ -362,6 +390,10 @@ void AutofillAgent::OnSelectAutofillSuggestionAtIndex(int listIndex) { |
| // render_view()->webview()->selectAutofillSuggestionAtIndex(listIndex); |
| } |
| +void AutofillAgent::HasExternalDelegate(bool has_external_delegate) { |
| + has_external_delegate_ = has_external_delegate; |
| +} |
| + |
| void AutofillAgent::ShowSuggestions(const WebInputElement& element, |
| bool autofill_on_empty_values, |
| bool requires_caret_at_end, |