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

Unified Diff: chrome/browser/autofill/autofill_external_delegate.cc

Issue 10443084: Add Datalist Support to New Autofill UI (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 7 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: chrome/browser/autofill/autofill_external_delegate.cc
diff --git a/chrome/browser/autofill/autofill_external_delegate.cc b/chrome/browser/autofill/autofill_external_delegate.cc
index 1a7d2e56c42dcd5a72c4140fe6b34194719a982c..2dc27624f68a210fcbcf061941d888ebed0e30e1 100644
--- a/chrome/browser/autofill/autofill_external_delegate.cc
+++ b/chrome/browser/autofill/autofill_external_delegate.cc
@@ -45,7 +45,9 @@ void AutofillExternalDelegate::SelectAutofillSuggestionAtIndex(int unique_id) {
if (unique_id == WebAutofillClient::MenuItemIDPasswordEntry)
return;
- FillAutofillFormData(unique_id, true);
+ // Only preview the data if it is a profile.
+ if (unique_id > 0)
+ FillAutofillFormData(unique_id, true);
}
void AutofillExternalDelegate::OnQuery(int query_id,
@@ -70,17 +72,33 @@ void AutofillExternalDelegate::OnSuggestionsReturned(
if (query_id != autofill_query_id_)
return;
- if (values.empty()) {
+ // List any data list values at the start.
+ std::vector<string16> v(data_list_values_);
+ std::vector<string16> l(data_list_labels_);
+ std::vector<string16> i(data_list_icons_);
+ std::vector<int> ids(data_list_unique_ids_);
+
+ // If there are both <datalist> items and Autofill suggestions, add a
+ // separator between them.
+ if (!values.empty() && !v.empty()) {
+ v.push_back(string16());
+ l.push_back(string16());
+ i.push_back(string16());
+ ids.push_back(WebAutofillClient::MenuItemIDSeparator);
+ }
+
+ // Append the Autofill suggestions.
+ v.insert(v.end(), values.begin(), values.end());
+ l.insert(l.end(), labels.begin(), labels.end());
+ i.insert(i.end(), icons.begin(), icons.end());
+ ids.insert(ids.end(), unique_ids.begin(), unique_ids.end());
+
+ if (v.empty()) {
// No suggestions, any popup currently showing is obsolete.
HideAutofillPopup();
return;
}
- std::vector<string16> v(values);
- std::vector<string16> l(labels);
- std::vector<string16> i(icons);
- std::vector<int> ids(unique_ids);
-
// Add a separator to go between the values and menu items.
v.push_back(string16());
l.push_back(string16());
@@ -94,7 +112,8 @@ void AutofillExternalDelegate::OnSuggestionsReturned(
l.assign(1, string16());
i.assign(1, string16());
ids.assign(1, WebAutofillClient::MenuItemIDWarningMessage);
- } else if (ids[0] < 0 && ids.size() > 1) {
+ } else if (ids[0] == WebAutofillClient::MenuItemIDWarningMessage &&
Ilya Sherman 2012/05/30 21:55:43 ids[0] is no longer guaranteed to be the first Aut
csharp 2012/05/31 14:20:26 Done.
+ ids.size() > 1) {
// If we received a warning instead of suggestions from autofill but regular
// suggestions from autocomplete, don't show the autofill warning.
v.erase(v.begin());
@@ -104,7 +123,8 @@ void AutofillExternalDelegate::OnSuggestionsReturned(
}
// If we were about to show a warning and we shouldn't, don't.
- if (ids[0] < 0 && !display_warning_if_disabled_)
+ if (ids[0] == WebAutofillClient::MenuItemIDWarningMessage &&
+ !display_warning_if_disabled_)
return;
// Only include "Autofill Options" special menu item if we have Autofill
@@ -170,6 +190,17 @@ void AutofillExternalDelegate::OnShowPasswordSuggestions(
ApplyAutofillSuggestions(suggestions, empty, empty, password_ids);
}
+void AutofillExternalDelegate::SetCurrentDataListValues(
+ const std::vector<string16>& data_list_values,
+ const std::vector<string16>& data_list_labels,
+ const std::vector<string16>& data_list_icons,
+ const std::vector<int>& data_list_unique_ids) {
+ data_list_values_ = data_list_values;
+ data_list_labels_ = data_list_labels;
+ data_list_icons_ = data_list_icons;
+ data_list_unique_ids_ = data_list_unique_ids;
+}
Ilya Sherman 2012/05/30 21:55:43 Shouldn't this method also update the popup conten
csharp 2012/05/31 14:20:26 This method shouldn't ever get called when the pop
Ilya Sherman 2012/06/01 06:28:16 Ok. The DCHECK is probably good enough for now; b
csharp 2012/06/04 15:02:03 Had to replace the DCHECK with an if, since if you
+
void AutofillExternalDelegate::RemoveAutocompleteEntry(const string16& value) {
if (tab_contents_wrapper_) {
tab_contents_wrapper_->autocomplete_history_manager()->
@@ -197,23 +228,25 @@ bool AutofillExternalDelegate::DidAcceptAutofillSuggestions(
if (unique_id == WebAutofillClient::MenuItemIDWarningMessage)
return false;
+ RenderViewHost* host =
+ tab_contents_wrapper_->web_contents()->GetRenderViewHost();
+
if (unique_id == WebAutofillClient::MenuItemIDAutofillOptions) {
// User selected 'Autofill Options'.
autofill_manager_->OnShowAutofillDialog();
} else if (unique_id == WebAutofillClient::MenuItemIDClearForm) {
// User selected 'Clear form'.
- RenderViewHost* host =
- tab_contents_wrapper_->web_contents()->GetRenderViewHost();
host->Send(new AutofillMsg_ClearForm(host->GetRoutingID()));
} else if (unique_id == WebAutofillClient::MenuItemIDPasswordEntry &&
password_autofill_manager_.DidAcceptAutofillSuggestion(
autofill_query_field_, value)) {
// DidAcceptAutofillSuggestion has already handled the work to fill in
// the page as required.
+ } else if (unique_id == WebAutofillClient::MenuItemIDDataListEntry) {
+ host->Send(new AutofillMsg_AcceptDataListSuggestion(host->GetRoutingID(),
+ value));
} else if (unique_id == WebAutofillClient::MenuItemIDAutocompleteEntry) {
// User selected an Autocomplete, so we fill directly.
- RenderViewHost* host =
- tab_contents_wrapper_->web_contents()->GetRenderViewHost();
host->Send(new AutofillMsg_SetNodeText(
host->GetRoutingID(),
value));

Powered by Google App Engine
This is Rietveld 408576698