- Revision
- 172591
- Author
- [email protected]
- Date
- 2014-08-14 10:49:55 -0700 (Thu, 14 Aug 2014)
Log Message
Remove nonRendererStyle
https://bugs.webkit.org/show_bug.cgi?id=135938
Reviewed by Andreas Kling.
It is used to support styling of non-renderer option elements. We have a better
mechanism for this, Element::computedStyle().
* dom/Element.cpp:
(WebCore::Element::resetComputedStyle):
(WebCore::Element::willResetComputedStyle):
Add a virtual callback for computed style reset.
* dom/Element.h:
* dom/Node.h:
(WebCore::Node::nonRendererStyle): Deleted.
* dom/NodeRenderStyle.h:
(WebCore::Node::renderStyle):
renderStyle() now always matches renderer()->style()
* html/HTMLOptGroupElement.cpp:
(WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
(WebCore::HTMLOptGroupElement::isFocusable):
(WebCore::HTMLOptGroupElement::didAttachRenderers): Deleted.
(WebCore::HTMLOptGroupElement::willDetachRenderers): Deleted.
(WebCore::HTMLOptGroupElement::updateNonRenderStyle): Deleted.
(WebCore::HTMLOptGroupElement::nonRendererStyle): Deleted.
(WebCore::HTMLOptGroupElement::customStyleForRenderer): Deleted.
* html/HTMLOptGroupElement.h:
* html/HTMLOptionElement.cpp:
(WebCore::HTMLOptionElement::isFocusable):
Use computedStyle.
(WebCore::HTMLOptionElement::willResetComputedStyle):
(WebCore::HTMLOptionElement::didAttachRenderers): Deleted.
(WebCore::HTMLOptionElement::willDetachRenderers): Deleted.
(WebCore::HTMLOptionElement::updateNonRenderStyle): Deleted.
(WebCore::HTMLOptionElement::nonRendererStyle): Deleted.
(WebCore::HTMLOptionElement::customStyleForRenderer): Deleted.
(WebCore::HTMLOptionElement::didRecalcStyle): Deleted.
* html/HTMLOptionElement.h:
* rendering/RenderMenuList.cpp:
(RenderMenuList::updateOptionsWidth):
(RenderMenuList::setTextFromOption):
Use computedStyle.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (172590 => 172591)
--- trunk/Source/WebCore/ChangeLog 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/ChangeLog 2014-08-14 17:49:55 UTC (rev 172591)
@@ -1,3 +1,55 @@
+2014-08-14 Antti Koivisto <[email protected]>
+
+ Remove nonRendererStyle
+ https://bugs.webkit.org/show_bug.cgi?id=135938
+
+ Reviewed by Andreas Kling.
+
+ It is used to support styling of non-renderer option elements. We have a better
+ mechanism for this, Element::computedStyle().
+
+ * dom/Element.cpp:
+ (WebCore::Element::resetComputedStyle):
+ (WebCore::Element::willResetComputedStyle):
+
+ Add a virtual callback for computed style reset.
+
+ * dom/Element.h:
+ * dom/Node.h:
+ (WebCore::Node::nonRendererStyle): Deleted.
+ * dom/NodeRenderStyle.h:
+ (WebCore::Node::renderStyle):
+
+ renderStyle() now always matches renderer()->style()
+
+ * html/HTMLOptGroupElement.cpp:
+ (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
+ (WebCore::HTMLOptGroupElement::isFocusable):
+ (WebCore::HTMLOptGroupElement::didAttachRenderers): Deleted.
+ (WebCore::HTMLOptGroupElement::willDetachRenderers): Deleted.
+ (WebCore::HTMLOptGroupElement::updateNonRenderStyle): Deleted.
+ (WebCore::HTMLOptGroupElement::nonRendererStyle): Deleted.
+ (WebCore::HTMLOptGroupElement::customStyleForRenderer): Deleted.
+ * html/HTMLOptGroupElement.h:
+ * html/HTMLOptionElement.cpp:
+ (WebCore::HTMLOptionElement::isFocusable):
+
+ Use computedStyle.
+
+ (WebCore::HTMLOptionElement::willResetComputedStyle):
+ (WebCore::HTMLOptionElement::didAttachRenderers): Deleted.
+ (WebCore::HTMLOptionElement::willDetachRenderers): Deleted.
+ (WebCore::HTMLOptionElement::updateNonRenderStyle): Deleted.
+ (WebCore::HTMLOptionElement::nonRendererStyle): Deleted.
+ (WebCore::HTMLOptionElement::customStyleForRenderer): Deleted.
+ (WebCore::HTMLOptionElement::didRecalcStyle): Deleted.
+ * html/HTMLOptionElement.h:
+ * rendering/RenderMenuList.cpp:
+ (RenderMenuList::updateOptionsWidth):
+ (RenderMenuList::setTextFromOption):
+
+ Use computedStyle.
+
2014-08-14 Jer Noble <[email protected]>
[MSE] Altering the quality of a YouTube video will cause the video to distort and display an error message
Modified: trunk/Source/WebCore/dom/Element.cpp (172590 => 172591)
--- trunk/Source/WebCore/dom/Element.cpp 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/dom/Element.cpp 2014-08-14 17:49:55 UTC (rev 172591)
@@ -2861,11 +2861,17 @@
{
if (!hasRareData() || !elementRareData()->computedStyle())
return;
- elementRareData()->resetComputedStyle();
- for (auto& child : descendantsOfType<Element>(*this)) {
- if (child.hasRareData())
- child.elementRareData()->resetComputedStyle();
- }
+
+ auto reset = [](Element& element) {
+ if (!element.hasRareData() || !element.elementRareData()->computedStyle())
+ return;
+ if (element.hasCustomStyleResolveCallbacks())
+ element.willResetComputedStyle();
+ element.elementRareData()->resetComputedStyle();
+ };
+ reset(*this);
+ for (auto& child : descendantsOfType<Element>(*this))
+ reset(child);
}
void Element::clearStyleDerivedDataBeforeDetachingRenderer()
@@ -2903,6 +2909,11 @@
ASSERT(hasCustomStyleResolveCallbacks());
}
+void Element::willResetComputedStyle()
+{
+ ASSERT(hasCustomStyleResolveCallbacks());
+}
+
void Element::willAttachRenderers()
{
ASSERT(hasCustomStyleResolveCallbacks());
Modified: trunk/Source/WebCore/dom/Element.h (172590 => 172591)
--- trunk/Source/WebCore/dom/Element.h 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/dom/Element.h 2014-08-14 17:49:55 UTC (rev 172591)
@@ -546,6 +546,7 @@
virtual bool willRecalcStyle(Style::Change);
virtual void didRecalcStyle(Style::Change);
+ virtual void willResetComputedStyle();
virtual void willAttachRenderers();
virtual void didAttachRenderers();
virtual void willDetachRenderers();
Modified: trunk/Source/WebCore/dom/Node.h (172590 => 172591)
--- trunk/Source/WebCore/dom/Node.h 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/dom/Node.h 2014-08-14 17:49:55 UTC (rev 172591)
@@ -686,8 +686,6 @@
virtual void refEventTarget() override;
virtual void derefEventTarget() override;
- virtual RenderStyle* nonRendererStyle() const { return nullptr; }
-
Element* ancestorElement() const;
void trackForDebugging();
Modified: trunk/Source/WebCore/dom/NodeRenderStyle.h (172590 => 172591)
--- trunk/Source/WebCore/dom/NodeRenderStyle.h 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/dom/NodeRenderStyle.h 2014-08-14 17:49:55 UTC (rev 172591)
@@ -34,11 +34,10 @@
inline RenderStyle* Node::renderStyle() const
{
- // Using a ternary here confuses the Solaris Studio 12/12.1/12.2 compilers:
- // Bug is CR 6569194, "Problem with question operator binding in inline function"
- if (RenderObject* renderer = this->renderer())
- return &renderer->style();
- return nonRendererStyle();
+ auto* renderer = this->renderer();
+ if (!renderer)
+ return nullptr;
+ return &renderer->style();
}
}
Modified: trunk/Source/WebCore/html/HTMLOptGroupElement.cpp (172590 => 172591)
--- trunk/Source/WebCore/html/HTMLOptGroupElement.cpp 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/html/HTMLOptGroupElement.cpp 2014-08-14 17:49:55 UTC (rev 172591)
@@ -41,7 +41,6 @@
: HTMLElement(tagName, document)
{
ASSERT(hasTagName(optgroupTag));
- setHasCustomStyleResolveCallbacks();
}
PassRefPtr<HTMLOptGroupElement> HTMLOptGroupElement::create(const QualifiedName& tagName, Document& document)
@@ -56,8 +55,11 @@
bool HTMLOptGroupElement::isFocusable() const
{
- // Optgroup elements do not have a renderer so we check the renderStyle instead.
- return supportsFocus() && renderStyle() && renderStyle()->display() != NONE;
+ if (!supportsFocus())
+ return false;
+ // Optgroup elements do not have a renderer.
+ auto* style = const_cast<HTMLOptGroupElement&>(*this).computedStyle();
+ return style && style->display() != NONE;
}
const AtomicString& HTMLOptGroupElement::formControlType() const
@@ -90,38 +92,6 @@
toHTMLSelectElement(select)->setRecalcListItems();
}
-void HTMLOptGroupElement::didAttachRenderers()
-{
- // If after attaching nothing called styleForRenderer() on this node we
- // manually cache the value. This happens if our parent doesn't have a
- // renderer like <optgroup> or if it doesn't allow children like <select>.
- if (!m_style && parentNode()->renderStyle())
- updateNonRenderStyle(*parentNode()->renderStyle());
-}
-
-void HTMLOptGroupElement::willDetachRenderers()
-{
- m_style.clear();
-}
-
-void HTMLOptGroupElement::updateNonRenderStyle(RenderStyle& parentStyle)
-{
- m_style = document().ensureStyleResolver().styleForElement(this, &parentStyle);
-}
-
-RenderStyle* HTMLOptGroupElement::nonRendererStyle() const
-{
- return m_style.get();
-}
-
-PassRefPtr<RenderStyle> HTMLOptGroupElement::customStyleForRenderer(RenderStyle& parentStyle)
-{
- // styleForRenderer is called whenever a new style should be associated
- // with an Element so now is a good time to update our cached style.
- updateNonRenderStyle(parentStyle);
- return m_style;
-}
-
String HTMLOptGroupElement::groupLabelText() const
{
String itemText = document().displayStringModifiedByEncoding(getAttribute(labelAttr));
Modified: trunk/Source/WebCore/html/HTMLOptGroupElement.h (172590 => 172591)
--- trunk/Source/WebCore/html/HTMLOptGroupElement.h 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/html/HTMLOptGroupElement.h 2014-08-14 17:49:55 UTC (rev 172591)
@@ -46,21 +46,12 @@
virtual bool isFocusable() const override;
virtual void parseAttribute(const QualifiedName&, const AtomicString&) override;
virtual bool rendererIsNeeded(const RenderStyle&) override { return false; }
- virtual void didAttachRenderers() override;
- virtual void willDetachRenderers() override;
virtual void childrenChanged(const ChildChange&) override;
virtual void accessKeyAction(bool sendMouseEvents) override;
- // <optgroup> never has a renderer so we manually manage a cached style.
- void updateNonRenderStyle(RenderStyle& parentStyle);
- virtual RenderStyle* nonRendererStyle() const override;
- virtual PassRefPtr<RenderStyle> customStyleForRenderer(RenderStyle& parentStyle) override;
-
void recalcSelectOptions();
-
- RefPtr<RenderStyle> m_style;
};
NODE_TYPE_CASTS(HTMLOptGroupElement)
Modified: trunk/Source/WebCore/html/HTMLOptionElement.cpp (172590 => 172591)
--- trunk/Source/WebCore/html/HTMLOptionElement.cpp 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/html/HTMLOptionElement.cpp 2014-08-14 17:49:55 UTC (rev 172591)
@@ -88,24 +88,13 @@
return element.release();
}
-void HTMLOptionElement::didAttachRenderers()
-{
- // If after attaching nothing called styleForRenderer() on this node we
- // manually cache the value. This happens if our parent doesn't have a
- // renderer like <optgroup> or if it doesn't allow children like <select>.
- if (!m_style && parentNode()->renderStyle())
- updateNonRenderStyle(*parentNode()->renderStyle());
-}
-
-void HTMLOptionElement::willDetachRenderers()
-{
- m_style.clear();
-}
-
bool HTMLOptionElement::isFocusable() const
{
- // Option elements do not have a renderer so we check the renderStyle instead.
- return supportsFocus() && renderStyle() && renderStyle()->display() != NONE;
+ if (!supportsFocus())
+ return false;
+ // Option elements do not have a renderer.
+ auto* style = const_cast<HTMLOptionElement&>(*this).computedStyle();
+ return style && style->display() != NONE;
}
String HTMLOptionElement::text() const
@@ -300,26 +289,8 @@
setAttribute(labelAttr, label);
}
-void HTMLOptionElement::updateNonRenderStyle(RenderStyle& parentStyle)
+void HTMLOptionElement::willResetComputedStyle()
{
- m_style = document().ensureStyleResolver().styleForElement(this, &parentStyle);
-}
-
-RenderStyle* HTMLOptionElement::nonRendererStyle() const
-{
- return m_style.get();
-}
-
-PassRefPtr<RenderStyle> HTMLOptionElement::customStyleForRenderer(RenderStyle& parentStyle)
-{
- // styleForRenderer is called whenever a new style should be associated
- // with an Element so now is a good time to update our cached style.
- updateNonRenderStyle(parentStyle);
- return m_style;
-}
-
-void HTMLOptionElement::didRecalcStyle(Style::Change)
-{
// FIXME: This is nasty, we ask our owner select to repaint even if the new
// style is exactly the same.
if (auto select = ownerSelectElement()) {
Modified: trunk/Source/WebCore/html/HTMLOptionElement.h (172590 => 172591)
--- trunk/Source/WebCore/html/HTMLOptionElement.h 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/html/HTMLOptionElement.h 2014-08-14 17:49:55 UTC (rev 172591)
@@ -71,8 +71,6 @@
virtual bool isFocusable() const override;
virtual bool rendererIsNeeded(const RenderStyle&) override { return false; }
- virtual void didAttachRenderers() override;
- virtual void willDetachRenderers() override;
virtual void parseAttribute(const QualifiedName&, const AtomicString&) override;
@@ -81,18 +79,12 @@
virtual void childrenChanged(const ChildChange&) override;
- // <option> never has a renderer so we manually manage a cached style.
- void updateNonRenderStyle(RenderStyle& parentStyle);
- virtual RenderStyle* nonRendererStyle() const override;
- virtual PassRefPtr<RenderStyle> customStyleForRenderer(RenderStyle& parentStyle) override;
+ virtual void willResetComputedStyle() override;
- virtual void didRecalcStyle(Style::Change) override;
-
String collectOptionInnerText() const;
bool m_disabled;
bool m_isSelected;
- RefPtr<RenderStyle> m_style;
};
NODE_TYPE_CASTS(HTMLOptionElement)
Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (172590 => 172591)
--- trunk/Source/WebCore/rendering/RenderMenuList.cpp 2014-08-14 16:39:47 UTC (rev 172590)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp 2014-08-14 17:49:55 UTC (rev 172591)
@@ -222,7 +222,7 @@
if (theme().popupOptionSupportsTextIndent()) {
// Add in the option's text indent. We can't calculate percentage values for now.
float optionWidth = 0;
- if (RenderStyle* optionStyle = element->renderStyle())
+ if (RenderStyle* optionStyle = element->computedStyle())
optionWidth += minimumValueForLength(optionStyle->textIndent(), 0);
if (!text.isEmpty()) {
const Font& font = style().font();
@@ -272,7 +272,7 @@
Element* element = listItems[i];
if (isHTMLOptionElement(element)) {
text = toHTMLOptionElement(element)->textIndentedToRespectGroupLabel();
- m_optionStyle = element->renderStyle();
+ m_optionStyle = element->computedStyle();
}
}