Title: [95301] trunk
Revision
95301
Author
infe...@chromium.org
Date
2011-09-16 10:23:52 -0700 (Fri, 16 Sep 2011)

Log Message

cachedFont not getting updated for inline SVG text.
https://bugs.webkit.org/show_bug.cgi?id=68060

Reviewed by Nikolas Zimmermann.

Source/WebCore: 

The cached scaledFont needs to be updated on every style set call. It
is not similar to m_style which can get derived from parent's style and
hence will get automatically updated on ancestor's style change. This is
required, otherwise we will maintain stale font list in cached scaledFont
when custom fonts are retired on Document::recalcStyle.

Test: svg/text/text-style-recalc-crash.html

* rendering/svg/RenderSVGInlineText.cpp:
(WebCore::RenderSVGInlineText::styleDidChange):
(WebCore::RenderSVGInlineText::setStyle):
* rendering/svg/RenderSVGInlineText.h:

LayoutTests: 

* svg/text/text-style-recalc-crash-expected.txt: Added.
* svg/text/text-style-recalc-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (95300 => 95301)


--- trunk/LayoutTests/ChangeLog	2011-09-16 16:58:38 UTC (rev 95300)
+++ trunk/LayoutTests/ChangeLog	2011-09-16 17:23:52 UTC (rev 95301)
@@ -1,3 +1,13 @@
+2011-09-16  Abhishek Arya  <infe...@chromium.org>
+
+        cachedFont not getting updated for inline SVG text.
+        https://bugs.webkit.org/show_bug.cgi?id=68060
+
+        Reviewed by Nikolas Zimmermann.
+
+        * svg/text/text-style-recalc-crash-expected.txt: Added.
+        * svg/text/text-style-recalc-crash.html: Added.
+
 2011-09-16  Csaba Osztrogonác  <o...@webkit.org>
 
         Unreviewed rolling out r95277.

Added: trunk/LayoutTests/svg/text/text-style-recalc-crash-expected.txt (0 => 95301)


--- trunk/LayoutTests/svg/text/text-style-recalc-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/svg/text/text-style-recalc-crash-expected.txt	2011-09-16 17:23:52 UTC (rev 95301)
@@ -0,0 +1,3 @@
+Test passes if it does not crash. 
+PASS
+

Added: trunk/LayoutTests/svg/text/text-style-recalc-crash.html (0 => 95301)


--- trunk/LayoutTests/svg/text/text-style-recalc-crash.html	                        (rev 0)
+++ trunk/LayoutTests/svg/text/text-style-recalc-crash.html	2011-09-16 17:23:52 UTC (rev 95301)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+Test passes if it does not crash.
+<svg viewBox="0 0 1 1">
+<font-face font-family="A">
+<font-face-src>
+<font-face-uri xlink:href=""
+</font-face-src>
+</font-face>
+<g font-family="A">
+<text>PASS</text>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    document.execCommand("SelectAll");
+</script>
+<g>
+<text></text>
+</g>
+</g>
+</svg>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (95300 => 95301)


--- trunk/Source/WebCore/ChangeLog	2011-09-16 16:58:38 UTC (rev 95300)
+++ trunk/Source/WebCore/ChangeLog	2011-09-16 17:23:52 UTC (rev 95301)
@@ -1,3 +1,23 @@
+2011-09-16  Abhishek Arya  <infe...@chromium.org>
+
+        cachedFont not getting updated for inline SVG text.
+        https://bugs.webkit.org/show_bug.cgi?id=68060
+
+        Reviewed by Nikolas Zimmermann.
+
+        The cached scaledFont needs to be updated on every style set call. It
+        is not similar to m_style which can get derived from parent's style and
+        hence will get automatically updated on ancestor's style change. This is
+        required, otherwise we will maintain stale font list in cached scaledFont
+        when custom fonts are retired on Document::recalcStyle.
+
+        Test: svg/text/text-style-recalc-crash.html
+
+        * rendering/svg/RenderSVGInlineText.cpp:
+        (WebCore::RenderSVGInlineText::styleDidChange):
+        (WebCore::RenderSVGInlineText::setStyle):
+        * rendering/svg/RenderSVGInlineText.h:
+
 2011-09-16  Antti Koivisto  <an...@apple.com>
 
         REGRESSION (r95052): SelectorChecker identifier filter not working

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp (95300 => 95301)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp	2011-09-16 16:58:38 UTC (rev 95300)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp	2011-09-16 17:23:52 UTC (rev 95301)
@@ -87,8 +87,6 @@
         // The text metrics may be influenced by style changes.
         if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAncestor(this))
             textRenderer->setNeedsPositioningValuesUpdate();
-
-        updateScaledFont();
     }
 
     const RenderStyle* newStyle = style();
@@ -223,6 +221,19 @@
     return createVisiblePosition(offset + closestDistanceBox->start(), offset > 0 ? VP_UPSTREAM_IF_POSSIBLE : DOWNSTREAM);
 }
 
+void RenderSVGInlineText::setStyle(PassRefPtr<RenderStyle> style)
+{
+    RenderText::setStyle(style);
+
+    // The cached scaledFont needs to be updated on every style set call. It
+    // is not similar to m_style which can get derived from parent's style and
+    // hence will get automatically updated on ancestor's style change. This is
+    // required, otherwise we will maintain stale font list in cached scaledFont
+    // when custom fonts are retired on Document::recalcStyle. See webkit bug
+    // https://bugs.webkit.org/show_bug.cgi?id=68060.
+    updateScaledFont();
+}
+
 void RenderSVGInlineText::updateScaledFont()
 {
     computeNewScaledFontForStyle(this, style(), m_scalingFactor, m_scaledFont);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h (95300 => 95301)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h	2011-09-16 16:58:38 UTC (rev 95300)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h	2011-09-16 17:23:52 UTC (rev 95301)
@@ -49,6 +49,8 @@
     virtual const char* renderName() const { return "RenderSVGInlineText"; }
 
     virtual void willBeDestroyed();
+    
+    virtual void setStyle(PassRefPtr<RenderStyle>);
     virtual void styleDidChange(StyleDifference, const RenderStyle*);
 
     // FIXME: We need objectBoundingBox for DRT results and filters at the moment.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to