WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-94061-20120815114453.patch (text/plain), 17.74 KB, created by
Shinya Kawanaka
on 2012-08-14 19:45:26 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Shinya Kawanaka
Created:
2012-08-14 19:45:26 PDT
Size:
17.74 KB
patch
obsolete
>Subversion Revision: 125625 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f2f277f17b207329b0f5c0edeb005e7927d5370e..093edcc1a94abb2faae6d42adacb99f95803c0ee 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,61 @@ >+2012-08-14 Shinya Kawanaka <shinyak@chromium.org> >+ >+ [Refactoring] RenderMenuList and RenderListBox should have a method to return HTMLSelectElement. >+ https://bugs.webkit.org/show_bug.cgi?id=94061 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This is a preparation patch for Bug 91487. Since RenderMenuList::node() and RenderListBox::node() >+ will not return HTMLSelectElement to fix Bug 91487, it would be good to have a method to HTMLSelectElement. >+ >+ No new tests, no change in behavior. >+ >+ * rendering/RenderListBox.cpp: >+ (WebCore::RenderListBox::selectElement): >+ (WebCore): >+ (WebCore::RenderListBox::updateFromElement): >+ (WebCore::RenderListBox::scrollToRevealSelection): >+ (WebCore::RenderListBox::size): >+ (WebCore::RenderListBox::numItems): >+ (WebCore::RenderListBox::addFocusRingRects): >+ (WebCore::RenderListBox::paintItemForeground): >+ (WebCore::RenderListBox::paintItemBackground): >+ (WebCore::RenderListBox::panScroll): >+ (WebCore::RenderListBox::autoscroll): >+ (WebCore::RenderListBox::stopAutoscroll): >+ (WebCore::RenderListBox::valueChanged): >+ (WebCore::RenderListBox::nodeAtPoint): >+ * rendering/RenderListBox.h: >+ (WebCore): >+ (RenderListBox): >+ * rendering/RenderMenuList.cpp: >+ (WebCore::RenderMenuList::selectElement): >+ (WebCore): >+ (WebCore::RenderMenuList::updateOptionsWidth): >+ (WebCore::RenderMenuList::updateFromElement): >+ (WebCore::RenderMenuList::setTextFromOption): >+ (WebCore::RenderMenuList::showPopup): >+ (WebCore::RenderMenuList::valueChanged): >+ (WebCore::RenderMenuList::listBoxSelectItem): >+ (WebCore::RenderMenuList::multiple): >+ (WebCore::RenderMenuList::didSetSelectedIndex): >+ (WebCore::RenderMenuList::didUpdateActiveOption): >+ (WebCore::RenderMenuList::itemText): >+ (WebCore::RenderMenuList::itemAccessibilityText): >+ (WebCore::RenderMenuList::itemToolTip): >+ (WebCore::RenderMenuList::itemIsEnabled): >+ (WebCore::RenderMenuList::itemStyle): >+ (WebCore::RenderMenuList::itemBackgroundColor): >+ (WebCore::RenderMenuList::listSize): >+ (WebCore::RenderMenuList::selectedIndex): >+ (WebCore::RenderMenuList::itemIsSeparator): >+ (WebCore::RenderMenuList::itemIsLabel): >+ (WebCore::RenderMenuList::itemIsSelected): >+ (WebCore::RenderMenuList::setTextFromItem): >+ * rendering/RenderMenuList.h: >+ (WebCore): >+ (RenderMenuList): >+ > 2012-08-14 Kihong Kwon <kihong.kwon@samsung.com> > > Clear pattern to prevent timing problem between cancelVibration and vibrate >diff --git a/Source/WebCore/rendering/RenderListBox.cpp b/Source/WebCore/rendering/RenderListBox.cpp >index 2f5ae2b6c77fb214b6a25e51a1375fbf2e636bb6..944ea5f08329d581812d9094ff65434b9c274ff0 100644 >--- a/Source/WebCore/rendering/RenderListBox.cpp >+++ b/Source/WebCore/rendering/RenderListBox.cpp >@@ -105,12 +105,17 @@ RenderListBox::~RenderListBox() > frameView->removeScrollableArea(this); > } > >+inline HTMLSelectElement* RenderListBox::selectElement() const >+{ >+ return toHTMLSelectElement(node()); >+} >+ > void RenderListBox::updateFromElement() > { > FontCachePurgePreventer fontCachePurgePreventer; > > if (m_optionsChanged) { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > int size = numItems(); > > float width = 0; >@@ -176,7 +181,7 @@ void RenderListBox::layout() > > void RenderListBox::scrollToRevealSelection() > { >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > > m_scrollToRevealSelectionAfterLayout = false; > >@@ -222,7 +227,7 @@ void RenderListBox::computePreferredLogicalWidths() > > int RenderListBox::size() const > { >- int specifiedSize = toHTMLSelectElement(node())->size(); >+ int specifiedSize = selectElement()->size(); > if (specifiedSize > 1) > return max(minSize, specifiedSize); > >@@ -237,7 +242,7 @@ int RenderListBox::numVisibleItems() const > > int RenderListBox::numItems() const > { >- return toHTMLSelectElement(node())->listItems().size(); >+ return selectElement()->listItems().size(); > } > > LayoutUnit RenderListBox::listHeight() const >@@ -326,7 +331,7 @@ void RenderListBox::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint& > if (!isSpatialNavigationEnabled(frame())) > return RenderBlock::addFocusRingRects(rects, additionalOffset); > >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > > // Focus the last selected item. > int selectedItem = select->activeSelectionEndListIndex(); >@@ -383,9 +388,9 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint& > { > FontCachePurgePreventer fontCachePurgePreventer; > >- HTMLSelectElement* selectElement = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > >- const Vector<HTMLElement*>& listItems = selectElement->listItems(); >+ const Vector<HTMLElement*>& listItems = select->listItems(); > HTMLElement* element = listItems[listIndex]; > > RenderStyle* itemStyle = element->renderStyle(); >@@ -408,7 +413,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint& > if (frame()->selection()->isFocusedAndActive() && document()->focusedNode() == node()) > textColor = theme()->activeListBoxSelectionForegroundColor(); > // Honor the foreground color for disabled items >- else if (!element->disabled() && !selectElement->disabled()) >+ else if (!element->disabled() && !select->disabled()) > textColor = theme()->inactiveListBoxSelectionForegroundColor(); > } > >@@ -433,7 +438,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint& > > void RenderListBox::paintItemBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset, int listIndex) > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > HTMLElement* element = listItems[listIndex]; > > Color backColor; >@@ -528,7 +533,7 @@ void RenderListBox::panScroll(const IntPoint& panStartMousePosition) > return; > > m_inAutoscroll = true; >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > select->updateListBoxSelection(!select->multiple()); > m_inAutoscroll = false; > } >@@ -557,7 +562,7 @@ void RenderListBox::autoscroll() > > int endIndex = scrollToward(pos); > if (endIndex >= 0) { >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > m_inAutoscroll = true; > > if (!select->multiple()) >@@ -571,7 +576,7 @@ void RenderListBox::autoscroll() > > void RenderListBox::stopAutoscroll() > { >- toHTMLSelectElement(node())->listBoxOnChange(); >+ selectElement()->listBoxOnChange(); > } > > bool RenderListBox::scrollToRevealElementAtListIndex(int index) >@@ -607,7 +612,7 @@ bool RenderListBox::logicalScroll(ScrollLogicalDirection direction, ScrollGranul > > void RenderListBox::valueChanged(unsigned listIndex) > { >- HTMLSelectElement* element = toHTMLSelectElement(node()); >+ HTMLSelectElement* element = selectElement(); > element->setSelectedIndex(element->listToOptionIndex(listIndex)); > element->dispatchFormControlChangeEvent(); > } >@@ -693,7 +698,7 @@ bool RenderListBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re > { > if (!RenderBlock::nodeAtPoint(request, result, pointInContainer, accumulatedOffset, hitTestAction)) > return false; >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > int size = numItems(); > LayoutPoint adjustedLocation = accumulatedOffset + location(); > >diff --git a/Source/WebCore/rendering/RenderListBox.h b/Source/WebCore/rendering/RenderListBox.h >index 6038c43164faa72fb68f8f8c27b845ec735f8c18..d968c87175d9fa356c321f8378469a83ce8d9948 100644 >--- a/Source/WebCore/rendering/RenderListBox.h >+++ b/Source/WebCore/rendering/RenderListBox.h >@@ -36,6 +36,8 @@ > > namespace WebCore { > >+class HTMLSelectElement; >+ > class RenderListBox : public RenderBlock, private ScrollableArea { > public: > RenderListBox(Element*); >@@ -56,6 +58,8 @@ public: > int size() const; > > private: >+ HTMLSelectElement* selectElement() const; >+ > virtual const char* renderName() const { return "RenderListBox"; } > > virtual bool isListBox() const { return true; } >diff --git a/Source/WebCore/rendering/RenderMenuList.cpp b/Source/WebCore/rendering/RenderMenuList.cpp >index 521cc03276893fdf7a24904b6451d6c7a5ef3032..5b79d6c90cb6375360b12e312fd377ac3d438b40 100644 >--- a/Source/WebCore/rendering/RenderMenuList.cpp >+++ b/Source/WebCore/rendering/RenderMenuList.cpp >@@ -119,6 +119,11 @@ void RenderMenuList::adjustInnerStyle() > } > } > >+inline HTMLSelectElement* RenderMenuList::selectElement() const >+{ >+ return toHTMLSelectElement(node()); >+} >+ > void RenderMenuList::addChild(RenderObject* newChild, RenderObject* beforeChild) > { > createInnerBlock(); >@@ -155,7 +160,7 @@ void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* old > void RenderMenuList::updateOptionsWidth() > { > float maxOptionWidth = 0; >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > int size = listItems.size(); > FontCachePurgePreventer fontCachePurgePreventer; > >@@ -197,12 +202,12 @@ void RenderMenuList::updateFromElement() > if (m_popupIsVisible) > m_popup->updateFromElement(); > else >- setTextFromOption(toHTMLSelectElement(node())->selectedIndex()); >+ setTextFromOption(selectElement()->selectedIndex()); > } > > void RenderMenuList::setTextFromOption(int optionIndex) > { >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > const Vector<HTMLElement*>& listItems = select->listItems(); > int size = listItems.size(); > >@@ -318,7 +323,7 @@ void RenderMenuList::showPopup() > FloatPoint absTopLeft = localToAbsolute(FloatPoint(), false, true); > IntRect absBounds = absoluteBoundingBoxRectIgnoringTransforms(); > absBounds.setLocation(roundedIntPoint(absTopLeft)); >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > m_popup->show(absBounds, document()->view(), select->optionToListIndex(select->selectedIndex())); > } > >@@ -336,23 +341,23 @@ void RenderMenuList::valueChanged(unsigned listIndex, bool fireOnChange) > if (!doc || doc != doc->frame()->document()) > return; > >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > select->optionSelectedByUser(select->listToOptionIndex(listIndex), fireOnChange); > } > > void RenderMenuList::listBoxSelectItem(int listIndex, bool allowMultiplySelections, bool shift, bool fireOnChangeNow) > { >- toHTMLSelectElement(node())->listBoxSelectItem(listIndex, allowMultiplySelections, shift, fireOnChangeNow); >+ selectElement()->listBoxSelectItem(listIndex, allowMultiplySelections, shift, fireOnChangeNow); > } > > bool RenderMenuList::multiple() const > { >- return toHTMLSelectElement(node())->multiple(); >+ return selectElement()->multiple(); > } > > void RenderMenuList::didSetSelectedIndex(int listIndex) > { >- didUpdateActiveOption(toHTMLSelectElement(node())->listToOptionIndex(listIndex)); >+ didUpdateActiveOption(selectElement()->listToOptionIndex(listIndex)); > } > > void RenderMenuList::didUpdateActiveOption(int optionIndex) >@@ -364,7 +369,7 @@ void RenderMenuList::didUpdateActiveOption(int optionIndex) > return; > m_lastActiveIndex = optionIndex; > >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > int listIndex = select->optionToListIndex(optionIndex); > if (listIndex < 0 || listIndex >= static_cast<int>(select->listItems().size())) > return; >@@ -377,7 +382,7 @@ void RenderMenuList::didUpdateActiveOption(int optionIndex) > > String RenderMenuList::itemText(unsigned listIndex) const > { >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > const Vector<HTMLElement*>& listItems = select->listItems(); > if (listIndex >= listItems.size()) > return String(); >@@ -406,7 +411,7 @@ String RenderMenuList::itemIcon(unsigned) const > String RenderMenuList::itemAccessibilityText(unsigned listIndex) const > { > // Allow the accessible name be changed if necessary. >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) > return String(); > return listItems[listIndex]->fastGetAttribute(aria_labelAttr); >@@ -414,7 +419,7 @@ String RenderMenuList::itemAccessibilityText(unsigned listIndex) const > > String RenderMenuList::itemToolTip(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) > return String(); > return listItems[listIndex]->title(); >@@ -422,7 +427,7 @@ String RenderMenuList::itemToolTip(unsigned listIndex) const > > bool RenderMenuList::itemIsEnabled(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) > return false; > HTMLElement* element = listItems[listIndex]; >@@ -442,7 +447,7 @@ bool RenderMenuList::itemIsEnabled(unsigned listIndex) const > > PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) { > // 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 >@@ -462,7 +467,7 @@ PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const > > Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) > return style()->visitedDependentColor(CSSPropertyBackgroundColor); > HTMLElement* element = listItems[listIndex]; >@@ -539,12 +544,12 @@ LayoutUnit RenderMenuList::clientPaddingRight() const > > int RenderMenuList::listSize() const > { >- return toHTMLSelectElement(node())->listItems().size(); >+ return selectElement()->listItems().size(); > } > > int RenderMenuList::selectedIndex() const > { >- HTMLSelectElement* select = toHTMLSelectElement(node()); >+ HTMLSelectElement* select = selectElement(); > return select->optionToListIndex(select->selectedIndex()); > } > >@@ -555,19 +560,19 @@ void RenderMenuList::popupDidHide() > > bool RenderMenuList::itemIsSeparator(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > return listIndex < listItems.size() && listItems[listIndex]->hasTagName(hrTag); > } > > bool RenderMenuList::itemIsLabel(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > return listIndex < listItems.size() && listItems[listIndex]->hasTagName(optgroupTag); > } > > bool RenderMenuList::itemIsSelected(unsigned listIndex) const > { >- const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems(); >+ const Vector<HTMLElement*>& listItems = selectElement()->listItems(); > if (listIndex >= listItems.size()) > return false; > HTMLElement* element = listItems[listIndex]; >@@ -576,7 +581,7 @@ bool RenderMenuList::itemIsSelected(unsigned listIndex) const > > void RenderMenuList::setTextFromItem(unsigned listIndex) > { >- setTextFromOption(toHTMLSelectElement(node())->listToOptionIndex(listIndex)); >+ setTextFromOption(selectElement()->listToOptionIndex(listIndex)); > } > > FontSelector* RenderMenuList::fontSelector() const >diff --git a/Source/WebCore/rendering/RenderMenuList.h b/Source/WebCore/rendering/RenderMenuList.h >index 0b43008406cf4dd9b06ff138264fea69a569c5a6..295e2421c7f3ed329ac5a3df26ab38d97a43ee07 100644 >--- a/Source/WebCore/rendering/RenderMenuList.h >+++ b/Source/WebCore/rendering/RenderMenuList.h >@@ -37,6 +37,7 @@ > > namespace WebCore { > >+class HTMLSelectElement; > class RenderText; > > class RenderMenuList : public RenderDeprecatedFlexibleBox, private PopupMenuClient { >@@ -57,6 +58,8 @@ public: > String text() const; > > private: >+ HTMLSelectElement* selectElement() const; >+ > virtual bool isMenuList() const { return true; } > > virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 94061
: 158483