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

Side by Side Diff: components/autofill/content/renderer/autofill_agent.cc

Issue 1455093004: [Autofill] Remove datalist flash when there is an existing entry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initial Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/autofill/content/renderer/autofill_agent.h" 5 #include "components/autofill/content/renderer/autofill_agent.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/i18n/case_conversion.h" 10 #include "base/i18n/case_conversion.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 using blink::WebUserGestureIndicator; 71 using blink::WebUserGestureIndicator;
72 using blink::WebVector; 72 using blink::WebVector;
73 73
74 namespace autofill { 74 namespace autofill {
75 75
76 namespace { 76 namespace {
77 77
78 // Gets all the data list values (with corresponding label) for the given 78 // Gets all the data list values (with corresponding label) for the given
79 // element. 79 // element.
80 void GetDataListSuggestions(const WebInputElement& element, 80 void GetDataListSuggestions(const WebInputElement& element,
81 bool ignore_current_value,
82 std::vector<base::string16>* values, 81 std::vector<base::string16>* values,
83 std::vector<base::string16>* labels) { 82 std::vector<base::string16>* labels) {
84 WebElementCollection options = element.dataListOptions(); 83 WebElementCollection options = element.dataListOptions();
85 if (options.isNull()) 84 if (options.isNull())
86 return; 85 return;
87 86
88 base::string16 prefix; 87 // If the field accepts multiple email addresses, filter only on the last one.
89 if (!ignore_current_value) { 88 base::string16 prefix = element.editingValue();
90 prefix = element.editingValue(); 89 if (element.isMultiple() && element.isEmailField()) {
91 if (element.isMultiple() && element.isEmailField()) { 90 const base::char16 comma[2] = { ',', 0 };
92 const base::char16 comma[2] = { ',', 0 }; 91 std::vector<base::string16> parts = base::SplitString(
93 std::vector<base::string16> parts = base::SplitString( 92 prefix, comma, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
vabr (Chromium) 2015/11/19 16:31:20 optional: comma -> ASCIITOUTF16(",")
Mathieu 2015/11/19 16:59:42 Done.
94 prefix, comma, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 93 if (parts.size() > 0) {
vabr (Chromium) 2015/11/19 16:31:20 optional: !parts.empty() (This is similar to usin
Evan Stade 2015/11/19 16:45:12 I don't see how it's similar to that one, because
vabr (Chromium) 2015/11/19 16:50:24 Sorry that I was not clear. I meant using .empty()
Mathieu 2015/11/19 16:59:42 Done.
95 if (parts.size() > 0) { 94 base::TrimWhitespace(parts[parts.size() - 1], base::TRIM_LEADING,
96 base::TrimWhitespace(parts[parts.size() - 1], base::TRIM_LEADING, 95 &prefix);
97 &prefix);
98 }
99 } 96 }
100 } 97 }
98
99 // Prefix filtering.
101 prefix = base::i18n::ToLower(prefix); 100 prefix = base::i18n::ToLower(prefix);
102 for (WebOptionElement option = options.firstItem().to<WebOptionElement>(); 101 for (WebOptionElement option = options.firstItem().to<WebOptionElement>();
103 !option.isNull(); option = options.nextItem().to<WebOptionElement>()) { 102 !option.isNull(); option = options.nextItem().to<WebOptionElement>()) {
104 if (!base::StartsWith(base::i18n::ToLower(base::string16(option.value())), 103 if (!base::StartsWith(base::i18n::ToLower(base::string16(option.value())),
105 prefix, base::CompareCase::SENSITIVE) || 104 prefix, base::CompareCase::SENSITIVE) ||
106 !element.isValidValue(option.value())) 105 !element.isValidValue(option.value()))
107 continue; 106 continue;
108 107
109 values->push_back(option.value()); 108 values->push_back(option.value());
110 if (option.value() != option.label()) 109 if (option.value() != option.label())
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 gfx::RectF bounding_box_scaled = form_util::GetScaledBoundingBox( 731 gfx::RectF bounding_box_scaled = form_util::GetScaledBoundingBox(
733 render_frame()->GetRenderView()->GetWebView()->pageScaleFactor(), 732 render_frame()->GetRenderView()->GetWebView()->pageScaleFactor(),
734 &element_); 733 &element_);
735 734
736 std::vector<base::string16> data_list_values; 735 std::vector<base::string16> data_list_values;
737 std::vector<base::string16> data_list_labels; 736 std::vector<base::string16> data_list_labels;
738 const WebInputElement* input_element = toWebInputElement(&element); 737 const WebInputElement* input_element = toWebInputElement(&element);
739 if (input_element) { 738 if (input_element) {
740 // Find the datalist values and send them to the browser process. 739 // Find the datalist values and send them to the browser process.
741 GetDataListSuggestions(*input_element, 740 GetDataListSuggestions(*input_element,
742 datalist_only,
743 &data_list_values, 741 &data_list_values,
744 &data_list_labels); 742 &data_list_labels);
745 TrimStringVectorForIPC(&data_list_values); 743 TrimStringVectorForIPC(&data_list_values);
746 TrimStringVectorForIPC(&data_list_labels); 744 TrimStringVectorForIPC(&data_list_labels);
747 } 745 }
748 746
749 is_popup_possibly_visible_ = true; 747 is_popup_possibly_visible_ = true;
750 Send(new AutofillHostMsg_SetDataList(routing_id(), 748 Send(new AutofillHostMsg_SetDataList(routing_id(),
751 data_list_values, 749 data_list_values,
752 data_list_labels)); 750 data_list_labels));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 829
832 void AutofillAgent::LegacyAutofillAgent::OnDestruct() { 830 void AutofillAgent::LegacyAutofillAgent::OnDestruct() {
833 // No-op. Don't delete |this|. 831 // No-op. Don't delete |this|.
834 } 832 }
835 833
836 void AutofillAgent::LegacyAutofillAgent::FocusChangeComplete() { 834 void AutofillAgent::LegacyAutofillAgent::FocusChangeComplete() {
837 agent_->FocusChangeComplete(); 835 agent_->FocusChangeComplete();
838 } 836 }
839 837
840 } // namespace autofill 838 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698