<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[175439] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/175439">175439</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2014-10-31 16:46:20 -0700 (Fri, 31 Oct 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move -webkit-marquee-increment property to the new StyleBuilder
https://bugs.webkit.org/show_bug.cgi?id=138208

Reviewed by Andreas Kling.

Move -webkit-marquee-increment property from DeprecatedStyleBuilder to
the new StyleBuilder so that it is generated from CSSPropertyNames.in.
Custom code is used to set the value due to the !length.isUndefined()
check before calling setMarqueeIncrement().

Test: fast/css/webkit-marquee-increment-bad-value.html

* css/CSSPropertyNames.in:
* css/DeprecatedStyleBuilder.cpp:
(WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
(WebCore::ApplyPropertyLength::setValue): Deleted.
(WebCore::ApplyPropertyLength::applyValue): Deleted.
(WebCore::ApplyPropertyLength::createHandler): Deleted.
(WebCore::ApplyPropertyMarqueeIncrement::applyValue): Deleted.
(WebCore::ApplyPropertyMarqueeIncrement::createHandler): Deleted.
* css/StyleBuilderCustom.h:
(WebCore::StyleBuilderFunctions::applyValueWebkitMarqueeIncrement):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedStyleBuildercpp">trunk/Source/WebCore/css/DeprecatedStyleBuilder.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcsswebkitmarqueeincrementbadvalueexpectedtxt">trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcsswebkitmarqueeincrementbadvaluehtml">trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsfastcsswebkitmarqueeincrementbadvalueexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value-expected.txt (0 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value-expected.txt        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Makes sure we don't crash in the StyleBuilder if bad values are used for -webkit-marquee-increment property.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS No crash for 1px 2px value
+PASS No crash for url(&quot;resources/border-image.png&quot;) value
+PASS No crash for copy value
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcsswebkitmarqueeincrementbadvaluehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value.html (0 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/webkit-marquee-increment-bad-value.html        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;marquee id=&quot;myMarquee&quot;&gt;&lt;/marquee&gt;
+
+&lt;script&gt;
+description(&quot;Makes sure we don't crash in the StyleBuilder if bad values are used for -webkit-marquee-increment property.&quot;);
+
+var badValues = [
+    &quot;1px 2px&quot;, // a list.
+    &quot;url(\&quot;resources/border-image.png\&quot;)&quot;, // an image url.
+    &quot;copy&quot;, // a cursor.
+];
+
+var testElement = document.getElementById(&quot;myMarquee&quot;);
+for (var i = 0; i &lt; badValues.length; ++i) {
+    testElement.style[&quot;-webkit-marquee-increment&quot;] = badValues[i];
+    document.defaultView.getComputedStyle(testElement)[&quot;-webkit-marquee-increment&quot;];
+    testPassed(&quot;No crash for &quot; + badValues[i] + &quot; value&quot;);
+}
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (175438 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-10-31 23:38:12 UTC (rev 175438)
+++ trunk/Source/WebCore/ChangeLog        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2014-10-31  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Move -webkit-marquee-increment property to the new StyleBuilder
+        https://bugs.webkit.org/show_bug.cgi?id=138208
+
+        Reviewed by Andreas Kling.
+
+        Move -webkit-marquee-increment property from DeprecatedStyleBuilder to
+        the new StyleBuilder so that it is generated from CSSPropertyNames.in.
+        Custom code is used to set the value due to the !length.isUndefined()
+        check before calling setMarqueeIncrement().
+
+        Test: fast/css/webkit-marquee-increment-bad-value.html
+
+        * css/CSSPropertyNames.in:
+        * css/DeprecatedStyleBuilder.cpp:
+        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
+        (WebCore::ApplyPropertyLength::setValue): Deleted.
+        (WebCore::ApplyPropertyLength::applyValue): Deleted.
+        (WebCore::ApplyPropertyLength::createHandler): Deleted.
+        (WebCore::ApplyPropertyMarqueeIncrement::applyValue): Deleted.
+        (WebCore::ApplyPropertyMarqueeIncrement::createHandler): Deleted.
+        * css/StyleBuilderCustom.h:
+        (WebCore::StyleBuilderFunctions::applyValueWebkitMarqueeIncrement):
+
</ins><span class="cx"> 2014-10-31  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Brace cleanup in StyleResolver::adjustRenderStyle()
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (175438 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2014-10-31 23:38:12 UTC (rev 175438)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -413,7 +413,7 @@
</span><span class="cx"> -webkit-margin-start
</span><span class="cx"> -webkit-marquee
</span><span class="cx"> -webkit-marquee-direction [NewStyleBuilder]
</span><del>--webkit-marquee-increment
</del><ins>+-webkit-marquee-increment [NewStyleBuilder, Custom=Value]
</ins><span class="cx"> -webkit-marquee-repetition
</span><span class="cx"> -webkit-marquee-speed
</span><span class="cx"> -webkit-marquee-style [NewStyleBuilder, TypeName=EMarqueeBehavior, NameForMethods=MarqueeBehavior]
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedStyleBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedStyleBuilder.cpp (175438 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedStyleBuilder.cpp        2014-10-31 23:38:12 UTC (rev 175438)
+++ trunk/Source/WebCore/css/DeprecatedStyleBuilder.cpp        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -320,73 +320,6 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-enum LengthAuto { AutoDisabled = 0, AutoEnabled };
-enum LengthLegacyIntrinsic { LegacyIntrinsicDisabled = 0, LegacyIntrinsicEnabled };
-enum LengthIntrinsic { IntrinsicDisabled = 0, IntrinsicEnabled };
-enum LengthNone { NoneDisabled = 0, NoneEnabled };
-enum LengthUndefined { UndefinedDisabled = 0, UndefinedEnabled };
-template &lt;const Length&amp; (RenderStyle::*getterFunction)() const,
-          void (RenderStyle::*setterFunction)(Length),
-          Length (*initialFunction)(),
-          LengthAuto autoEnabled = AutoDisabled,
-          LengthLegacyIntrinsic legacyIntrinsicEnabled = LegacyIntrinsicDisabled,
-          LengthIntrinsic intrinsicEnabled = IntrinsicDisabled,
-          LengthNone noneEnabled = NoneDisabled,
-          LengthUndefined noneUndefined = UndefinedDisabled&gt;
-class ApplyPropertyLength {
-public:
-    static void setValue(RenderStyle* style, Length value) { (style-&gt;*setterFunction)(WTF::move(value)); }
-    static void applyValue(CSSPropertyID, StyleResolver* styleResolver, CSSValue* value)
-    {
-        if (!is&lt;CSSPrimitiveValue&gt;(*value))
-            return;
-
-        CSSPrimitiveValue&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(*value);
-        if (noneEnabled &amp;&amp; primitiveValue.getValueID() == CSSValueNone) {
-            if (noneUndefined)
-                setValue(styleResolver-&gt;style(), Length(Undefined));
-            else
-                setValue(styleResolver-&gt;style(), Length());
-        }
-        if (legacyIntrinsicEnabled) {
-            if (primitiveValue.getValueID() == CSSValueIntrinsic)
-                setValue(styleResolver-&gt;style(), Length(Intrinsic));
-            else if (primitiveValue.getValueID() == CSSValueMinIntrinsic)
-                setValue(styleResolver-&gt;style(), Length(MinIntrinsic));
-        }
-        if (intrinsicEnabled) {
-            if (primitiveValue.getValueID() == CSSValueWebkitMinContent)
-                setValue(styleResolver-&gt;style(), Length(MinContent));
-            else if (primitiveValue.getValueID() == CSSValueWebkitMaxContent)
-                setValue(styleResolver-&gt;style(), Length(MaxContent));
-            else if (primitiveValue.getValueID() == CSSValueWebkitFillAvailable)
-                setValue(styleResolver-&gt;style(), Length(FillAvailable));
-            else if (primitiveValue.getValueID() == CSSValueWebkitFitContent)
-                setValue(styleResolver-&gt;style(), Length(FitContent));
-        }
-
-        CSSToLengthConversionData conversionData = styleResolver-&gt;useSVGZoomRulesForLength() ?
-            styleResolver-&gt;state().cssToLengthConversionData().copyWithAdjustedZoom(1.0f)
-            : styleResolver-&gt;state().cssToLengthConversionData();
-        if (autoEnabled &amp;&amp; primitiveValue.getValueID() == CSSValueAuto)
-            setValue(styleResolver-&gt;style(), Length());
-        else if (primitiveValue.isLength()) {
-            Length length = primitiveValue.computeLength&lt;Length&gt;(conversionData);
-            length.setHasQuirk(primitiveValue.isQuirkValue());
-            setValue(styleResolver-&gt;style(), length);
-        } else if (primitiveValue.isPercentage())
-            setValue(styleResolver-&gt;style(), Length(primitiveValue.getDoubleValue(), Percent));
-        else if (primitiveValue.isCalculatedPercentageWithLength())
-            setValue(styleResolver-&gt;style(), Length(primitiveValue.cssCalcValue()-&gt;createCalculationValue(conversionData)));
-    }
-
-    static PropertyHandler createHandler()
-    {
-        PropertyHandler handler = ApplyPropertyDefaultBase&lt;const Length&amp;, getterFunction, Length, setterFunction, Length, initialFunction&gt;::createHandler();
-        return PropertyHandler(handler.inheritFunction(), handler.initialFunction(), &amp;applyValue);
-    }
-};
-
</del><span class="cx"> enum StringIdentBehavior { NothingMapsToNull = 0, MapNoneToNull, MapAutoToNull };
</span><span class="cx"> template &lt;StringIdentBehavior identBehavior, const AtomicString&amp; (RenderStyle::*getterFunction)() const, void (RenderStyle::*setterFunction)(const AtomicString&amp;), const AtomicString&amp; (*initialFunction)()&gt;
</span><span class="cx"> class ApplyPropertyString {
</span><span class="lines">@@ -1162,41 +1095,6 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class ApplyPropertyMarqueeIncrement {
-public:
-    static void applyValue(CSSPropertyID, StyleResolver* styleResolver, CSSValue* value)
-    {
-        if (!is&lt;CSSPrimitiveValue&gt;(*value))
-            return;
-
-        CSSPrimitiveValue&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(*value);
-        Length marqueeLength(Undefined);
-        switch (primitiveValue.getValueID()) {
-        case CSSValueSmall:
-            marqueeLength = Length(1, Fixed); // 1px.
-            break;
-        case CSSValueNormal:
-            marqueeLength = Length(6, Fixed); // 6px. The WinIE default.
-            break;
-        case CSSValueLarge:
-            marqueeLength = Length(36, Fixed); // 36px.
-            break;
-        case CSSValueInvalid:
-            marqueeLength = primitiveValue.convertToLength&lt;FixedIntegerConversion | PercentConversion | CalculatedConversion&gt;(styleResolver-&gt;state().cssToLengthConversionData().copyWithAdjustedZoom(1.0f));
-            break;
-        default:
-            break;
-        }
-        if (!marqueeLength.isUndefined())
-            styleResolver-&gt;style()-&gt;setMarqueeIncrement(marqueeLength);
-    }
-    static PropertyHandler createHandler()
-    {
-        PropertyHandler handler = ApplyPropertyLength&lt;&amp;RenderStyle::marqueeIncrement, &amp;RenderStyle::setMarqueeIncrement, &amp;RenderStyle::initialMarqueeIncrement&gt;::createHandler();
-        return PropertyHandler(handler.inheritFunction(), handler.initialFunction(), &amp;applyValue);
-    }
-};
-
</del><span class="cx"> class ApplyPropertyMarqueeRepetition {
</span><span class="cx"> public:
</span><span class="cx">     static void applyValue(CSSPropertyID, StyleResolver* styleResolver, CSSValue* value)
</span><span class="lines">@@ -2245,7 +2143,6 @@
</span><span class="cx">     setPropertyHandler(CSSPropertyWebkitFontVariantLigatures, ApplyPropertyFontVariantLigatures::createHandler());
</span><span class="cx">     setPropertyHandler(CSSPropertyWebkitHyphenateCharacter, ApplyPropertyString&lt;MapAutoToNull, &amp;RenderStyle::hyphenationString, &amp;RenderStyle::setHyphenationString, &amp;RenderStyle::initialHyphenationString&gt;::createHandler());
</span><span class="cx">     setPropertyHandler(CSSPropertyWebkitLineGrid, ApplyPropertyString&lt;MapNoneToNull, &amp;RenderStyle::lineGrid, &amp;RenderStyle::setLineGrid, &amp;RenderStyle::initialLineGrid&gt;::createHandler());
</span><del>-    setPropertyHandler(CSSPropertyWebkitMarqueeIncrement, ApplyPropertyMarqueeIncrement::createHandler());
</del><span class="cx">     setPropertyHandler(CSSPropertyWebkitMarqueeRepetition, ApplyPropertyMarqueeRepetition::createHandler());
</span><span class="cx">     setPropertyHandler(CSSPropertyWebkitMarqueeSpeed, ApplyPropertyMarqueeSpeed::createHandler());
</span><span class="cx">     setPropertyHandler(CSSPropertyWebkitMaskBoxImageOutset, ApplyPropertyBorderImageModifier&lt;BorderMask, Outset&gt;::createHandler());
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (175438 => 175439)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2014-10-31 23:38:12 UTC (rev 175438)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2014-10-31 23:46:20 UTC (rev 175439)
</span><span class="lines">@@ -42,6 +42,30 @@
</span><span class="cx">     styleResolver.style()-&gt;setHyphenationLimitLines(number);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline void applyValueWebkitMarqueeIncrement(StyleResolver&amp; styleResolver, CSSValue&amp; value)
+{
+    auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
+    Length marqueeLength(Undefined);
+    switch (primitiveValue.getValueID()) {
+    case CSSValueSmall:
+        marqueeLength = Length(1, Fixed); // 1px.
+        break;
+    case CSSValueNormal:
+        marqueeLength = Length(6, Fixed); // 6px. The WinIE default.
+        break;
+    case CSSValueLarge:
+        marqueeLength = Length(36, Fixed); // 36px.
+        break;
+    case CSSValueInvalid:
+        marqueeLength = primitiveValue.convertToLength&lt;FixedIntegerConversion | PercentConversion | CalculatedConversion&gt;(styleResolver.state().cssToLengthConversionData().copyWithAdjustedZoom(1.0f));
+        break;
+    default:
+        break;
+    }
+    if (!marqueeLength.isUndefined())
+        styleResolver.style()-&gt;setMarqueeIncrement(marqueeLength);
+}
+
</ins><span class="cx"> } // namespace StyleBuilderFunctions
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre>
</div>
</div>

</body>
</html>