Index: Source/core/html/HTMLSelectElement.cpp |
diff --git a/Source/core/html/HTMLSelectElement.cpp b/Source/core/html/HTMLSelectElement.cpp |
index 948371821b3da6c5f83a3d61a006dc199c9b5b3e..535b803c57269174be227ee004b7a3a18d8efb85 100644 |
--- a/Source/core/html/HTMLSelectElement.cpp |
+++ b/Source/core/html/HTMLSelectElement.cpp |
@@ -473,7 +473,7 @@ int HTMLSelectElement::nextValidIndex(int listIndex, SkipDirection direction, in |
int size = listItems.size(); |
for (listIndex += direction; listIndex >= 0 && listIndex < size; listIndex += direction) { |
--skip; |
- if (!listItems[listIndex]->isDisabledFormControl() && listItems[listIndex]->hasTagName(optionTag)) { |
+ if (!listItems[listIndex]->isDisabledFormControl() && isHTMLOptionElement(*listItems[listIndex])) { |
lastGoodIndex = listIndex; |
if (skip <= 0) |
break; |
@@ -555,7 +555,7 @@ void HTMLSelectElement::saveLastSelection() |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- m_lastOnChangeSelection.append(element->hasTagName(optionTag) && toHTMLOptionElement(element)->selected()); |
+ m_lastOnChangeSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()); |
} |
} |
@@ -570,7 +570,7 @@ void HTMLSelectElement::setActiveSelectionAnchorIndex(int index) |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- m_cachedStateForActiveSelection.append(element->hasTagName(optionTag) && toHTMLOptionElement(element)->selected()); |
+ m_cachedStateForActiveSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()); |
} |
} |
@@ -590,7 +590,7 @@ void HTMLSelectElement::updateListBoxSelection(bool deselectOtherOptions) |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- if (!element->hasTagName(optionTag) || toHTMLOptionElement(element)->isDisabledFormControl()) |
+ if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl()) |
continue; |
if (i >= start && i <= end) |
@@ -624,7 +624,7 @@ void HTMLSelectElement::listBoxOnChange() |
bool fireOnChange = false; |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- bool selected = element->hasTagName(optionTag) && toHTMLOptionElement(element)->selected(); |
+ bool selected = isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected(); |
if (selected != m_lastOnChangeSelection[i]) |
fireOnChange = true; |
m_lastOnChangeSelection[i] = selected; |
@@ -732,7 +732,7 @@ void HTMLSelectElement::recalcListItems(bool updateSelectedStates) const |
// optgroup tags may not nest. However, both FireFox and IE will |
// flatten the tree automatically, so we follow suit. |
// (http://www.w3.org/TR/html401/interact/forms.html#h-17.6) |
- if (current.hasTagName(optgroupTag)) { |
+ if (isHTMLOptGroupElement(current)) { |
m_listItems.append(¤t); |
if (Element* nextElement = ElementTraversal::firstWithin(current)) { |
currentElement = nextElement; |
@@ -740,7 +740,7 @@ void HTMLSelectElement::recalcListItems(bool updateSelectedStates) const |
} |
} |
- if (current.hasTagName(optionTag)) { |
+ if (isHTMLOptionElement(current)) { |
m_listItems.append(¤t); |
if (updateSelectedStates && !m_multiple) { |
@@ -758,7 +758,7 @@ void HTMLSelectElement::recalcListItems(bool updateSelectedStates) const |
} |
} |
- if (current.hasTagName(hrTag)) |
+ if (isHTMLHRElement(current)) |
m_listItems.append(¤t); |
// In conforming HTML code, only <optgroup> and <option> will be found |
@@ -782,8 +782,8 @@ int HTMLSelectElement::selectedIndex() const |
const Vector<HTMLElement*>& items = listItems(); |
for (size_t i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- if (element->hasTagName(optionTag)) { |
- if (toHTMLOptionElement(element)->selected()) |
+ if (isHTMLOptionElement(*element)) { |
+ if (toHTMLOptionElement(*element).selected()) |
return index; |
++index; |
} |
@@ -818,12 +818,12 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags) |
HTMLElement* element = 0; |
if (listIndex >= 0) { |
element = items[listIndex]; |
- if (element->hasTagName(optionTag)) { |
+ if (isHTMLOptionElement(*element)) { |
if (m_activeSelectionAnchorIndex < 0 || shouldDeselect) |
setActiveSelectionAnchorIndex(listIndex); |
if (m_activeSelectionEndIndex < 0 || shouldDeselect) |
setActiveSelectionEndIndex(listIndex); |
- toHTMLOptionElement(element)->setSelectedState(true); |
+ toHTMLOptionElement(*element).setSelectedState(true); |
} |
} |
@@ -861,7 +861,7 @@ int HTMLSelectElement::optionToListIndex(int optionIndex) const |
int optionIndex2 = -1; |
for (int listIndex = 0; listIndex < listSize; ++listIndex) { |
- if (items[listIndex]->hasTagName(optionTag)) { |
+ if (isHTMLOptionElement(*items[listIndex])) { |
++optionIndex2; |
if (optionIndex2 == optionIndex) |
return listIndex; |
@@ -874,13 +874,13 @@ int HTMLSelectElement::optionToListIndex(int optionIndex) const |
int HTMLSelectElement::listToOptionIndex(int listIndex) const |
{ |
const Vector<HTMLElement*>& items = listItems(); |
- if (listIndex < 0 || listIndex >= static_cast<int>(items.size()) || !items[listIndex]->hasTagName(optionTag)) |
+ if (listIndex < 0 || listIndex >= static_cast<int>(items.size()) || !isHTMLOptionElement(*items[listIndex])) |
return -1; |
// Actual index of option not counting OPTGROUP entries that may be in list. |
int optionIndex = 0; |
for (int i = 0; i < listIndex; ++i) { |
- if (items[i]->hasTagName(optionTag)) |
+ if (isHTMLOptionElement(*items[i])) |
++optionIndex; |
} |
@@ -911,7 +911,7 @@ void HTMLSelectElement::deselectItemsWithoutValidation(HTMLElement* excludeEleme |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- if (element != excludeElement && element->hasTagName(optionTag)) |
+ if (element != excludeElement && isHTMLOptionElement(*element)) |
toHTMLOptionElement(element)->setSelectedState(false); |
} |
} |
@@ -922,7 +922,7 @@ FormControlState HTMLSelectElement::saveFormControlState() const |
size_t length = items.size(); |
FormControlState state; |
for (unsigned i = 0; i < length; ++i) { |
- if (!items[i]->hasTagName(optionTag)) |
+ if (!isHTMLOptionElement(*items[i])) |
continue; |
HTMLOptionElement* option = toHTMLOptionElement(items[i]); |
if (!option->selected()) |
@@ -1004,8 +1004,8 @@ bool HTMLSelectElement::appendFormData(FormDataList& list, bool) |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- if (element->hasTagName(optionTag) && toHTMLOptionElement(element)->selected() && !toHTMLOptionElement(element)->isDisabledFormControl()) { |
- list.appendData(name, toHTMLOptionElement(element)->value()); |
+ if (isHTMLOptionElement(*element) && toHTMLOptionElement(*element).selected() && !toHTMLOptionElement(*element).isDisabledFormControl()) { |
+ list.appendData(name, toHTMLOptionElement(*element).value()); |
successful = true; |
} |
} |
@@ -1024,7 +1024,7 @@ void HTMLSelectElement::resetImpl() |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
HTMLElement* element = items[i]; |
- if (!element->hasTagName(optionTag)) |
+ if (!isHTMLOptionElement(*element)) |
continue; |
if (items[i]->fastHasAttribute(selectedAttr)) { |
@@ -1229,13 +1229,14 @@ void HTMLSelectElement::updateSelectedState(int listIndex, bool multi, bool shif |
bool multiSelect = m_multiple && multi && !shift; |
HTMLElement* clickedElement = listItems()[listIndex]; |
- if (clickedElement->hasTagName(optionTag)) { |
+ ASSERT(clickedElement); |
+ if (isHTMLOptionElement(*clickedElement)) { |
// Keep track of whether an active selection (like during drag |
// selection), should select or deselect. |
- if (toHTMLOptionElement(clickedElement)->selected() && multiSelect) |
+ if (toHTMLOptionElement(*clickedElement).selected() && multiSelect) |
m_activeSelectionState = false; |
if (!m_activeSelectionState) |
- toHTMLOptionElement(clickedElement)->setSelectedState(false); |
+ toHTMLOptionElement(*clickedElement).setSelectedState(false); |
} |
// If we're not in any special multiple selection mode, then deselect all |
@@ -1250,8 +1251,8 @@ void HTMLSelectElement::updateSelectedState(int listIndex, bool multi, bool shif |
setActiveSelectionAnchorIndex(selectedIndex()); |
// Set the selection state of the clicked option. |
- if (clickedElement->hasTagName(optionTag) && !toHTMLOptionElement(clickedElement)->isDisabledFormControl()) |
- toHTMLOptionElement(clickedElement)->setSelectedState(true); |
+ if (isHTMLOptionElement(*clickedElement) && !toHTMLOptionElement(*clickedElement).isDisabledFormControl()) |
+ toHTMLOptionElement(*clickedElement).setSelectedState(true); |
// If there was no selectedIndex() for the previous initialization, or If |
// we're doing a single selection, or a multiple selection (using cmd or |
@@ -1460,7 +1461,7 @@ int HTMLSelectElement::lastSelectedListIndex() const |
const Vector<HTMLElement*>& items = listItems(); |
for (size_t i = items.size(); i;) { |
HTMLElement* element = items[--i]; |
- if (element->hasTagName(optionTag) && toHTMLOptionElement(element)->selected()) |
+ if (isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()) |
return i; |
} |
return -1; |
@@ -1481,7 +1482,7 @@ String HTMLSelectElement::optionAtIndex(int index) const |
const Vector<HTMLElement*>& items = listItems(); |
HTMLElement* element = items[index]; |
- if (!element->hasTagName(optionTag) || toHTMLOptionElement(element)->isDisabledFormControl()) |
+ if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl()) |
return String(); |
return toHTMLOptionElement(element)->textIndentedToRespectGroupLabel(); |
} |
@@ -1517,9 +1518,9 @@ void HTMLSelectElement::accessKeySetSelectedIndex(int index) |
int listIndex = optionToListIndex(index); |
if (listIndex >= 0) { |
HTMLElement* element = items[listIndex]; |
- if (element->hasTagName(optionTag)) { |
- if (toHTMLOptionElement(element)->selected()) |
- toHTMLOptionElement(element)->setSelectedState(false); |
+ if (isHTMLOptionElement(*element)) { |
+ if (toHTMLOptionElement(*element).selected()) |
+ toHTMLOptionElement(*element).setSelectedState(false); |
else |
selectOption(index, DispatchInputAndChangeEvent | UserDriven); |
} |
@@ -1539,7 +1540,7 @@ unsigned HTMLSelectElement::length() const |
const Vector<HTMLElement*>& items = listItems(); |
for (unsigned i = 0; i < items.size(); ++i) { |
- if (items[i]->hasTagName(optionTag)) |
+ if (isHTMLOptionElement(*items[i])) |
++options; |
} |