Commit db0516ee authored by keishi@chromium.org's avatar keishi@chromium.org

Oilpan: Prepare to move select and option elements to Oilpan heap.

BUG=357163

Review URL: https://codereview.chromium.org/275573003

git-svn-id: svn://svn.chromium.org/blink/trunk@173745 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 97b62704
...@@ -61,7 +61,7 @@ void AXListBox::addChildren() ...@@ -61,7 +61,7 @@ void AXListBox::addChildren()
m_haveChildren = true; m_haveChildren = true;
const Vector<HTMLElement*>& listItems = toHTMLSelectElement(selectNode)->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = toHTMLSelectElement(selectNode)->listItems();
unsigned length = listItems.size(); unsigned length = listItems.size();
for (unsigned i = 0; i < length; i++) { for (unsigned i = 0; i < length; i++) {
// The cast to HTMLElement below is safe because the only other possible listItem type // The cast to HTMLElement below is safe because the only other possible listItem type
......
...@@ -209,7 +209,7 @@ int AXListBoxOption::listBoxOptionIndex() const ...@@ -209,7 +209,7 @@ int AXListBoxOption::listBoxOptionIndex() const
if (!selectElement) if (!selectElement)
return -1; return -1;
const Vector<HTMLElement*>& listItems = selectElement->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement->listItems();
unsigned length = listItems.size(); unsigned length = listItems.size();
for (unsigned i = 0; i < length; i++) { for (unsigned i = 0; i < length; i++) {
if (listItems[i] == m_optionElement) if (listItems[i] == m_optionElement)
......
...@@ -99,7 +99,7 @@ void AXMenuListPopup::addChildren() ...@@ -99,7 +99,7 @@ void AXMenuListPopup::addChildren()
m_haveChildren = true; m_haveChildren = true;
const Vector<HTMLElement*>& listItems = toHTMLSelectElement(selectNode)->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = toHTMLSelectElement(selectNode)->listItems();
unsigned length = listItems.size(); unsigned length = listItems.size();
for (unsigned i = 0; i < length; i++) { for (unsigned i = 0; i < length; i++) {
AXMenuListOption* option = menuListOptionAXObject(listItems[i]); AXMenuListOption* option = menuListOptionAXObject(listItems[i]);
......
...@@ -1013,7 +1013,7 @@ String AXNodeObject::stringValue() const ...@@ -1013,7 +1013,7 @@ String AXNodeObject::stringValue() const
if (isHTMLSelectElement(*node)) { if (isHTMLSelectElement(*node)) {
HTMLSelectElement& selectElement = toHTMLSelectElement(*node); HTMLSelectElement& selectElement = toHTMLSelectElement(*node);
int selectedIndex = selectElement.selectedIndex(); int selectedIndex = selectElement.selectedIndex();
const Vector<HTMLElement*> listItems = selectElement.listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement.listItems();
if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems.size()) { if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems.size()) {
const AtomicString& overriddenDescription = listItems[selectedIndex]->fastGetAttribute(aria_labelAttr); const AtomicString& overriddenDescription = listItems[selectedIndex]->fastGetAttribute(aria_labelAttr);
if (!overriddenDescription.isNull()) if (!overriddenDescription.isNull())
......
...@@ -876,7 +876,7 @@ String AXRenderObject::stringValue() const ...@@ -876,7 +876,7 @@ String AXRenderObject::stringValue() const
// This has to be overridden in the case where the selected item has an ARIA label. // This has to be overridden in the case where the selected item has an ARIA label.
HTMLSelectElement* selectElement = toHTMLSelectElement(m_renderer->node()); HTMLSelectElement* selectElement = toHTMLSelectElement(m_renderer->node());
int selectedIndex = selectElement->selectedIndex(); int selectedIndex = selectElement->selectedIndex();
const Vector<HTMLElement*> listItems = selectElement->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement->listItems();
if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems.size()) { if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems.size()) {
const AtomicString& overriddenDescription = listItems[selectedIndex]->fastGetAttribute(aria_labelAttr); const AtomicString& overriddenDescription = listItems[selectedIndex]->fastGetAttribute(aria_labelAttr);
if (!overriddenDescription.isNull()) if (!overriddenDescription.isNull())
......
...@@ -57,10 +57,10 @@ void HTMLKeygenElement::didAddUserAgentShadowRoot(ShadowRoot& root) ...@@ -57,10 +57,10 @@ void HTMLKeygenElement::didAddUserAgentShadowRoot(ShadowRoot& root)
getSupportedKeySizes(locale(), keys); getSupportedKeySizes(locale(), keys);
// Create a select element with one option element for each key size. // Create a select element with one option element for each key size.
RefPtr<HTMLSelectElement> select = HTMLSelectElement::create(document()); RefPtrWillBeRawPtr<HTMLSelectElement> select = HTMLSelectElement::create(document());
select->setShadowPseudoId(keygenSelectPseudoId); select->setShadowPseudoId(keygenSelectPseudoId);
for (size_t i = 0; i < keys.size(); ++i) { for (size_t i = 0; i < keys.size(); ++i) {
RefPtr<HTMLOptionElement> option = HTMLOptionElement::create(document()); RefPtrWillBeRawPtr<HTMLOptionElement> option = HTMLOptionElement::create(document());
option->appendChild(Text::create(document(), keys[i])); option->appendChild(Text::create(document(), keys[i]));
select->appendChild(option); select->appendChild(option);
} }
......
...@@ -162,12 +162,12 @@ int HTMLOptionElement::index() const ...@@ -162,12 +162,12 @@ int HTMLOptionElement::index() const
int optionIndex = 0; int optionIndex = 0;
const Vector<HTMLElement*>& items = selectElement->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = selectElement->listItems();
size_t length = items.size(); size_t length = items.size();
for (size_t i = 0; i < length; ++i) { for (size_t i = 0; i < length; ++i) {
if (!isHTMLOptionElement(*items[i])) if (!isHTMLOptionElement(*items[i]))
continue; continue;
if (items[i] == this) if (items[i].get() == this)
return optionIndex; return optionIndex;
++optionIndex; ++optionIndex;
} }
......
...@@ -69,12 +69,12 @@ PassRefPtr<HTMLOptionsCollection> HTMLOptionsCollection::create(ContainerNode& s ...@@ -69,12 +69,12 @@ PassRefPtr<HTMLOptionsCollection> HTMLOptionsCollection::create(ContainerNode& s
return adoptRef(new HTMLOptionsCollection(select)); return adoptRef(new HTMLOptionsCollection(select));
} }
void HTMLOptionsCollection::add(PassRefPtr<HTMLOptionElement> element, ExceptionState& exceptionState) void HTMLOptionsCollection::add(PassRefPtrWillBeRawPtr<HTMLOptionElement> element, ExceptionState& exceptionState)
{ {
add(element, length(), exceptionState); add(element, length(), exceptionState);
} }
void HTMLOptionsCollection::add(PassRefPtr<HTMLOptionElement> element, int index, ExceptionState& exceptionState) void HTMLOptionsCollection::add(PassRefPtrWillBeRawPtr<HTMLOptionElement> element, int index, ExceptionState& exceptionState)
{ {
HTMLOptionElement* newOption = element.get(); HTMLOptionElement* newOption = element.get();
...@@ -142,7 +142,7 @@ void HTMLOptionsCollection::namedGetter(const AtomicString& name, bool& returnVa ...@@ -142,7 +142,7 @@ void HTMLOptionsCollection::namedGetter(const AtomicString& name, bool& returnVa
returnValue0 = NamedNodesCollection::create(namedItems); returnValue0 = NamedNodesCollection::create(namedItems);
} }
bool HTMLOptionsCollection::anonymousIndexedSetter(unsigned index, PassRefPtr<HTMLOptionElement> value, ExceptionState& exceptionState) bool HTMLOptionsCollection::anonymousIndexedSetter(unsigned index, PassRefPtrWillBeRawPtr<HTMLOptionElement> value, ExceptionState& exceptionState)
{ {
HTMLSelectElement& base = toHTMLSelectElement(ownerNode()); HTMLSelectElement& base = toHTMLSelectElement(ownerNode());
if (!value) { // undefined or null if (!value) { // undefined or null
......
...@@ -36,8 +36,8 @@ class HTMLOptionsCollection FINAL : public HTMLCollection { ...@@ -36,8 +36,8 @@ class HTMLOptionsCollection FINAL : public HTMLCollection {
public: public:
static PassRefPtr<HTMLOptionsCollection> create(ContainerNode&, CollectionType); static PassRefPtr<HTMLOptionsCollection> create(ContainerNode&, CollectionType);
void add(PassRefPtr<HTMLOptionElement>, ExceptionState&); void add(PassRefPtrWillBeRawPtr<HTMLOptionElement>, ExceptionState&);
void add(PassRefPtr<HTMLOptionElement>, int index, ExceptionState&); void add(PassRefPtrWillBeRawPtr<HTMLOptionElement>, int index, ExceptionState&);
void remove(int index); void remove(int index);
void remove(HTMLOptionElement*); void remove(HTMLOptionElement*);
...@@ -46,7 +46,7 @@ public: ...@@ -46,7 +46,7 @@ public:
void setLength(unsigned, ExceptionState&); void setLength(unsigned, ExceptionState&);
void namedGetter(const AtomicString& name, bool&, RefPtr<NodeList>&, bool&, RefPtr<Element>&); void namedGetter(const AtomicString& name, bool&, RefPtr<NodeList>&, bool&, RefPtr<Element>&);
bool anonymousIndexedSetter(unsigned, PassRefPtr<HTMLOptionElement>, ExceptionState&); bool anonymousIndexedSetter(unsigned, PassRefPtrWillBeRawPtr<HTMLOptionElement>, ExceptionState&);
private: private:
explicit HTMLOptionsCollection(ContainerNode&); explicit HTMLOptionsCollection(ContainerNode&);
......
...@@ -229,7 +229,7 @@ void HTMLSelectElement::remove(int optionIndex) ...@@ -229,7 +229,7 @@ void HTMLSelectElement::remove(int optionIndex)
String HTMLSelectElement::value() const String HTMLSelectElement::value() const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); i++) { for (unsigned i = 0; i < items.size(); i++) {
if (isHTMLOptionElement(items[i]) && toHTMLOptionElement(items[i])->selected()) if (isHTMLOptionElement(items[i]) && toHTMLOptionElement(items[i])->selected())
return toHTMLOptionElement(items[i])->value(); return toHTMLOptionElement(items[i])->value();
...@@ -245,7 +245,7 @@ void HTMLSelectElement::setValue(const String &value, bool sendEvents) ...@@ -245,7 +245,7 @@ void HTMLSelectElement::setValue(const String &value, bool sendEvents)
optionIndex = -1; optionIndex = -1;
} else { } else {
// Find the option with value() matching the given parameter and make it the current selection. // Find the option with value() matching the given parameter and make it the current selection.
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); i++) { for (unsigned i = 0; i < items.size(); i++) {
if (isHTMLOptionElement(items[i])) { if (isHTMLOptionElement(items[i])) {
if (toHTMLOptionElement(items[i])->value() == value) if (toHTMLOptionElement(items[i])->value() == value)
...@@ -270,7 +270,7 @@ void HTMLSelectElement::setValue(const String &value, bool sendEvents) ...@@ -270,7 +270,7 @@ void HTMLSelectElement::setValue(const String &value, bool sendEvents)
String HTMLSelectElement::suggestedValue() const String HTMLSelectElement::suggestedValue() const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
if (isHTMLOptionElement(items[i]) && m_suggestedIndex >= 0) { if (isHTMLOptionElement(items[i]) && m_suggestedIndex >= 0) {
if (i == static_cast<unsigned>(m_suggestedIndex)) if (i == static_cast<unsigned>(m_suggestedIndex))
...@@ -287,7 +287,7 @@ void HTMLSelectElement::setSuggestedValue(const String& value) ...@@ -287,7 +287,7 @@ void HTMLSelectElement::setSuggestedValue(const String& value)
return; return;
} }
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
unsigned optionIndex = 0; unsigned optionIndex = 0;
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
if (isHTMLOptionElement(items[i])) { if (isHTMLOptionElement(items[i])) {
...@@ -482,7 +482,7 @@ void HTMLSelectElement::setLength(unsigned newLen, ExceptionState& exceptionStat ...@@ -482,7 +482,7 @@ void HTMLSelectElement::setLength(unsigned newLen, ExceptionState& exceptionStat
break; break;
} while (++diff); } while (++diff);
} else { } else {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
// Removing children fires mutation events, which might mutate the DOM further, so we first copy out a list // Removing children fires mutation events, which might mutate the DOM further, so we first copy out a list
// of elements that we intend to remove then attempt to remove them one at a time. // of elements that we intend to remove then attempt to remove them one at a time.
...@@ -517,7 +517,7 @@ bool HTMLSelectElement::isRequiredFormControl() const ...@@ -517,7 +517,7 @@ bool HTMLSelectElement::isRequiredFormControl() const
int HTMLSelectElement::nextValidIndex(int listIndex, SkipDirection direction, int skip) const int HTMLSelectElement::nextValidIndex(int listIndex, SkipDirection direction, int skip) const
{ {
ASSERT(direction == -1 || direction == 1); ASSERT(direction == -1 || direction == 1);
const Vector<HTMLElement*>& listItems = this->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = this->listItems();
int lastGoodIndex = listIndex; int lastGoodIndex = listIndex;
int size = listItems.size(); int size = listItems.size();
for (listIndex += direction; listIndex >= 0 && listIndex < size; listIndex += direction) { for (listIndex += direction; listIndex >= 0 && listIndex < size; listIndex += direction) {
...@@ -546,7 +546,7 @@ int HTMLSelectElement::previousSelectableListIndex(int startIndex) const ...@@ -546,7 +546,7 @@ int HTMLSelectElement::previousSelectableListIndex(int startIndex) const
int HTMLSelectElement::firstSelectableListIndex() const int HTMLSelectElement::firstSelectableListIndex() const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
int index = nextValidIndex(items.size(), SkipBackwards, INT_MAX); int index = nextValidIndex(items.size(), SkipBackwards, INT_MAX);
if (static_cast<size_t>(index) == items.size()) if (static_cast<size_t>(index) == items.size())
return -1; return -1;
...@@ -561,7 +561,7 @@ int HTMLSelectElement::lastSelectableListIndex() const ...@@ -561,7 +561,7 @@ int HTMLSelectElement::lastSelectableListIndex() const
// Returns the index of the next valid item one page away from |startIndex| in direction |direction|. // Returns the index of the next valid item one page away from |startIndex| in direction |direction|.
int HTMLSelectElement::nextSelectableListIndexPageAway(int startIndex, SkipDirection direction) const int HTMLSelectElement::nextSelectableListIndexPageAway(int startIndex, SkipDirection direction) const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
// Can't use m_size because renderer forces a minimum size. // Can't use m_size because renderer forces a minimum size.
int pageSize = 0; int pageSize = 0;
if (renderer()->isListBox()) if (renderer()->isListBox())
...@@ -602,7 +602,7 @@ void HTMLSelectElement::saveLastSelection() ...@@ -602,7 +602,7 @@ void HTMLSelectElement::saveLastSelection()
} }
m_lastOnChangeSelection.clear(); m_lastOnChangeSelection.clear();
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
m_lastOnChangeSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()); m_lastOnChangeSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected());
...@@ -617,7 +617,7 @@ void HTMLSelectElement::setActiveSelectionAnchorIndex(int index) ...@@ -617,7 +617,7 @@ void HTMLSelectElement::setActiveSelectionAnchorIndex(int index)
// selection pivots around this anchor index. // selection pivots around this anchor index.
m_cachedStateForActiveSelection.clear(); m_cachedStateForActiveSelection.clear();
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
m_cachedStateForActiveSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()); m_cachedStateForActiveSelection.append(isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected());
...@@ -637,7 +637,7 @@ void HTMLSelectElement::updateListBoxSelection(bool deselectOtherOptions) ...@@ -637,7 +637,7 @@ void HTMLSelectElement::updateListBoxSelection(bool deselectOtherOptions)
unsigned start = min(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex); unsigned start = min(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex);
unsigned end = max(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex); unsigned end = max(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex);
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl() || toHTMLOptionElement(element)->isDisplayNone()) if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl() || toHTMLOptionElement(element)->isDisplayNone())
...@@ -660,7 +660,7 @@ void HTMLSelectElement::listBoxOnChange() ...@@ -660,7 +660,7 @@ void HTMLSelectElement::listBoxOnChange()
{ {
ASSERT(!usesMenuList() || m_multiple); ASSERT(!usesMenuList() || m_multiple);
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
// If the cached selection list is empty, or the size has changed, then fire // If the cached selection list is empty, or the size has changed, then fire
// dispatchFormControlChangeEvent, and return early. // dispatchFormControlChangeEvent, and return early.
...@@ -681,7 +681,7 @@ void HTMLSelectElement::listBoxOnChange() ...@@ -681,7 +681,7 @@ void HTMLSelectElement::listBoxOnChange()
} }
if (fireOnChange) { if (fireOnChange) {
RefPtr<HTMLSelectElement> protector(this); RefPtrWillBeRawPtr<HTMLSelectElement> protector(this);
dispatchInputEvent(); dispatchInputEvent();
dispatchFormControlChangeEvent(); dispatchFormControlChangeEvent();
} }
...@@ -695,7 +695,7 @@ void HTMLSelectElement::dispatchInputAndChangeEventForMenuList(bool requiresUser ...@@ -695,7 +695,7 @@ void HTMLSelectElement::dispatchInputAndChangeEventForMenuList(bool requiresUser
if (m_lastOnChangeIndex != selected && (!requiresUserGesture || m_isProcessingUserDrivenChange)) { if (m_lastOnChangeIndex != selected && (!requiresUserGesture || m_isProcessingUserDrivenChange)) {
m_lastOnChangeIndex = selected; m_lastOnChangeIndex = selected;
m_isProcessingUserDrivenChange = false; m_isProcessingUserDrivenChange = false;
RefPtr<HTMLSelectElement> protector(this); RefPtrWillBeRawPtr<HTMLSelectElement> protector(this);
dispatchInputEvent(); dispatchInputEvent();
dispatchFormControlChangeEvent(); dispatchFormControlChangeEvent();
} }
...@@ -720,13 +720,13 @@ void HTMLSelectElement::setOptionsChangedOnRenderer() ...@@ -720,13 +720,13 @@ void HTMLSelectElement::setOptionsChangedOnRenderer()
} }
} }
const Vector<HTMLElement*>& HTMLSelectElement::listItems() const const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& HTMLSelectElement::listItems() const
{ {
if (m_shouldRecalcListItems) if (m_shouldRecalcListItems)
recalcListItems(); recalcListItems();
else { else {
#if !ASSERT_DISABLED #if !ASSERT_DISABLED
Vector<HTMLElement*> items = m_listItems; WillBeHeapVector<RawPtrWillBeMember<HTMLElement> > items = m_listItems;
recalcListItems(false); recalcListItems(false);
ASSERT(items == m_listItems); ASSERT(items == m_listItems);
#endif #endif
...@@ -829,7 +829,7 @@ int HTMLSelectElement::selectedIndex() const ...@@ -829,7 +829,7 @@ int HTMLSelectElement::selectedIndex() const
unsigned index = 0; unsigned index = 0;
// Return the number of the first option selected. // Return the number of the first option selected.
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (size_t i = 0; i < items.size(); ++i) { for (size_t i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
if (isHTMLOptionElement(*element)) { if (isHTMLOptionElement(*element)) {
...@@ -878,7 +878,7 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags) ...@@ -878,7 +878,7 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags)
{ {
bool shouldDeselect = !m_multiple || (flags & DeselectOtherOptions); bool shouldDeselect = !m_multiple || (flags & DeselectOtherOptions);
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
int listIndex = optionToListIndex(optionIndex); int listIndex = optionToListIndex(optionIndex);
HTMLElement* element = 0; HTMLElement* element = 0;
...@@ -921,7 +921,7 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags) ...@@ -921,7 +921,7 @@ void HTMLSelectElement::selectOption(int optionIndex, SelectOptionFlags flags)
int HTMLSelectElement::optionToListIndex(int optionIndex) const int HTMLSelectElement::optionToListIndex(int optionIndex) const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
int listSize = static_cast<int>(items.size()); int listSize = static_cast<int>(items.size());
if (optionIndex < 0 || optionIndex >= listSize) if (optionIndex < 0 || optionIndex >= listSize)
return -1; return -1;
...@@ -940,7 +940,7 @@ int HTMLSelectElement::optionToListIndex(int optionIndex) const ...@@ -940,7 +940,7 @@ int HTMLSelectElement::optionToListIndex(int optionIndex) const
int HTMLSelectElement::listToOptionIndex(int listIndex) const int HTMLSelectElement::listToOptionIndex(int listIndex) const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
if (listIndex < 0 || listIndex >= static_cast<int>(items.size()) || !isHTMLOptionElement(*items[listIndex])) if (listIndex < 0 || listIndex >= static_cast<int>(items.size()) || !isHTMLOptionElement(*items[listIndex]))
return -1; return -1;
...@@ -975,7 +975,7 @@ void HTMLSelectElement::dispatchBlurEvent(Element* newFocusedElement) ...@@ -975,7 +975,7 @@ void HTMLSelectElement::dispatchBlurEvent(Element* newFocusedElement)
void HTMLSelectElement::deselectItemsWithoutValidation(HTMLElement* excludeElement) void HTMLSelectElement::deselectItemsWithoutValidation(HTMLElement* excludeElement)
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
if (element != excludeElement && isHTMLOptionElement(*element)) if (element != excludeElement && isHTMLOptionElement(*element))
...@@ -985,7 +985,7 @@ void HTMLSelectElement::deselectItemsWithoutValidation(HTMLElement* excludeEleme ...@@ -985,7 +985,7 @@ void HTMLSelectElement::deselectItemsWithoutValidation(HTMLElement* excludeEleme
FormControlState HTMLSelectElement::saveFormControlState() const FormControlState HTMLSelectElement::saveFormControlState() const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
size_t length = items.size(); size_t length = items.size();
FormControlState state; FormControlState state;
for (unsigned i = 0; i < length; ++i) { for (unsigned i = 0; i < length; ++i) {
...@@ -1003,7 +1003,7 @@ FormControlState HTMLSelectElement::saveFormControlState() const ...@@ -1003,7 +1003,7 @@ FormControlState HTMLSelectElement::saveFormControlState() const
size_t HTMLSelectElement::searchOptionsForValue(const String& value, size_t listIndexStart, size_t listIndexEnd) const size_t HTMLSelectElement::searchOptionsForValue(const String& value, size_t listIndexStart, size_t listIndexEnd) const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
size_t loopEndIndex = std::min(items.size(), listIndexEnd); size_t loopEndIndex = std::min(items.size(), listIndexEnd);
for (size_t i = listIndexStart; i < loopEndIndex; ++i) { for (size_t i = listIndexStart; i < loopEndIndex; ++i) {
if (!isHTMLOptionElement(items[i])) if (!isHTMLOptionElement(items[i]))
...@@ -1018,7 +1018,7 @@ void HTMLSelectElement::restoreFormControlState(const FormControlState& state) ...@@ -1018,7 +1018,7 @@ void HTMLSelectElement::restoreFormControlState(const FormControlState& state)
{ {
recalcListItems(); recalcListItems();
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
size_t itemsSize = items.size(); size_t itemsSize = items.size();
if (!itemsSize) if (!itemsSize)
return; return;
...@@ -1067,7 +1067,7 @@ bool HTMLSelectElement::appendFormData(FormDataList& list, bool) ...@@ -1067,7 +1067,7 @@ bool HTMLSelectElement::appendFormData(FormDataList& list, bool)
return false; return false;
bool successful = false; bool successful = false;
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
...@@ -1088,7 +1088,7 @@ void HTMLSelectElement::resetImpl() ...@@ -1088,7 +1088,7 @@ void HTMLSelectElement::resetImpl()
HTMLOptionElement* firstOption = 0; HTMLOptionElement* firstOption = 0;
HTMLOptionElement* selectedOption = 0; HTMLOptionElement* selectedOption = 0;
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
HTMLElement* element = items[i]; HTMLElement* element = items[i];
if (!isHTMLOptionElement(*element)) if (!isHTMLOptionElement(*element))
...@@ -1166,7 +1166,7 @@ void HTMLSelectElement::menuListDefaultEventHandler(Event* event) ...@@ -1166,7 +1166,7 @@ void HTMLSelectElement::menuListDefaultEventHandler(Event* event)
const String& keyIdentifier = toKeyboardEvent(event)->keyIdentifier(); const String& keyIdentifier = toKeyboardEvent(event)->keyIdentifier();
bool handled = true; bool handled = true;
const Vector<HTMLElement*>& listItems = this->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = this->listItems();
int listIndex = optionToListIndex(selectedIndex()); int listIndex = optionToListIndex(selectedIndex());
if (keyIdentifier == "Down" || keyIdentifier == "Right") if (keyIdentifier == "Down" || keyIdentifier == "Right")
...@@ -1337,7 +1337,7 @@ void HTMLSelectElement::updateSelectedState(int listIndex, bool multi, bool shif ...@@ -1337,7 +1337,7 @@ void HTMLSelectElement::updateSelectedState(int listIndex, bool multi, bool shif
void HTMLSelectElement::listBoxDefaultEventHandler(Event* event) void HTMLSelectElement::listBoxDefaultEventHandler(Event* event)
{ {
const Vector<HTMLElement*>& listItems = this->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = this->listItems();
if (event->type() == EventTypeNames::gesturetap && event->isGestureEvent()) { if (event->type() == EventTypeNames::gesturetap && event->isGestureEvent()) {
focus(); focus();
// Calling focus() may cause us to lose our renderer or change the render type, in which case do not want to handle the event. // Calling focus() may cause us to lose our renderer or change the render type, in which case do not want to handle the event.
...@@ -1536,7 +1536,7 @@ void HTMLSelectElement::defaultEventHandler(Event* event) ...@@ -1536,7 +1536,7 @@ void HTMLSelectElement::defaultEventHandler(Event* event)
int HTMLSelectElement::lastSelectedListIndex() const int HTMLSelectElement::lastSelectedListIndex() const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (size_t i = items.size(); i;) { for (size_t i = items.size(); i;) {
HTMLElement* element = items[--i]; HTMLElement* element = items[--i];
if (isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected()) if (isHTMLOptionElement(*element) && toHTMLOptionElement(element)->selected())
...@@ -1557,7 +1557,7 @@ int HTMLSelectElement::optionCount() const ...@@ -1557,7 +1557,7 @@ int HTMLSelectElement::optionCount() const
String HTMLSelectElement::optionAtIndex(int index) const String HTMLSelectElement::optionAtIndex(int index) const
{ {
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
HTMLElement* element = items[index]; HTMLElement* element = items[index];
if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl()) if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDisabledFormControl())
...@@ -1592,7 +1592,7 @@ void HTMLSelectElement::accessKeySetSelectedIndex(int index) ...@@ -1592,7 +1592,7 @@ void HTMLSelectElement::accessKeySetSelectedIndex(int index)
accessKeyAction(false); accessKeyAction(false);
// If this index is already selected, unselect. otherwise update the selected index. // If this index is already selected, unselect. otherwise update the selected index.
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
int listIndex = optionToListIndex(index); int listIndex = optionToListIndex(index);
if (listIndex >= 0) { if (listIndex >= 0) {
HTMLElement* element = items[listIndex]; HTMLElement* element = items[listIndex];
...@@ -1616,7 +1616,7 @@ unsigned HTMLSelectElement::length() const ...@@ -1616,7 +1616,7 @@ unsigned HTMLSelectElement::length() const
{ {
unsigned options = 0; unsigned options = 0;
const Vector<HTMLElement*>& items = listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& items = listItems();
for (unsigned i = 0; i < items.size(); ++i) { for (unsigned i = 0; i < items.size(); ++i) {
if (isHTMLOptionElement(*items[i])) if (isHTMLOptionElement(*items[i]))
++options; ++options;
...@@ -1631,7 +1631,7 @@ void HTMLSelectElement::finishParsingChildren() ...@@ -1631,7 +1631,7 @@ void HTMLSelectElement::finishParsingChildren()
updateListItemSelectedStates(); updateListItemSelectedStates();
} }
bool HTMLSelectElement::anonymousIndexedSetter(unsigned index, PassRefPtr<HTMLOptionElement> value, ExceptionState& exceptionState) bool HTMLSelectElement::anonymousIndexedSetter(unsigned index, PassRefPtrWillBeRawPtr<HTMLOptionElement> value, ExceptionState& exceptionState)
{ {
if (!value) { // undefined or null if (!value) { // undefined or null
remove(index); remove(index);
...@@ -1656,4 +1656,12 @@ void HTMLSelectElement::updateListOnRenderer() ...@@ -1656,4 +1656,12 @@ void HTMLSelectElement::updateListOnRenderer()
setOptionsChangedOnRenderer(); setOptionsChangedOnRenderer();
} }
void HTMLSelectElement::trace(Visitor* visitor)
{
#if ENABLE(OILPAN)
visitor->trace(m_listItems);
#endif
HTMLFormControlElementWithState::trace(visitor);
}
} // namespace } // namespace
...@@ -82,7 +82,7 @@ public: ...@@ -82,7 +82,7 @@ public:
void invalidateSelectedItems(); void invalidateSelectedItems();
void updateListItemSelectedStates(); void updateListItemSelectedStates();
const Vector<HTMLElement*>& listItems() const; const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems() const;
virtual void accessKeyAction(bool sendMouseEvents) OVERRIDE; virtual void accessKeyAction(bool sendMouseEvents) OVERRIDE;
void accessKeySetSelectedIndex(int); void accessKeySetSelectedIndex(int);
...@@ -114,9 +114,12 @@ public: ...@@ -114,9 +114,12 @@ public:
// For use in the implementation of HTMLOptionElement. // For use in the implementation of HTMLOptionElement.
void optionSelectionStateChanged(HTMLOptionElement*, bool optionIsSelected); void optionSelectionStateChanged(HTMLOptionElement*, bool optionIsSelected);
bool anonymousIndexedSetter(unsigned, PassRefPtr<HTMLOptionElement>, ExceptionState&); bool anonymousIndexedSetter(unsigned, PassRefPtrWillBeRawPtr<HTMLOptionElement>, ExceptionState&);
void updateListOnRenderer(); void updateListOnRenderer();
virtual void trace(Visitor*) OVERRIDE;
protected: protected:
HTMLSelectElement(Document&, HTMLFormElement*); HTMLSelectElement(Document&, HTMLFormElement*);
...@@ -198,7 +201,7 @@ private: ...@@ -198,7 +201,7 @@ private:
virtual String optionAtIndex(int index) const OVERRIDE; virtual String optionAtIndex(int index) const OVERRIDE;
// m_listItems contains HTMLOptionElement, HTMLOptGroupElement, and HTMLHRElement objects. // m_listItems contains HTMLOptionElement, HTMLOptGroupElement, and HTMLHRElement objects.
mutable Vector<HTMLElement*> m_listItems; mutable WillBeHeapVector<RawPtrWillBeMember<HTMLElement> > m_listItems;
Vector<bool> m_lastOnChangeSelection; Vector<bool> m_lastOnChangeSelection;
Vector<bool> m_cachedStateForActiveSelection; Vector<bool> m_cachedStateForActiveSelection;
TypeAhead m_typeAhead; TypeAhead m_typeAhead;
......
...@@ -120,7 +120,7 @@ void RenderListBox::updateFromElement() ...@@ -120,7 +120,7 @@ void RenderListBox::updateFromElement()
{ {
FontCachePurgePreventer fontCachePurgePreventer; FontCachePurgePreventer fontCachePurgePreventer;
if (m_optionsChanged) { if (m_optionsChanged) {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
int size = static_cast<int>(listItems.size()); int size = static_cast<int>(listItems.size());
float width = 0; float width = 0;
...@@ -373,7 +373,7 @@ void RenderListBox::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint& ...@@ -373,7 +373,7 @@ void RenderListBox::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint&
// No selected items, find the first non-disabled item. // No selected items, find the first non-disabled item.
int size = numItems(); int size = numItems();
const Vector<HTMLElement*>& listItems = select->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select->listItems();
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
HTMLElement* element = listItems[renderListBoxIndexToListIndex(i)]; HTMLElement* element = listItems[renderListBoxIndexToListIndex(i)];
if (isHTMLOptionElement(*element) && !element->isDisabledFormControl()) { if (isHTMLOptionElement(*element) && !element->isDisabledFormControl()) {
...@@ -431,7 +431,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint& ...@@ -431,7 +431,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint&
HTMLSelectElement* select = selectElement(); HTMLSelectElement* select = selectElement();
const Vector<HTMLElement*>& listItems = select->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select->listItems();
HTMLElement* element = listItems[renderListBoxIndexToListIndex(listIndex)]; HTMLElement* element = listItems[renderListBoxIndexToListIndex(listIndex)];
RenderStyle* itemStyle = element->renderStyle(); RenderStyle* itemStyle = element->renderStyle();
...@@ -480,7 +480,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint& ...@@ -480,7 +480,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint&
void RenderListBox::paintItemBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset, int listIndex) void RenderListBox::paintItemBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset, int listIndex)
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
HTMLElement* element = listItems[renderListBoxIndexToListIndex(listIndex)]; HTMLElement* element = listItems[renderListBoxIndexToListIndex(listIndex)];
Color backColor; Color backColor;
...@@ -736,7 +736,7 @@ bool RenderListBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re ...@@ -736,7 +736,7 @@ bool RenderListBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
{ {
if (!RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, accumulatedOffset, hitTestAction)) if (!RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, accumulatedOffset, hitTestAction))
return false; return false;
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
int size = numItems(); int size = numItems();
LayoutPoint adjustedLocation = accumulatedOffset + location(); LayoutPoint adjustedLocation = accumulatedOffset + location();
...@@ -975,7 +975,7 @@ void RenderListBox::setHasVerticalScrollbar(bool hasScrollbar) ...@@ -975,7 +975,7 @@ void RenderListBox::setHasVerticalScrollbar(bool hasScrollbar)
int RenderListBox::renderListBoxIndexToListIndex(int index) const int RenderListBox::renderListBoxIndexToListIndex(int index) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
const int size = static_cast<int>(listItems.size()); const int size = static_cast<int>(listItems.size());
if (size == numItems()) if (size == numItems())
...@@ -998,7 +998,7 @@ int RenderListBox::renderListBoxIndexToListIndex(int index) const ...@@ -998,7 +998,7 @@ int RenderListBox::renderListBoxIndexToListIndex(int index) const
int RenderListBox::listIndexToRenderListBoxIndex(int index) const int RenderListBox::listIndexToRenderListBoxIndex(int index) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
const int size = static_cast<int>(listItems.size()); const int size = static_cast<int>(listItems.size());
if (size == numItems()) if (size == numItems())
......
...@@ -162,7 +162,7 @@ void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* old ...@@ -162,7 +162,7 @@ void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* old
void RenderMenuList::updateOptionsWidth() void RenderMenuList::updateOptionsWidth()
{ {
float maxOptionWidth = 0; float maxOptionWidth = 0;
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
int size = listItems.size(); int size = listItems.size();
FontCachePurgePreventer fontCachePurgePreventer; FontCachePurgePreventer fontCachePurgePreventer;
...@@ -214,7 +214,7 @@ void RenderMenuList::updateFromElement() ...@@ -214,7 +214,7 @@ void RenderMenuList::updateFromElement()
void RenderMenuList::setTextFromOption(int optionIndex) void RenderMenuList::setTextFromOption(int optionIndex)
{ {
HTMLSelectElement* select = selectElement(); HTMLSelectElement* select = selectElement();
const Vector<HTMLElement*>& listItems = select->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select->listItems();
int size = listItems.size(); int size = listItems.size();
int i = select->optionToListIndex(optionIndex); int i = select->optionToListIndex(optionIndex);
...@@ -398,7 +398,7 @@ void RenderMenuList::didUpdateActiveOption(int optionIndex) ...@@ -398,7 +398,7 @@ void RenderMenuList::didUpdateActiveOption(int optionIndex)
String RenderMenuList::itemText(unsigned listIndex) const String RenderMenuList::itemText(unsigned listIndex) const
{ {
HTMLSelectElement* select = selectElement(); HTMLSelectElement* select = selectElement();
const Vector<HTMLElement*>& listItems = select->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select->listItems();
if (listIndex >= listItems.size()) if (listIndex >= listItems.size())
return String(); return String();
...@@ -416,7 +416,7 @@ String RenderMenuList::itemText(unsigned listIndex) const ...@@ -416,7 +416,7 @@ String RenderMenuList::itemText(unsigned listIndex) const
String RenderMenuList::itemAccessibilityText(unsigned listIndex) const String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
{ {
// Allow the accessible name be changed if necessary. // Allow the accessible name be changed if necessary.
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) if (listIndex >= listItems.size())
return String(); return String();
return listItems[listIndex]->fastGetAttribute(aria_labelAttr); return listItems[listIndex]->fastGetAttribute(aria_labelAttr);
...@@ -424,7 +424,7 @@ String RenderMenuList::itemAccessibilityText(unsigned listIndex) const ...@@ -424,7 +424,7 @@ String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
String RenderMenuList::itemToolTip(unsigned listIndex) const String RenderMenuList::itemToolTip(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) if (listIndex >= listItems.size())
return String(); return String();
return listItems[listIndex]->title(); return listItems[listIndex]->title();
...@@ -432,7 +432,7 @@ String RenderMenuList::itemToolTip(unsigned listIndex) const ...@@ -432,7 +432,7 @@ String RenderMenuList::itemToolTip(unsigned listIndex) const
bool RenderMenuList::itemIsEnabled(unsigned listIndex) const bool RenderMenuList::itemIsEnabled(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) if (listIndex >= listItems.size())
return false; return false;
HTMLElement* element = listItems[listIndex]; HTMLElement* element = listItems[listIndex];
...@@ -452,7 +452,7 @@ bool RenderMenuList::itemIsEnabled(unsigned listIndex) const ...@@ -452,7 +452,7 @@ bool RenderMenuList::itemIsEnabled(unsigned listIndex) const
PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) { if (listIndex >= listItems.size()) {
// If we are making an out of bounds access, then we want to use the style // If we are making an out of bounds access, then we want to use the style
// of a different option element (index 0). However, if there isn't an option element // of a different option element (index 0). However, if there isn't an option element
...@@ -477,7 +477,7 @@ PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const ...@@ -477,7 +477,7 @@ PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
void RenderMenuList::getItemBackgroundColor(unsigned listIndex, Color& itemBackgroundColor, bool& itemHasCustomBackgroundColor) const void RenderMenuList::getItemBackgroundColor(unsigned listIndex, Color& itemBackgroundColor, bool& itemHasCustomBackgroundColor) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) { if (listIndex >= listItems.size()) {
itemBackgroundColor = resolveColor(CSSPropertyBackgroundColor); itemBackgroundColor = resolveColor(CSSPropertyBackgroundColor);
itemHasCustomBackgroundColor = false; itemHasCustomBackgroundColor = false;
...@@ -553,19 +553,19 @@ void RenderMenuList::popupDidHide() ...@@ -553,19 +553,19 @@ void RenderMenuList::popupDidHide()
bool RenderMenuList::itemIsSeparator(unsigned listIndex) const bool RenderMenuList::itemIsSeparator(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
return listIndex < listItems.size() && isHTMLHRElement(*listItems[listIndex]); return listIndex < listItems.size() && isHTMLHRElement(*listItems[listIndex]);
} }
bool RenderMenuList::itemIsLabel(unsigned listIndex) const bool RenderMenuList::itemIsLabel(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
return listIndex < listItems.size() && isHTMLOptGroupElement(*listItems[listIndex]); return listIndex < listItems.size() && isHTMLOptGroupElement(*listItems[listIndex]);
} }
bool RenderMenuList::itemIsSelected(unsigned listIndex) const bool RenderMenuList::itemIsSelected(unsigned listIndex) const
{ {
const Vector<HTMLElement*>& listItems = selectElement()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = selectElement()->listItems();
if (listIndex >= listItems.size()) if (listIndex >= listItems.size())
return false; return false;
HTMLElement* element = listItems[listIndex]; HTMLElement* element = listItems[listIndex];
......
...@@ -99,9 +99,9 @@ HTMLFormControlElement* GetButtonToActivate(HTMLFormElement* form) ...@@ -99,9 +99,9 @@ HTMLFormControlElement* GetButtonToActivate(HTMLFormElement* form)
// selected state. // selected state.
bool IsSelectInDefaultState(HTMLSelectElement* select) bool IsSelectInDefaultState(HTMLSelectElement* select)
{ {
const Vector<HTMLElement*>& listItems = select->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select->listItems();
if (select->multiple() || select->size() > 1) { if (select->multiple() || select->size() > 1) {
for (Vector<HTMLElement*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) { for (WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
if (!(*i)->hasLocalName(HTMLNames::optionTag)) if (!(*i)->hasLocalName(HTMLNames::optionTag))
continue; continue;
HTMLOptionElement* optionElement = toHTMLOptionElement(*i); HTMLOptionElement* optionElement = toHTMLOptionElement(*i);
...@@ -114,7 +114,7 @@ bool IsSelectInDefaultState(HTMLSelectElement* select) ...@@ -114,7 +114,7 @@ bool IsSelectInDefaultState(HTMLSelectElement* select)
// The select is rendered as a combobox (called menulist in WebKit). At // The select is rendered as a combobox (called menulist in WebKit). At
// least one item is selected, determine which one. // least one item is selected, determine which one.
HTMLOptionElement* initialSelected = 0; HTMLOptionElement* initialSelected = 0;
for (Vector<HTMLElement*>::const_iterator i(listItems.begin()); i != listItems.end(); ++i) { for (WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >::const_iterator i(listItems.begin()); i != listItems.end(); ++i) {
if (!(*i)->hasLocalName(HTMLNames::optionTag)) if (!(*i)->hasLocalName(HTMLNames::optionTag))
continue; continue;
HTMLOptionElement* optionElement = toHTMLOptionElement(*i); HTMLOptionElement* optionElement = toHTMLOptionElement(*i);
......
...@@ -43,10 +43,10 @@ namespace blink { ...@@ -43,10 +43,10 @@ namespace blink {
WebVector<WebElement> WebSelectElement::listItems() const WebVector<WebElement> WebSelectElement::listItems() const
{ {
const Vector<HTMLElement*>& sourceItems = constUnwrap<HTMLSelectElement>()->listItems(); const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& sourceItems = constUnwrap<HTMLSelectElement>()->listItems();
WebVector<WebElement> items(sourceItems.size()); WebVector<WebElement> items(sourceItems.size());
for (size_t i = 0; i < sourceItems.size(); ++i) for (size_t i = 0; i < sourceItems.size(); ++i)
items[i] = WebElement(sourceItems[i]); items[i] = WebElement(sourceItems[i].get());
return items; return items;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment