Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp |
| diff --git a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp |
| index de3c04c523c20dee85f25a5e4359ca70ca2b6f3e..5e7f47bf0c06625dad35916895fee4fc44b441a3 100644 |
| --- a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp |
| +++ b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp |
| @@ -38,6 +38,8 @@ public: |
| void requiredAttributeChanged(HTMLInputElement*); |
| void remove(HTMLInputElement*); |
| bool contains(HTMLInputElement*) const; |
| + unsigned posInMembers(HTMLInputElement*) const; |
|
keishi
2016/01/26 01:32:23
nit: Blink style avoid abbreviations so positionIn
je_julie(Not used)
2016/02/02 00:36:17
Done
|
| + unsigned sizeOfMembers() const; |
| DECLARE_TRACE(); |
| @@ -47,7 +49,7 @@ private: |
| bool isValid() const; |
| void setCheckedButton(HTMLInputElement*); |
| - WillBeHeapHashSet<RawPtrWillBeMember<HTMLInputElement>> m_members; |
| + WillBeHeapVector<RawPtrWillBeMember<HTMLInputElement>> m_members; |
|
keishi
2016/01/26 01:32:23
This change will conflict with https://codereview.
je_julie(Not used)
2016/02/02 00:36:17
I rebased code on that CL.
|
| RawPtrWillBeMember<HTMLInputElement> m_checkedButton; |
| size_t m_requiredCount; |
| }; |
| @@ -81,8 +83,9 @@ void RadioButtonGroup::setCheckedButton(HTMLInputElement* button) |
| void RadioButtonGroup::add(HTMLInputElement* button) |
| { |
| ASSERT(button->type() == InputTypeNames::radio); |
| - if (!m_members.add(button).isNewEntry) |
| + if (m_members.contains(button)) |
| return; |
| + m_members.append(button); |
| bool groupWasValid = isValid(); |
| if (button->isRequired()) |
| ++m_requiredCount; |
| @@ -135,11 +138,11 @@ void RadioButtonGroup::requiredAttributeChanged(HTMLInputElement* button) |
| void RadioButtonGroup::remove(HTMLInputElement* button) |
| { |
| ASSERT(button->type() == InputTypeNames::radio); |
| - WillBeHeapHashSet<RawPtrWillBeMember<HTMLInputElement>>::iterator it = m_members.find(button); |
| - if (it == m_members.end()) |
| + size_t idx = m_members.find(button); |
| + if (idx == kNotFound) |
| return; |
| bool wasValid = isValid(); |
| - m_members.remove(it); |
| + m_members.remove(idx); |
| if (button->isRequired()) { |
| ASSERT(m_requiredCount); |
| --m_requiredCount; |
| @@ -173,6 +176,22 @@ bool RadioButtonGroup::contains(HTMLInputElement* button) const |
| return m_members.contains(button); |
| } |
| +unsigned RadioButtonGroup::posInMembers(HTMLInputElement* element) const |
| +{ |
| + unsigned index = 0; |
| + for (HTMLInputElement* const button : m_members) { |
| + index++; |
| + if (button == element) |
| + return index; |
| + } |
| + return 0; |
| +} |
| + |
| +unsigned RadioButtonGroup::sizeOfMembers() const |
| +{ |
| + return m_members.size(); |
| +} |
| + |
| DEFINE_TRACE(RadioButtonGroup) |
| { |
| #if ENABLE(OILPAN) |
| @@ -254,6 +273,29 @@ bool RadioButtonGroupScope::isInRequiredGroup(HTMLInputElement* element) const |
| return group && group->isRequired() && group->contains(element); |
| } |
| +unsigned RadioButtonGroupScope::posInGroup(HTMLInputElement* element) const |
| +{ |
| + if (!m_nameToGroupMap) |
| + return 0; |
| + |
| + RadioButtonGroup* group = m_nameToGroupMap->get(element->name()); |
| + if (!group) |
| + return 0; |
| + |
| + return group->posInMembers(element); |
| +} |
| + |
| +unsigned RadioButtonGroupScope::sizeOfGroup(HTMLInputElement* element) const |
| +{ |
| + if (!m_nameToGroupMap) |
| + return 0; |
| + |
| + RadioButtonGroup* group = m_nameToGroupMap->get(element->name()); |
| + if (!group) |
| + return 0; |
| + return group->sizeOfMembers(); |
| +} |
| + |
| void RadioButtonGroupScope::removeButton(HTMLInputElement* element) |
| { |
| ASSERT(element->type() == InputTypeNames::radio); |