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

Unified Diff: Source/core/html/HTMLSelectElement.cpp

Issue 138433002: Add Autofill preview support for <select> input fields (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update code as per keishi's review comment. Created 6 years, 9 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: Source/core/html/HTMLSelectElement.cpp
diff --git a/Source/core/html/HTMLSelectElement.cpp b/Source/core/html/HTMLSelectElement.cpp
index 6be5c079cccbc348acd6f9a648b0a4354870d240..1720cb51ed377dc105ab31df2135b30afdb2ddeb 100644
--- a/Source/core/html/HTMLSelectElement.cpp
+++ b/Source/core/html/HTMLSelectElement.cpp
@@ -253,6 +253,40 @@ void HTMLSelectElement::setValue(const String &value)
setSelectedIndex(-1);
}
+String HTMLSelectElement::suggestedValue() const
+{
+ const Vector<HTMLElement*>& items = listItems();
+ for (unsigned i = 0; i < items.size(); i++) {
tkent 2014/03/14 00:06:41 We prefer ++i.
ziran.sun 2014/03/14 11:32:37 Done.
+ if (items[i]->hasLocalName(optionTag) && toHTMLOptionElement(items[i])->value() == m_suggestedValue)
+ return m_suggestedValue;
+ }
+ return "";
+}
+
+void HTMLSelectElement::setSuggestedValue(const String& value)
+{
+ m_suggestedValue = value;
+
+ if (value.isNull()) {
+ setSuggestedIndex(-1);
+ return;
+ }
+
+ const Vector<HTMLElement*>& items = listItems();
+ unsigned optionIndex = 0;
+ for (unsigned i = 0; i < items.size(); i++) {
tkent 2014/03/14 00:06:41 Ditto.
ziran.sun 2014/03/14 11:32:37 Done.
+ if (items[i]->hasLocalName(optionTag)) {
+ if (toHTMLOptionElement(items[i])->value() == value) {
+ setSuggestedIndex(optionIndex);
+ return;
+ }
+ optionIndex++;
+ }
+ }
+
+ setSuggestedIndex(-1);
+}
+
bool HTMLSelectElement::isPresentationAttribute(const QualifiedName& name) const
{
if (name == alignAttr) {
@@ -795,6 +829,24 @@ void HTMLSelectElement::setSelectedIndex(int index)
selectOption(index, DeselectOtherOptions);
}
+int HTMLSelectElement::suggestedIndex() const
+{
+ return m_suggestedIndex;
+}
+
+void HTMLSelectElement::setSuggestedIndex(int suggestedIndex)
+{
+ m_suggestedIndex = suggestedIndex;
+
+ if (RenderObject* renderer = this->renderer()) {
+ renderer->updateFromElement();
+ if (renderer->isListBox())
+ toRenderListBox(renderer)->scrollToRevealElementAtListIndex(suggestedIndex);
+ }
+
+ setNeedsValidityCheck();
tkent 2014/03/14 00:06:41 I don't think validity check is necessary. Updatin
ziran.sun 2014/03/14 11:32:37 Done.
+}
+
void HTMLSelectElement::optionSelectionStateChanged(HTMLOptionElement* option, bool optionIsSelected)
{
ASSERT(option->ownerSelectElement() == this);

Powered by Google App Engine
This is Rietveld 408576698