<!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>[210215] trunk/Source/WebCore</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/210215">210215</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-12-31 01:17:36 -0800 (Sat, 31 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove PassRefPtr use from the &quot;css&quot; directory, related cleanup
https://bugs.webkit.org/show_bug.cgi?id=166628

Reviewed by Alex Christensen.

* css/CSSCalculationValue.cpp:
(WebCore::CSSCalcBinaryOperation::create): Take RefPtr&amp;&amp; instead of PassRefPtr.
Also added some checks for null. Code here is really inconsistent about null;
probably should change from RefPtr to Ref at some point.
(WebCore::CSSCalcBinaryOperation::createSimplified): Ditto.
(WebCore::CSSCalcBinaryOperation::CSSCalcBinaryOperation): Take Ref&amp;&amp; instead
of PassRefPtr.

* css/CSSCrossfadeValue.cpp:
(WebCore::subimageKnownToBeOpaque): Take a reference instead of a pointer.
(WebCore::CSSCrossfadeValue::SubimageObserver::SubimageObserver): Moved here
from the header, and renamed.
(WebCore::CSSCrossfadeValue::SubimageObserver::imageChanged): Ditto.
(WebCore::CSSCrossfadeValue::CSSCrossfadeValue): Moved here from the header.
(WebCore::CSSCrossfadeValue::create): Ditto.
(WebCore::CSSCrossfadeValue::~CSSCrossfadeValue): Updated for data member name change.
(WebCore::CSSCrossfadeValue::fixedSize): Take a reference. Also rewrote size math to
take advantage of FloatSize multiplication and addition operators.
(WebCore::CSSCrossfadeValue::knownToBeOpaque): Take a reference.
(WebCore::CSSCrossfadeValue::loadSubimages): Set m_subimagesAreReady rather than
calling setReady on the subimage observer.
(WebCore::CSSCrossfadeValue::image): Return a raw pointer rather than a RefPtr.
Take a reference instead of a pointer.
(WebCore::CSSCrossfadeValue::crossfadeChanged): Removed unused rect argument.
Rewrote to use modern for loop.
* css/CSSCrossfadeValue.h: Updated for above changes.

* css/CSSGradientValue.cpp:
(WebCore::createGradient): Added. Helper so the function below can use Ref rather
than RefPtr, and it's also nice to factor out this &quot;poor man's virtual function&quot;.
(WebCore::CSSGradientValue::image): Take a reference rather than a pointer.
(WebCore::clone): Added. Helper like createGradient above.
(WebCore::CSSGradientValue::gradientWithStylesResolved): Take a reference rather
than a pointer. Simplified by using the helper above.
(WebCore::CSSGradientValue::knownToBeOpaque): Removed unused argument. Rewrote to
use a modern for loop.
* css/CSSGradientValue.h: Updated for above changes.

* css/CSSImageGeneratorValue.cpp: Moved the CachedGeneratedImage class in here
from the header. Also changed it to use const and Ref.
(WebCore::CSSImageGeneratorValue::addClient): Take a reference rather than a pointer.
(WebCore::CSSImageGeneratorValue::removeClient): Ditto.
(WebCore::CSSImageGeneratorValue::cachedImageForSize): Updated since image now returns
a reference rather than a pointer.
(WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Take a reference rather
than PassRefPtr.
(WebCore::CSSImageGeneratorValue::image): Take a reference rather than a pointer.
(WebCore::CSSImageGeneratorValue::fixedSize): Ditto.
(WebCore::CSSImageGeneratorValue::knownToBeOpaque): Ditto.
* css/CSSImageGeneratorValue.h: Updated for above changes.

* css/CSSValuePool.cpp:
(WebCore::CSSValuePool::createFontFaceValue): Return a RefPtr rather than PassRefPtr.
* css/CSSValuePool.h: Updated for the above.

* css/StyleBuilderConverter.h: Change convertStyleImage and convertShapeValue to
return RefPtr instead of PassRefPtr.

* css/StyleBuilderCustom.h:
(WebCore::StyleBuilderCustom::applyValueContent): Since gradientWithStylesResolved
returns a Ref now, no need to dereference it any more. This also removes reference
count churn since we are now passing a Ref temporary to a Ref&amp;&amp;.
* css/StyleResolver.cpp:
(WebCore::StyleResolver::styleImage): Ditto.

* platform/graphics/GradientImage.cpp:
(WebCore::GradientImage::GradientImage): Pass generator as a reference rather than
as a PassRefPtr.
(WebCore::GradientImage::draw): Updated since m_gradient is now a Ref rather than
a RefPtr.
(WebCore::GradientImage::drawPattern): Ditto.
* platform/graphics/GradientImage.h: Updated for the above changes. Make things
private rather than protected since this class is final.

* rendering/style/StyleGeneratedImage.cpp:
(WebCore::StyleGeneratedImage::imageSize): Pass renderer as a reference. Later, we
should change the interface to this function, too.
(WebCore::StyleGeneratedImage::addClient): Ditto.
(WebCore::StyleGeneratedImage::removeClient): Ditto.
(WebCore::StyleGeneratedImage::image): Ditto.
(WebCore::StyleGeneratedImage::knownToBeOpaque): Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSCalculationValuecpp">trunk/Source/WebCore/css/CSSCalculationValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSCrossfadeValuecpp">trunk/Source/WebCore/css/CSSCrossfadeValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSCrossfadeValueh">trunk/Source/WebCore/css/CSSCrossfadeValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSGradientValuecpp">trunk/Source/WebCore/css/CSSGradientValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSGradientValueh">trunk/Source/WebCore/css/CSSGradientValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSImageGeneratorValuecpp">trunk/Source/WebCore/css/CSSImageGeneratorValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSImageGeneratorValueh">trunk/Source/WebCore/css/CSSImageGeneratorValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSValuePoolcpp">trunk/Source/WebCore/css/CSSValuePool.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSValuePoolh">trunk/Source/WebCore/css/CSSValuePool.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolvercpp">trunk/Source/WebCore/css/StyleResolver.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGradientImagecpp">trunk/Source/WebCore/platform/graphics/GradientImage.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGradientImageh">trunk/Source/WebCore/platform/graphics/GradientImage.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleGeneratedImagecpp">trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/ChangeLog        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -1,3 +1,92 @@
</span><ins>+2016-12-30  Darin Adler  &lt;darin@apple.com&gt;
+
+        Remove PassRefPtr use from the &quot;css&quot; directory, related cleanup
+        https://bugs.webkit.org/show_bug.cgi?id=166628
+
+        Reviewed by Alex Christensen.
+
+        * css/CSSCalculationValue.cpp:
+        (WebCore::CSSCalcBinaryOperation::create): Take RefPtr&amp;&amp; instead of PassRefPtr.
+        Also added some checks for null. Code here is really inconsistent about null;
+        probably should change from RefPtr to Ref at some point.
+        (WebCore::CSSCalcBinaryOperation::createSimplified): Ditto.
+        (WebCore::CSSCalcBinaryOperation::CSSCalcBinaryOperation): Take Ref&amp;&amp; instead
+        of PassRefPtr.
+
+        * css/CSSCrossfadeValue.cpp:
+        (WebCore::subimageKnownToBeOpaque): Take a reference instead of a pointer.
+        (WebCore::CSSCrossfadeValue::SubimageObserver::SubimageObserver): Moved here
+        from the header, and renamed.
+        (WebCore::CSSCrossfadeValue::SubimageObserver::imageChanged): Ditto.
+        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue): Moved here from the header.
+        (WebCore::CSSCrossfadeValue::create): Ditto.
+        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue): Updated for data member name change.
+        (WebCore::CSSCrossfadeValue::fixedSize): Take a reference. Also rewrote size math to
+        take advantage of FloatSize multiplication and addition operators.
+        (WebCore::CSSCrossfadeValue::knownToBeOpaque): Take a reference.
+        (WebCore::CSSCrossfadeValue::loadSubimages): Set m_subimagesAreReady rather than
+        calling setReady on the subimage observer.
+        (WebCore::CSSCrossfadeValue::image): Return a raw pointer rather than a RefPtr.
+        Take a reference instead of a pointer.
+        (WebCore::CSSCrossfadeValue::crossfadeChanged): Removed unused rect argument.
+        Rewrote to use modern for loop.
+        * css/CSSCrossfadeValue.h: Updated for above changes.
+
+        * css/CSSGradientValue.cpp:
+        (WebCore::createGradient): Added. Helper so the function below can use Ref rather
+        than RefPtr, and it's also nice to factor out this &quot;poor man's virtual function&quot;.
+        (WebCore::CSSGradientValue::image): Take a reference rather than a pointer.
+        (WebCore::clone): Added. Helper like createGradient above.
+        (WebCore::CSSGradientValue::gradientWithStylesResolved): Take a reference rather
+        than a pointer. Simplified by using the helper above.
+        (WebCore::CSSGradientValue::knownToBeOpaque): Removed unused argument. Rewrote to
+        use a modern for loop.
+        * css/CSSGradientValue.h: Updated for above changes.
+
+        * css/CSSImageGeneratorValue.cpp: Moved the CachedGeneratedImage class in here
+        from the header. Also changed it to use const and Ref.
+        (WebCore::CSSImageGeneratorValue::addClient): Take a reference rather than a pointer.
+        (WebCore::CSSImageGeneratorValue::removeClient): Ditto.
+        (WebCore::CSSImageGeneratorValue::cachedImageForSize): Updated since image now returns
+        a reference rather than a pointer.
+        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Take a reference rather
+        than PassRefPtr.
+        (WebCore::CSSImageGeneratorValue::image): Take a reference rather than a pointer.
+        (WebCore::CSSImageGeneratorValue::fixedSize): Ditto.
+        (WebCore::CSSImageGeneratorValue::knownToBeOpaque): Ditto.
+        * css/CSSImageGeneratorValue.h: Updated for above changes.
+
+        * css/CSSValuePool.cpp:
+        (WebCore::CSSValuePool::createFontFaceValue): Return a RefPtr rather than PassRefPtr.
+        * css/CSSValuePool.h: Updated for the above.
+
+        * css/StyleBuilderConverter.h: Change convertStyleImage and convertShapeValue to
+        return RefPtr instead of PassRefPtr.
+
+        * css/StyleBuilderCustom.h:
+        (WebCore::StyleBuilderCustom::applyValueContent): Since gradientWithStylesResolved
+        returns a Ref now, no need to dereference it any more. This also removes reference
+        count churn since we are now passing a Ref temporary to a Ref&amp;&amp;.
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::styleImage): Ditto.
+
+        * platform/graphics/GradientImage.cpp:
+        (WebCore::GradientImage::GradientImage): Pass generator as a reference rather than
+        as a PassRefPtr.
+        (WebCore::GradientImage::draw): Updated since m_gradient is now a Ref rather than
+        a RefPtr.
+        (WebCore::GradientImage::drawPattern): Ditto.
+        * platform/graphics/GradientImage.h: Updated for the above changes. Make things
+        private rather than protected since this class is final.
+
+        * rendering/style/StyleGeneratedImage.cpp:
+        (WebCore::StyleGeneratedImage::imageSize): Pass renderer as a reference. Later, we
+        should change the interface to this function, too.
+        (WebCore::StyleGeneratedImage::addClient): Ditto.
+        (WebCore::StyleGeneratedImage::removeClient): Ditto.
+        (WebCore::StyleGeneratedImage::image): Ditto.
+        (WebCore::StyleGeneratedImage::knownToBeOpaque): Ditto.
+
</ins><span class="cx"> 2016-12-30  Olivier Blin  &lt;olivier.blin@softathome.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] fix buffer over-read in RenderThemeEfl::mediaControlsStyleSheet()
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCalculationValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCalculationValue.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCalculationValue.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSCalculationValue.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -200,7 +200,7 @@
</span><span class="cx"> 
</span><span class="cx">     static RefPtr&lt;CSSCalcPrimitiveValue&gt; create(double value, CSSPrimitiveValue::UnitType type, bool isInteger)
</span><span class="cx">     {
</span><del>-        if (std::isnan(value) || std::isinf(value))
</del><ins>+        if (!std::isfinite(value))
</ins><span class="cx">             return nullptr;
</span><span class="cx">         return adoptRef(new CSSCalcPrimitiveValue(CSSPrimitiveValue::create(value, type), isInteger));
</span><span class="cx">     }
</span><span class="lines">@@ -341,23 +341,27 @@
</span><span class="cx"> class CSSCalcBinaryOperation final : public CSSCalcExpressionNode {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    static RefPtr&lt;CSSCalcBinaryOperation&gt; create(CalcOperator op, PassRefPtr&lt;CSSCalcExpressionNode&gt; leftSide, PassRefPtr&lt;CSSCalcExpressionNode&gt; rightSide)
</del><ins>+    static RefPtr&lt;CSSCalcBinaryOperation&gt; create(CalcOperator op, RefPtr&lt;CSSCalcExpressionNode&gt;&amp;&amp; leftSide, RefPtr&lt;CSSCalcExpressionNode&gt;&amp;&amp; rightSide)
</ins><span class="cx">     {
</span><ins>+        if (!leftSide || !rightSide)
+            return nullptr;
+
</ins><span class="cx">         ASSERT(leftSide-&gt;category() &lt; CalcOther);
</span><span class="cx">         ASSERT(rightSide-&gt;category() &lt; CalcOther);
</span><span class="cx"> 
</span><del>-        CalculationCategory newCategory = determineCategory(*leftSide, *rightSide, op);
-
</del><ins>+        auto newCategory = determineCategory(*leftSide, *rightSide, op);
</ins><span class="cx">         if (newCategory == CalcOther)
</span><span class="cx">             return nullptr;
</span><del>-
-        return adoptRef(new CSSCalcBinaryOperation(newCategory, op, leftSide, rightSide));
</del><ins>+        return adoptRef(new CSSCalcBinaryOperation(newCategory, op, leftSide.releaseNonNull(), rightSide.releaseNonNull()));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static RefPtr&lt;CSSCalcExpressionNode&gt; createSimplified(CalcOperator op, PassRefPtr&lt;CSSCalcExpressionNode&gt; leftSide, PassRefPtr&lt;CSSCalcExpressionNode&gt; rightSide)
</del><ins>+    static RefPtr&lt;CSSCalcExpressionNode&gt; createSimplified(CalcOperator op, RefPtr&lt;CSSCalcExpressionNode&gt;&amp;&amp; leftSide, RefPtr&lt;CSSCalcExpressionNode&gt;&amp;&amp; rightSide)
</ins><span class="cx">     {
</span><del>-        CalculationCategory leftCategory = leftSide-&gt;category();
-        CalculationCategory rightCategory = rightSide-&gt;category();
</del><ins>+        if (!leftSide || !rightSide)
+            return nullptr;
+
+        auto leftCategory = leftSide-&gt;category();
+        auto rightCategory = rightSide-&gt;category();
</ins><span class="cx">         ASSERT(leftCategory &lt; CalcOther);
</span><span class="cx">         ASSERT(rightCategory &lt; CalcOther);
</span><span class="cx"> 
</span><span class="lines">@@ -391,25 +395,25 @@
</span><span class="cx">         } else {
</span><span class="cx">             // Simplify multiplying or dividing by a number for simplifiable types.
</span><span class="cx">             ASSERT(op == CalcMultiply || op == CalcDivide);
</span><del>-            CSSCalcExpressionNode* numberSide = getNumberSide(*leftSide, *rightSide);
</del><ins>+            auto* numberSide = getNumberSide(*leftSide, *rightSide);
</ins><span class="cx">             if (!numberSide)
</span><del>-                return create(op, leftSide, rightSide);
</del><ins>+                return create(op, leftSide.releaseNonNull(), rightSide.releaseNonNull());
</ins><span class="cx">             if (numberSide == leftSide &amp;&amp; op == CalcDivide)
</span><span class="cx">                 return nullptr;
</span><del>-            CSSCalcExpressionNode* otherSide = leftSide == numberSide ? rightSide.get() : leftSide.get();
</del><ins>+            auto&amp; otherSide = leftSide == numberSide ? *rightSide : *leftSide;
</ins><span class="cx"> 
</span><span class="cx">             double number = numberSide-&gt;doubleValue();
</span><del>-            if (std::isnan(number) || std::isinf(number))
</del><ins>+            if (!std::isfinite(number))
</ins><span class="cx">                 return nullptr;
</span><span class="cx">             if (op == CalcDivide &amp;&amp; !number)
</span><span class="cx">                 return nullptr;
</span><span class="cx"> 
</span><del>-            CSSPrimitiveValue::UnitType otherType = otherSide-&gt;primitiveType();
</del><ins>+            auto otherType = otherSide.primitiveType();
</ins><span class="cx">             if (hasDoubleValue(otherType))
</span><del>-                return CSSCalcPrimitiveValue::create(evaluateOperator(op, otherSide-&gt;doubleValue(), number), otherType, isInteger);
</del><ins>+                return CSSCalcPrimitiveValue::create(evaluateOperator(op, otherSide.doubleValue(), number), otherType, isInteger);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return create(op, leftSide, rightSide);
</del><ins>+        return create(op, leftSide.releaseNonNull(), rightSide.releaseNonNull());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="lines">@@ -420,10 +424,10 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;CalcExpressionNode&gt; createCalcExpression(const CSSToLengthConversionData&amp; conversionData) const final
</span><span class="cx">     {
</span><del>-        std::unique_ptr&lt;CalcExpressionNode&gt; left(m_leftSide-&gt;createCalcExpression(conversionData));
</del><ins>+        auto left = m_leftSide-&gt;createCalcExpression(conversionData);
</ins><span class="cx">         if (!left)
</span><span class="cx">             return nullptr;
</span><del>-        std::unique_ptr&lt;CalcExpressionNode&gt; right(m_rightSide-&gt;createCalcExpression(conversionData));
</del><ins>+        auto right = m_rightSide-&gt;createCalcExpression(conversionData);
</ins><span class="cx">         if (!right)
</span><span class="cx">             return nullptr;
</span><span class="cx">         return std::make_unique&lt;CalcExpressionBinaryOperation&gt;(WTFMove(left), WTFMove(right), m_operator);
</span><span class="lines">@@ -505,10 +509,10 @@
</span><span class="cx">         return CSSPrimitiveValue::CSS_UNKNOWN;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    CSSCalcBinaryOperation(CalculationCategory category, CalcOperator op, PassRefPtr&lt;CSSCalcExpressionNode&gt; leftSide, PassRefPtr&lt;CSSCalcExpressionNode&gt; rightSide)
-        : CSSCalcExpressionNode(category, isIntegerResult(op, *leftSide, *rightSide))
-        , m_leftSide(leftSide)
-        , m_rightSide(rightSide)
</del><ins>+    CSSCalcBinaryOperation(CalculationCategory category, CalcOperator op, Ref&lt;CSSCalcExpressionNode&gt;&amp;&amp; leftSide, Ref&lt;CSSCalcExpressionNode&gt;&amp;&amp; rightSide)
+        : CSSCalcExpressionNode(category, isIntegerResult(op, leftSide.get(), rightSide.get()))
+        , m_leftSide(WTFMove(leftSide))
+        , m_rightSide(WTFMove(rightSide))
</ins><span class="cx">         , m_operator(op)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="lines">@@ -632,7 +636,7 @@
</span><span class="cx">             if (!parseValueTerm(tokens, depth, &amp;rhs))
</span><span class="cx">                 return false;
</span><span class="cx">             
</span><del>-            result-&gt;value = CSSCalcBinaryOperation::createSimplified(static_cast&lt;CalcOperator&gt;(operatorCharacter), result-&gt;value, rhs.value);
</del><ins>+            result-&gt;value = CSSCalcBinaryOperation::createSimplified(static_cast&lt;CalcOperator&gt;(operatorCharacter), WTFMove(result-&gt;value), WTFMove(rhs.value));
</ins><span class="cx"> 
</span><span class="cx">             if (!result-&gt;value)
</span><span class="cx">                 return false;
</span><span class="lines">@@ -664,7 +668,7 @@
</span><span class="cx">             if (!parseValueMultiplicativeExpression(tokens, depth, &amp;rhs))
</span><span class="cx">                 return false;
</span><span class="cx">             
</span><del>-            result-&gt;value = CSSCalcBinaryOperation::createSimplified(static_cast&lt;CalcOperator&gt;(operatorCharacter), result-&gt;value, rhs.value);
</del><ins>+            result-&gt;value = CSSCalcBinaryOperation::createSimplified(static_cast&lt;CalcOperator&gt;(operatorCharacter), WTFMove(result-&gt;value), WTFMove(rhs.value));
</ins><span class="cx">             if (!result-&gt;value)
</span><span class="cx">                 return false;
</span><span class="cx">         }
</span><span class="lines">@@ -689,7 +693,7 @@
</span><span class="cx">     switch (node.type()) {
</span><span class="cx">     case CalcExpressionNodeNumber: {
</span><span class="cx">         float value = toCalcExpressionNumber(node).value();
</span><del>-        return CSSCalcPrimitiveValue::create(CSSPrimitiveValue::create(value, CSSPrimitiveValue::CSS_NUMBER), value == truncf(value));
</del><ins>+        return CSSCalcPrimitiveValue::create(CSSPrimitiveValue::create(value, CSSPrimitiveValue::CSS_NUMBER), value == std::trunc(value));
</ins><span class="cx">     }
</span><span class="cx">     case CalcExpressionNodeLength:
</span><span class="cx">         return createCSS(toCalcExpressionLength(node).length(), style);
</span><span class="lines">@@ -705,9 +709,7 @@
</span><span class="cx">     }
</span><span class="cx">     case CalcExpressionNodeUndefined:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-        return nullptr;
</del><span class="cx">     }
</span><del>-    ASSERT_NOT_REACHED();
</del><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -729,9 +731,7 @@
</span><span class="cx">     case Relative:
</span><span class="cx">     case Undefined:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-        return nullptr;
</del><span class="cx">     }
</span><del>-    ASSERT_NOT_REACHED();
</del><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -738,14 +738,15 @@
</span><span class="cx"> RefPtr&lt;CSSCalcValue&gt; CSSCalcValue::create(const CSSParserTokenRange&amp; tokens, ValueRange range)
</span><span class="cx"> {
</span><span class="cx">     CSSCalcExpressionNodeParser parser;
</span><del>-    RefPtr&lt;CSSCalcExpressionNode&gt; expression = parser.parseCalc(tokens);
-    return expression ? adoptRef(new CSSCalcValue(expression.releaseNonNull(), range != ValueRangeAll)) : nullptr;
-
</del><ins>+    auto expression = parser.parseCalc(tokens);
+    if (!expression)
+        return nullptr;
+    return adoptRef(new CSSCalcValue(expression.releaseNonNull(), range != ValueRangeAll));
</ins><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> RefPtr&lt;CSSCalcValue&gt; CSSCalcValue::create(const CalculationValue&amp; value, const RenderStyle&amp; style)
</span><span class="cx"> {
</span><del>-    RefPtr&lt;CSSCalcExpressionNode&gt; expression = createCSS(value.expression(), style);
</del><ins>+    auto expression = createCSS(value.expression(), style);
</ins><span class="cx">     if (!expression)
</span><span class="cx">         return nullptr;
</span><span class="cx">     return adoptRef(new CSSCalcValue(expression.releaseNonNull(), value.shouldClampToNonNegative()));
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCrossfadeValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCrossfadeValue.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -45,10 +45,10 @@
</span><span class="cx">     return blend(from, to, progress);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool subimageKnownToBeOpaque(const CSSValue&amp; value, const RenderElement* renderer)
</del><ins>+static bool subimageKnownToBeOpaque(const CSSValue&amp; value, const RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><span class="cx">     if (is&lt;CSSImageValue&gt;(value))
</span><del>-        return downcast&lt;CSSImageValue&gt;(value).knownToBeOpaque(renderer);
</del><ins>+        return downcast&lt;CSSImageValue&gt;(value).knownToBeOpaque(&amp;renderer);
</ins><span class="cx"> 
</span><span class="cx">     if (is&lt;CSSImageGeneratorValue&gt;(value))
</span><span class="cx">         return downcast&lt;CSSImageGeneratorValue&gt;(value).knownToBeOpaque(renderer);
</span><span class="lines">@@ -58,12 +58,37 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline CSSCrossfadeValue::SubimageObserver::SubimageObserver(CSSCrossfadeValue&amp; owner)
+    : m_owner(owner)
+{
+}
+
+void CSSCrossfadeValue::SubimageObserver::imageChanged(CachedImage*, const IntRect*)
+{
+    m_owner.crossfadeChanged();
+}
+
+inline CSSCrossfadeValue::CSSCrossfadeValue(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed)
+    : CSSImageGeneratorValue(CrossfadeClass)
+    , m_fromValue(WTFMove(fromValue))
+    , m_toValue(WTFMove(toValue))
+    , m_percentageValue(WTFMove(percentageValue))
+    , m_subimageObserver(*this)
+    , m_isPrefixed(prefixed)
+{
+}
+
+Ref&lt;CSSCrossfadeValue&gt; CSSCrossfadeValue::create(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed)
+{
+    return adoptRef(*new CSSCrossfadeValue(WTFMove(fromValue), WTFMove(toValue), WTFMove(percentageValue), prefixed));
+}
+
</ins><span class="cx"> CSSCrossfadeValue::~CSSCrossfadeValue()
</span><span class="cx"> {
</span><span class="cx">     if (m_cachedFromImage)
</span><del>-        m_cachedFromImage-&gt;removeClient(m_crossfadeSubimageObserver);
</del><ins>+        m_cachedFromImage-&gt;removeClient(m_subimageObserver);
</ins><span class="cx">     if (m_cachedToImage)
</span><del>-        m_cachedToImage-&gt;removeClient(m_crossfadeSubimageObserver);
</del><ins>+        m_cachedToImage-&gt;removeClient(m_subimageObserver);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String CSSCrossfadeValue::customCSSText() const
</span><span class="lines">@@ -82,7 +107,7 @@
</span><span class="cx">     return result.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatSize CSSCrossfadeValue::fixedSize(const RenderElement* renderer)
</del><ins>+FloatSize CSSCrossfadeValue::fixedSize(const RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><span class="cx">     float percentage = m_percentageValue-&gt;floatValue();
</span><span class="cx">     float inversePercentage = 1 - percentage;
</span><span class="lines">@@ -89,17 +114,17 @@
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Skip Content Security Policy check when cross fade is applied to an element in a user agent shadow tree.
</span><span class="cx">     // See &lt;https://bugs.webkit.org/show_bug.cgi?id=146663&gt;.
</span><del>-    ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();
</del><ins>+    auto options = CachedResourceLoader::defaultCachedResourceOptions();
</ins><span class="cx"> 
</span><del>-    CachedResourceLoader&amp; cachedResourceLoader = renderer-&gt;document().cachedResourceLoader();
-    CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue, cachedResourceLoader, options);
-    CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue, cachedResourceLoader, options);
</del><ins>+    auto&amp; cachedResourceLoader = renderer.document().cachedResourceLoader();
+    auto* cachedFromImage = cachedImageForCSSValue(m_fromValue, cachedResourceLoader, options);
+    auto* cachedToImage = cachedImageForCSSValue(m_toValue, cachedResourceLoader, options);
</ins><span class="cx"> 
</span><span class="cx">     if (!cachedFromImage || !cachedToImage)
</span><span class="cx">         return FloatSize();
</span><span class="cx"> 
</span><del>-    FloatSize fromImageSize = cachedFromImage-&gt;imageForRenderer(renderer)-&gt;size();
-    FloatSize toImageSize = cachedToImage-&gt;imageForRenderer(renderer)-&gt;size();
</del><ins>+    FloatSize fromImageSize = cachedFromImage-&gt;imageForRenderer(&amp;renderer)-&gt;size();
+    FloatSize toImageSize = cachedToImage-&gt;imageForRenderer(&amp;renderer)-&gt;size();
</ins><span class="cx"> 
</span><span class="cx">     // Rounding issues can cause transitions between images of equal size to return
</span><span class="cx">     // a different fixed size; avoid performing the interpolation if the images are the same size.
</span><span class="lines">@@ -106,8 +131,7 @@
</span><span class="cx">     if (fromImageSize == toImageSize)
</span><span class="cx">         return fromImageSize;
</span><span class="cx"> 
</span><del>-    return FloatSize(fromImageSize.width() * inversePercentage + toImageSize.width() * percentage,
-        fromImageSize.height() * inversePercentage + toImageSize.height() * percentage);
</del><ins>+    return fromImageSize * inversePercentage + toImageSize * percentage;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool CSSCrossfadeValue::isPending() const
</span><span class="lines">@@ -116,15 +140,16 @@
</span><span class="cx">         || CSSImageGeneratorValue::subimageIsPending(m_toValue);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSCrossfadeValue::knownToBeOpaque(const RenderElement* renderer) const
</del><ins>+bool CSSCrossfadeValue::knownToBeOpaque(const RenderElement&amp; renderer) const
</ins><span class="cx"> {
</span><del>-    return subimageKnownToBeOpaque(m_fromValue, renderer) &amp;&amp; subimageKnownToBeOpaque(m_toValue, renderer);
</del><ins>+    return subimageKnownToBeOpaque(m_fromValue, renderer)
+        &amp;&amp; subimageKnownToBeOpaque(m_toValue, renderer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void CSSCrossfadeValue::loadSubimages(CachedResourceLoader&amp; cachedResourceLoader, const ResourceLoaderOptions&amp; options)
</span><span class="cx"> {
</span><del>-    CachedResourceHandle&lt;CachedImage&gt; oldCachedFromImage = m_cachedFromImage;
-    CachedResourceHandle&lt;CachedImage&gt; oldCachedToImage = m_cachedToImage;
</del><ins>+    auto oldCachedFromImage = m_cachedFromImage;
+    auto oldCachedToImage = m_cachedToImage;
</ins><span class="cx"> 
</span><span class="cx">     m_cachedFromImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_fromValue, cachedResourceLoader, options);
</span><span class="cx">     m_cachedToImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_toValue, cachedResourceLoader, options);
</span><span class="lines">@@ -131,22 +156,23 @@
</span><span class="cx"> 
</span><span class="cx">     if (m_cachedFromImage != oldCachedFromImage) {
</span><span class="cx">         if (oldCachedFromImage)
</span><del>-            oldCachedFromImage-&gt;removeClient(m_crossfadeSubimageObserver);
</del><ins>+            oldCachedFromImage-&gt;removeClient(m_subimageObserver);
</ins><span class="cx">         if (m_cachedFromImage)
</span><del>-            m_cachedFromImage-&gt;addClient(m_crossfadeSubimageObserver);
</del><ins>+            m_cachedFromImage-&gt;addClient(m_subimageObserver);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_cachedToImage != oldCachedToImage) {
</span><span class="cx">         if (oldCachedToImage)
</span><del>-            oldCachedToImage-&gt;removeClient(m_crossfadeSubimageObserver);
</del><ins>+            oldCachedToImage-&gt;removeClient(m_subimageObserver);
</ins><span class="cx">         if (m_cachedToImage)
</span><del>-            m_cachedToImage-&gt;addClient(m_crossfadeSubimageObserver);
</del><ins>+            m_cachedToImage-&gt;addClient(m_subimageObserver);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    m_crossfadeSubimageObserver.setReady(true);
</del><ins>+    // FIXME: Unclear why this boolean adds any value; for now keeping it around to avoid changing semantics.
+    m_subimagesAreReady = true;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;Image&gt; CSSCrossfadeValue::image(RenderElement* renderer, const FloatSize&amp; size)
</del><ins>+Image* CSSCrossfadeValue::image(RenderElement&amp; renderer, const FloatSize&amp; size)
</ins><span class="cx"> {
</span><span class="cx">     if (size.isEmpty())
</span><span class="cx">         return nullptr;
</span><span class="lines">@@ -153,38 +179,33 @@
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Skip Content Security Policy check when cross fade is applied to an element in a user agent shadow tree.
</span><span class="cx">     // See &lt;https://bugs.webkit.org/show_bug.cgi?id=146663&gt;.
</span><del>-    ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();
</del><ins>+    auto options = CachedResourceLoader::defaultCachedResourceOptions();
</ins><span class="cx"> 
</span><del>-    CachedResourceLoader&amp; cachedResourceLoader = renderer-&gt;document().cachedResourceLoader();
-    CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue, cachedResourceLoader, options);
-    CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue, cachedResourceLoader, options);
</del><ins>+    auto&amp; cachedResourceLoader = renderer.document().cachedResourceLoader();
+    auto* cachedFromImage = cachedImageForCSSValue(m_fromValue, cachedResourceLoader, options);
+    auto* cachedToImage = cachedImageForCSSValue(m_toValue, cachedResourceLoader, options);
</ins><span class="cx"> 
</span><span class="cx">     if (!cachedFromImage || !cachedToImage)
</span><span class="cx">         return Image::nullImage();
</span><span class="cx"> 
</span><del>-    Image* fromImage = cachedFromImage-&gt;imageForRenderer(renderer);
-    Image* toImage = cachedToImage-&gt;imageForRenderer(renderer);
</del><ins>+    auto* fromImage = cachedFromImage-&gt;imageForRenderer(&amp;renderer);
+    auto* toImage = cachedToImage-&gt;imageForRenderer(&amp;renderer);
</ins><span class="cx"> 
</span><span class="cx">     if (!fromImage || !toImage)
</span><span class="cx">         return Image::nullImage();
</span><span class="cx"> 
</span><span class="cx">     m_generatedImage = CrossfadeGeneratedImage::create(*fromImage, *toImage, m_percentageValue-&gt;floatValue(), fixedSize(renderer), size);
</span><del>-
-    return m_generatedImage;
</del><ins>+    return m_generatedImage.get();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CSSCrossfadeValue::crossfadeChanged(const IntRect&amp;)
</del><ins>+inline void CSSCrossfadeValue::crossfadeChanged()
</ins><span class="cx"> {
</span><del>-    for (auto it = clients().begin(), end = clients().end(); it != end; ++it)
-        it-&gt;key-&gt;imageChanged(static_cast&lt;WrappedImagePtr&gt;(this));
</del><ins>+    if (!m_subimagesAreReady)
+        return;
+    for (auto&amp; client : clients())
+        client.key-&gt;imageChanged(this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CSSCrossfadeValue::CrossfadeSubimageObserverProxy::imageChanged(CachedImage*, const IntRect* rect)
-{
-    if (m_ready)
-        m_ownerValue-&gt;crossfadeChanged(*rect);
-}
-
</del><span class="cx"> bool CSSCrossfadeValue::traverseSubresources(const std::function&lt;bool (const CachedResource&amp;)&gt;&amp; handler) const
</span><span class="cx"> {
</span><span class="cx">     if (m_cachedFromImage &amp;&amp; handler(*m_cachedFromImage))
</span><span class="lines">@@ -197,8 +218,10 @@
</span><span class="cx"> RefPtr&lt;CSSCrossfadeValue&gt; CSSCrossfadeValue::blend(const CSSCrossfadeValue&amp; from, double progress) const
</span><span class="cx"> {
</span><span class="cx">     ASSERT(equalInputImages(from));
</span><ins>+
</ins><span class="cx">     if (!m_cachedToImage || !m_cachedFromImage)
</span><span class="cx">         return nullptr;
</span><ins>+
</ins><span class="cx">     auto fromImageValue = CSSImageValue::create(*m_cachedFromImage);
</span><span class="cx">     auto toImageValue = CSSImageValue::create(*m_cachedToImage);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCrossfadeValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCrossfadeValue.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -28,36 +28,26 @@
</span><span class="cx"> #include &quot;CachedImageClient.h&quot;
</span><span class="cx"> #include &quot;CachedResourceHandle.h&quot;
</span><span class="cx"> #include &quot;CSSImageGeneratorValue.h&quot;
</span><del>-#include &quot;CSSPrimitiveValue.h&quot;
-#include &quot;Image.h&quot;
-#include &quot;ImageObserver.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class CachedImage;
-class CrossfadeSubimageObserverProxy;
-class RenderElement;
-class Document;
</del><ins>+class CSSPrimitiveValue;
</ins><span class="cx"> 
</span><span class="cx"> class CSSCrossfadeValue final : public CSSImageGeneratorValue {
</span><del>-    friend class CrossfadeSubimageObserverProxy;
</del><span class="cx"> public:
</span><del>-    static Ref&lt;CSSCrossfadeValue&gt; create(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed = false)
-    {
-        return adoptRef(*new CSSCrossfadeValue(WTFMove(fromValue), WTFMove(toValue), WTFMove(percentageValue), prefixed));
-    }
</del><ins>+    static Ref&lt;CSSCrossfadeValue&gt; create(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed = false);
</ins><span class="cx"> 
</span><span class="cx">     ~CSSCrossfadeValue();
</span><span class="cx"> 
</span><span class="cx">     String customCSSText() const;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;Image&gt; image(RenderElement*, const FloatSize&amp;);
</del><ins>+    Image* image(RenderElement&amp;, const FloatSize&amp;);
</ins><span class="cx">     bool isFixedSize() const { return true; }
</span><del>-    FloatSize fixedSize(const RenderElement*);
</del><ins>+    FloatSize fixedSize(const RenderElement&amp;);
</ins><span class="cx"> 
</span><span class="cx">     bool isPrefixed() const { return m_isPrefixed; }
</span><span class="cx">     bool isPending() const;
</span><del>-    bool knownToBeOpaque(const RenderElement*) const;
</del><ins>+    bool knownToBeOpaque(const RenderElement&amp;) const;
</ins><span class="cx"> 
</span><span class="cx">     void loadSubimages(CachedResourceLoader&amp;, const ResourceLoaderOptions&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -66,37 +56,20 @@
</span><span class="cx">     RefPtr&lt;CSSCrossfadeValue&gt; blend(const CSSCrossfadeValue&amp;, double) const;
</span><span class="cx"> 
</span><span class="cx">     bool equals(const CSSCrossfadeValue&amp;) const;
</span><del>-
</del><span class="cx">     bool equalInputImages(const CSSCrossfadeValue&amp;) const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    CSSCrossfadeValue(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed)
-        : CSSImageGeneratorValue(CrossfadeClass)
-        , m_fromValue(WTFMove(fromValue))
-        , m_toValue(WTFMove(toValue))
-        , m_percentageValue(WTFMove(percentageValue))
-        , m_crossfadeSubimageObserver(this)
-        , m_isPrefixed(prefixed)
-    {
-    }
</del><ins>+    CSSCrossfadeValue(Ref&lt;CSSValue&gt;&amp;&amp; fromValue, Ref&lt;CSSValue&gt;&amp;&amp; toValue, Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; percentageValue, bool prefixed);
</ins><span class="cx"> 
</span><del>-    class CrossfadeSubimageObserverProxy final : public CachedImageClient {
</del><ins>+    class SubimageObserver final : public CachedImageClient {
</ins><span class="cx">     public:
</span><del>-        CrossfadeSubimageObserverProxy(CSSCrossfadeValue* ownerValue)
-            : m_ownerValue(ownerValue)
-            , m_ready(false)
-        {
-        }
-
-        virtual ~CrossfadeSubimageObserverProxy() { }
-        void imageChanged(CachedImage*, const IntRect* = nullptr) final;
-        void setReady(bool ready) { m_ready = ready; }
</del><ins>+        SubimageObserver(CSSCrossfadeValue&amp;);
</ins><span class="cx">     private:
</span><del>-        CSSCrossfadeValue* m_ownerValue;
-        bool m_ready;
</del><ins>+        void imageChanged(CachedImage*, const IntRect*) final;
+        CSSCrossfadeValue&amp; m_owner;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><del>-    void crossfadeChanged(const IntRect&amp;);
</del><ins>+    void crossfadeChanged();
</ins><span class="cx"> 
</span><span class="cx">     Ref&lt;CSSValue&gt; m_fromValue;
</span><span class="cx">     Ref&lt;CSSValue&gt; m_toValue;
</span><span class="lines">@@ -107,8 +80,9 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;Image&gt; m_generatedImage;
</span><span class="cx"> 
</span><del>-    CrossfadeSubimageObserverProxy m_crossfadeSubimageObserver;
</del><ins>+    SubimageObserver m_subimageObserver;
</ins><span class="cx">     bool m_isPrefixed { false };
</span><ins>+    bool m_subimagesAreReady { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSGradientValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSGradientValue.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSGradientValue.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSGradientValue.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -30,10 +30,8 @@
</span><span class="cx"> #include &quot;CSSToLengthConversionData.h&quot;
</span><span class="cx"> #include &quot;CSSValueKeywords.h&quot;
</span><span class="cx"> #include &quot;FloatSize.h&quot;
</span><del>-#include &quot;FloatSizeHash.h&quot;
</del><span class="cx"> #include &quot;Gradient.h&quot;
</span><span class="cx"> #include &quot;GradientImage.h&quot;
</span><del>-#include &quot;Image.h&quot;
</del><span class="cx"> #include &quot;NodeRenderStyle.h&quot;
</span><span class="cx"> #include &quot;Pair.h&quot;
</span><span class="cx"> #include &quot;RenderElement.h&quot;
</span><span class="lines">@@ -40,37 +38,31 @@
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;StyleResolver.h&quot;
</span><span class="cx"> #include &lt;wtf/text/StringBuilder.h&gt;
</span><del>-#include &lt;wtf/text/WTFString.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-RefPtr&lt;Image&gt; CSSGradientValue::image(RenderElement* renderer, const FloatSize&amp; size)
</del><ins>+static inline Ref&lt;Gradient&gt; createGradient(CSSGradientValue&amp; value, RenderElement&amp; renderer, FloatSize size)
</ins><span class="cx"> {
</span><ins>+    if (is&lt;CSSLinearGradientValue&gt;(value))
+        return downcast&lt;CSSLinearGradientValue&gt;(value).createGradient(renderer, size);
+    return downcast&lt;CSSRadialGradientValue&gt;(value).createGradient(renderer, size);
+}
+
+RefPtr&lt;Image&gt; CSSGradientValue::image(RenderElement&amp; renderer, const FloatSize&amp; size)
+{
</ins><span class="cx">     if (size.isEmpty())
</span><span class="cx">         return nullptr;
</span><del>-
</del><span class="cx">     bool cacheable = isCacheable();
</span><span class="cx">     if (cacheable) {
</span><del>-        if (!clients().contains(renderer))
</del><ins>+        if (!clients().contains(&amp;renderer))
</ins><span class="cx">             return nullptr;
</span><del>-
-        Image* result = cachedImageForSize(size);
-        if (result)
</del><ins>+        if (auto* result = cachedImageForSize(size))
</ins><span class="cx">             return result;
</span><span class="cx">     }
</span><del>-
-    RefPtr&lt;Gradient&gt; gradient;
-
-    if (is&lt;CSSLinearGradientValue&gt;(*this))
-        gradient = downcast&lt;CSSLinearGradientValue&gt;(*this).createGradient(*renderer, size);
-    else
-        gradient = downcast&lt;CSSRadialGradientValue&gt;(*this).createGradient(*renderer, size);
-
-    RefPtr&lt;GradientImage&gt; newImage = GradientImage::create(gradient, size);
</del><ins>+    auto newImage = GradientImage::create(createGradient(*this, renderer, size), size);
</ins><span class="cx">     if (cacheable)
</span><del>-        saveCachedImageForSize(size, newImage);
-
-    return newImage;
</del><ins>+        saveCachedImageForSize(size, newImage.get());
+    return WTFMove(newImage);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Should only ever be called for deprecated gradients.
</span><span class="lines">@@ -94,45 +86,34 @@
</span><span class="cx"> 
</span><span class="cx"> struct GradientStop {
</span><span class="cx">     Color color;
</span><del>-    float offset;
-    bool specified;
-    bool isMidpoint;
-
-    GradientStop()
-        : offset(0)
-        , specified(false)
-        , isMidpoint(false)
-    { }
</del><ins>+    float offset { 0 };
+    bool specified { false };
+    bool isMidpoint { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-RefPtr&lt;CSSGradientValue&gt; CSSGradientValue::gradientWithStylesResolved(const StyleResolver* styleResolver)
</del><ins>+static inline Ref&lt;CSSGradientValue&gt; clone(CSSGradientValue&amp; value)
</ins><span class="cx"> {
</span><del>-    bool derived = false;
</del><ins>+    if (is&lt;CSSLinearGradientValue&gt;(value))
+        return downcast&lt;CSSLinearGradientValue&gt;(value).clone();
+    ASSERT(is&lt;CSSRadialGradientValue&gt;(value));
+    return downcast&lt;CSSRadialGradientValue&gt;(value).clone();
+}
+
+Ref&lt;CSSGradientValue&gt; CSSGradientValue::gradientWithStylesResolved(const StyleResolver&amp; styleResolver)
+{
+    bool colorIsDerivedFromElement = false;
</ins><span class="cx">     for (auto&amp; stop : m_stops) {
</span><del>-        if (!stop.isMidpoint &amp;&amp; styleResolver-&gt;colorFromPrimitiveValueIsDerivedFromElement(*stop.m_color)) {
</del><ins>+        if (!stop.isMidpoint &amp;&amp; styleResolver.colorFromPrimitiveValueIsDerivedFromElement(*stop.m_color)) {
</ins><span class="cx">             stop.m_colorIsDerivedFromElement = true;
</span><del>-            derived = true;
</del><ins>+            colorIsDerivedFromElement = true;
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-
-    RefPtr&lt;CSSGradientValue&gt; result;
-    if (!derived)
-        result = this;
-    else if (is&lt;CSSLinearGradientValue&gt;(*this))
-        result = downcast&lt;CSSLinearGradientValue&gt;(*this).clone();
-    else if (is&lt;CSSRadialGradientValue&gt;(*this))
-        result = downcast&lt;CSSRadialGradientValue&gt;(*this).clone();
-    else {
-        ASSERT_NOT_REACHED();
-        return nullptr;
-    }
-
</del><ins>+    auto result = colorIsDerivedFromElement ? clone(*this) : makeRef(*this);
</ins><span class="cx">     for (auto&amp; stop : result-&gt;m_stops) {
</span><span class="cx">         if (!stop.isMidpoint)
</span><del>-            stop.m_resolvedColor = styleResolver-&gt;colorFromPrimitiveValue(*stop.m_color);
</del><ins>+            stop.m_resolvedColor = styleResolver.colorFromPrimitiveValue(*stop.m_color);
</ins><span class="cx">     }
</span><del>-
</del><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -579,10 +560,10 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSGradientValue::knownToBeOpaque(const RenderElement*) const
</del><ins>+bool CSSGradientValue::knownToBeOpaque() const
</ins><span class="cx"> {
</span><del>-    for (size_t i = 0; i &lt; m_stops.size(); ++i) {
-        if (!m_stops[i].m_resolvedColor.isOpaque())
</del><ins>+    for (auto&amp; stop : m_stops) {
+        if (!stop.m_resolvedColor.isOpaque())
</ins><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="cx">     return true;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSGradientValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSGradientValue.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSGradientValue.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSGradientValue.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CSSImageGeneratorValue.h&quot;
</span><span class="cx"> #include &quot;CSSPrimitiveValue.h&quot;
</span><del>-#include &lt;wtf/RefPtr.h&gt;
</del><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -34,7 +33,7 @@
</span><span class="cx"> 
</span><span class="cx"> class FloatPoint;
</span><span class="cx"> class Gradient;
</span><del>-class RenderView;
</del><ins>+class StyleResolver;
</ins><span class="cx"> 
</span><span class="cx"> enum CSSGradientType {
</span><span class="cx">     CSSDeprecatedLinearGradient,
</span><span class="lines">@@ -61,7 +60,7 @@
</span><span class="cx"> 
</span><span class="cx"> class CSSGradientValue : public CSSImageGeneratorValue {
</span><span class="cx"> public:
</span><del>-    RefPtr&lt;Image&gt; image(RenderElement*, const FloatSize&amp;);
</del><ins>+    RefPtr&lt;Image&gt; image(RenderElement&amp;, const FloatSize&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void setFirstX(RefPtr&lt;CSSPrimitiveValue&gt;&amp;&amp; val) { m_firstX = WTFMove(val); }
</span><span class="cx">     void setFirstY(RefPtr&lt;CSSPrimitiveValue&gt;&amp;&amp; val) { m_firstY = WTFMove(val); }
</span><span class="lines">@@ -79,13 +78,13 @@
</span><span class="cx">     CSSGradientType gradientType() const { return m_gradientType; }
</span><span class="cx"> 
</span><span class="cx">     bool isFixedSize() const { return false; }
</span><del>-    FloatSize fixedSize(const RenderElement*) const { return FloatSize(); }
</del><ins>+    FloatSize fixedSize(const RenderElement&amp;) const { return FloatSize(); }
</ins><span class="cx"> 
</span><span class="cx">     bool isPending() const { return false; }
</span><del>-    bool knownToBeOpaque(const RenderElement*) const;
</del><ins>+    bool knownToBeOpaque() const;
</ins><span class="cx"> 
</span><span class="cx">     void loadSubimages(CachedResourceLoader&amp;, const ResourceLoaderOptions&amp;) { }
</span><del>-    RefPtr&lt;CSSGradientValue&gt; gradientWithStylesResolved(const StyleResolver*);
</del><ins>+    Ref&lt;CSSGradientValue&gt; gradientWithStylesResolved(const StyleResolver&amp;);
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     CSSGradientValue(ClassType classType, CSSGradientRepeat repeat, CSSGradientType gradientType)
</span><span class="lines">@@ -132,7 +131,6 @@
</span><span class="cx"> 
</span><span class="cx"> class CSSLinearGradientValue final : public CSSGradientValue {
</span><span class="cx"> public:
</span><del>-
</del><span class="cx">     static Ref&lt;CSSLinearGradientValue&gt; create(CSSGradientRepeat repeat, CSSGradientType gradientType = CSSLinearGradient)
</span><span class="cx">     {
</span><span class="cx">         return adoptRef(*new CSSLinearGradientValue(repeat, gradientType));
</span><span class="lines">@@ -212,7 +210,6 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-
</del><span class="cx">     // Resolve points/radii to front end values.
</span><span class="cx">     float resolveRadius(CSSPrimitiveValue&amp;, const CSSToLengthConversionData&amp;, float* widthOrHeight = 0);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSImageGeneratorValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSImageGeneratorValue.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSImageGeneratorValue.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSImageGeneratorValue.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -41,6 +41,22 @@
</span><span class="cx"> 
</span><span class="cx"> static const auto timeToKeepCachedGeneratedImages = std::chrono::seconds { 3 };
</span><span class="cx"> 
</span><ins>+class CSSImageGeneratorValue::CachedGeneratedImage {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    CachedGeneratedImage(CSSImageGeneratorValue&amp;, FloatSize, GeneratedImage&amp;);
+    GeneratedImage&amp; image() const { return const_cast&lt;GeneratedImage&amp;&gt;(m_image.get()); }
+    void puntEvictionTimer() { m_evictionTimer.restart(); }
+
+private:
+    void evictionTimerFired();
+
+    CSSImageGeneratorValue&amp; m_owner;
+    const FloatSize m_size;
+    const Ref&lt;GeneratedImage&gt; m_image;
+    DeferrableOneShotTimer m_evictionTimer;
+};
+
</ins><span class="cx"> CSSImageGeneratorValue::CSSImageGeneratorValue(ClassType classType)
</span><span class="cx">     : CSSValue(classType)
</span><span class="cx"> {
</span><span class="lines">@@ -50,19 +66,17 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CSSImageGeneratorValue::addClient(RenderElement* renderer)
</del><ins>+void CSSImageGeneratorValue::addClient(RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><del>-    ASSERT(renderer);
</del><span class="cx">     if (m_clients.isEmpty())
</span><span class="cx">         ref();
</span><del>-    m_clients.add(renderer);
</del><ins>+    m_clients.add(&amp;renderer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CSSImageGeneratorValue::removeClient(RenderElement* renderer)
</del><ins>+void CSSImageGeneratorValue::removeClient(RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><del>-    ASSERT(renderer);
-    ASSERT(m_clients.contains(renderer));
-    if (m_clients.remove(renderer) &amp;&amp; m_clients.isEmpty())
</del><ins>+    ASSERT(m_clients.contains(&amp;renderer));
+    if (m_clients.remove(&amp;renderer) &amp;&amp; m_clients.isEmpty())
</ins><span class="cx">         deref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -71,15 +85,15 @@
</span><span class="cx">     if (size.isEmpty())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    CachedGeneratedImage* cachedGeneratedImage = m_images.get(size);
</del><ins>+    auto* cachedGeneratedImage = m_images.get(size);
</ins><span class="cx">     if (!cachedGeneratedImage)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     cachedGeneratedImage-&gt;puntEvictionTimer();
</span><del>-    return cachedGeneratedImage-&gt;image();
</del><ins>+    return &amp;cachedGeneratedImage-&gt;image();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CSSImageGeneratorValue::saveCachedImageForSize(FloatSize size, PassRefPtr&lt;GeneratedImage&gt; image)
</del><ins>+void CSSImageGeneratorValue::saveCachedImageForSize(FloatSize size, GeneratedImage&amp; image)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_images.contains(size));
</span><span class="cx">     m_images.add(size, std::make_unique&lt;CachedGeneratedImage&gt;(*this, size, image));
</span><span class="lines">@@ -91,7 +105,7 @@
</span><span class="cx">     m_images.remove(size);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage(CSSImageGeneratorValue&amp; owner, FloatSize size, PassRefPtr&lt;GeneratedImage&gt; image)
</del><ins>+inline CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage(CSSImageGeneratorValue&amp; owner, FloatSize size, GeneratedImage&amp; image)
</ins><span class="cx">     : m_owner(owner)
</span><span class="cx">     , m_size(size)
</span><span class="cx">     , m_image(image)
</span><span class="lines">@@ -106,17 +120,17 @@
</span><span class="cx">     m_owner.evictCachedGeneratedImage(m_size);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;Image&gt; CSSImageGeneratorValue::image(RenderElement* renderer, const FloatSize&amp; size)
</del><ins>+RefPtr&lt;Image&gt; CSSImageGeneratorValue::image(RenderElement&amp; renderer, const FloatSize&amp; size)
</ins><span class="cx"> {
</span><span class="cx">     switch (classType()) {
</span><span class="cx">     case CanvasClass:
</span><del>-        return downcast&lt;CSSCanvasValue&gt;(*this).image(renderer, size);
</del><ins>+        return downcast&lt;CSSCanvasValue&gt;(*this).image(&amp;renderer, size);
</ins><span class="cx">     case NamedImageClass:
</span><del>-        return downcast&lt;CSSNamedImageValue&gt;(*this).image(renderer, size);
</del><ins>+        return downcast&lt;CSSNamedImageValue&gt;(*this).image(&amp;renderer, size);
</ins><span class="cx">     case CrossfadeClass:
</span><span class="cx">         return downcast&lt;CSSCrossfadeValue&gt;(*this).image(renderer, size);
</span><span class="cx">     case FilterImageClass:
</span><del>-        return downcast&lt;CSSFilterImageValue&gt;(*this).image(renderer, size);
</del><ins>+        return downcast&lt;CSSFilterImageValue&gt;(*this).image(&amp;renderer, size);
</ins><span class="cx">     case LinearGradientClass:
</span><span class="cx">         return downcast&lt;CSSLinearGradientValue&gt;(*this).image(renderer, size);
</span><span class="cx">     case RadialGradientClass:
</span><span class="lines">@@ -148,15 +162,15 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatSize CSSImageGeneratorValue::fixedSize(const RenderElement* renderer)
</del><ins>+FloatSize CSSImageGeneratorValue::fixedSize(const RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><span class="cx">     switch (classType()) {
</span><span class="cx">     case CanvasClass:
</span><del>-        return downcast&lt;CSSCanvasValue&gt;(*this).fixedSize(renderer);
</del><ins>+        return downcast&lt;CSSCanvasValue&gt;(*this).fixedSize(&amp;renderer);
</ins><span class="cx">     case CrossfadeClass:
</span><span class="cx">         return downcast&lt;CSSCrossfadeValue&gt;(*this).fixedSize(renderer);
</span><span class="cx">     case FilterImageClass:
</span><del>-        return downcast&lt;CSSFilterImageValue&gt;(*this).fixedSize(renderer);
</del><ins>+        return downcast&lt;CSSFilterImageValue&gt;(*this).fixedSize(&amp;renderer);
</ins><span class="cx">     case LinearGradientClass:
</span><span class="cx">         return downcast&lt;CSSLinearGradientValue&gt;(*this).fixedSize(renderer);
</span><span class="cx">     case RadialGradientClass:
</span><span class="lines">@@ -188,7 +202,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSImageGeneratorValue::knownToBeOpaque(const RenderElement* renderer) const
</del><ins>+bool CSSImageGeneratorValue::knownToBeOpaque(const RenderElement&amp; renderer) const
</ins><span class="cx"> {
</span><span class="cx">     switch (classType()) {
</span><span class="cx">     case CrossfadeClass:
</span><span class="lines">@@ -198,11 +212,11 @@
</span><span class="cx">     case NamedImageClass:
</span><span class="cx">         return false;
</span><span class="cx">     case FilterImageClass:
</span><del>-        return downcast&lt;CSSFilterImageValue&gt;(*this).knownToBeOpaque(renderer);
</del><ins>+        return downcast&lt;CSSFilterImageValue&gt;(*this).knownToBeOpaque(&amp;renderer);
</ins><span class="cx">     case LinearGradientClass:
</span><del>-        return downcast&lt;CSSLinearGradientValue&gt;(*this).knownToBeOpaque(renderer);
</del><ins>+        return downcast&lt;CSSLinearGradientValue&gt;(*this).knownToBeOpaque();
</ins><span class="cx">     case RadialGradientClass:
</span><del>-        return downcast&lt;CSSRadialGradientValue&gt;(*this).knownToBeOpaque(renderer);
</del><ins>+        return downcast&lt;CSSRadialGradientValue&gt;(*this).knownToBeOpaque();
</ins><span class="cx">     default:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">     }
</span><span class="lines">@@ -244,7 +258,6 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    
</del><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -265,7 +278,7 @@
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    
</del><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSImageGeneratorValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSImageGeneratorValue.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSImageGeneratorValue.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSImageGeneratorValue.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CSSValue.h&quot;
</span><del>-#include &quot;FloatSize.h&quot;
</del><span class="cx"> #include &quot;FloatSizeHash.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><span class="cx"> #include &lt;wtf/HashCountedSet.h&gt;
</span><span class="lines">@@ -38,7 +37,7 @@
</span><span class="cx"> class GeneratedImage;
</span><span class="cx"> class Image;
</span><span class="cx"> class RenderElement;
</span><del>-class StyleResolver;
</del><ins>+
</ins><span class="cx"> struct ResourceLoaderOptions;
</span><span class="cx"> 
</span><span class="cx"> class CSSImageGeneratorValue : public CSSValue {
</span><span class="lines">@@ -45,16 +44,16 @@
</span><span class="cx"> public:
</span><span class="cx">     ~CSSImageGeneratorValue();
</span><span class="cx"> 
</span><del>-    void addClient(RenderElement*);
-    void removeClient(RenderElement*);
</del><ins>+    void addClient(RenderElement&amp;);
+    void removeClient(RenderElement&amp;);
</ins><span class="cx"> 
</span><del>-    RefPtr&lt;Image&gt; image(RenderElement*, const FloatSize&amp;);
</del><ins>+    RefPtr&lt;Image&gt; image(RenderElement&amp;, const FloatSize&amp;);
</ins><span class="cx"> 
</span><span class="cx">     bool isFixedSize() const;
</span><del>-    FloatSize fixedSize(const RenderElement*);
</del><ins>+    FloatSize fixedSize(const RenderElement&amp;);
</ins><span class="cx"> 
</span><span class="cx">     bool isPending() const;
</span><del>-    bool knownToBeOpaque(const RenderElement*) const;
</del><ins>+    bool knownToBeOpaque(const RenderElement&amp;) const;
</ins><span class="cx"> 
</span><span class="cx">     void loadSubimages(CachedResourceLoader&amp;, const ResourceLoaderOptions&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -62,7 +61,7 @@
</span><span class="cx">     CSSImageGeneratorValue(ClassType);
</span><span class="cx"> 
</span><span class="cx">     GeneratedImage* cachedImageForSize(FloatSize);
</span><del>-    void saveCachedImageForSize(FloatSize, PassRefPtr&lt;GeneratedImage&gt;);
</del><ins>+    void saveCachedImageForSize(FloatSize, GeneratedImage&amp;);
</ins><span class="cx">     const HashCountedSet&lt;RenderElement*&gt;&amp; clients() const { return m_clients; }
</span><span class="cx"> 
</span><span class="cx">     // Helper functions for Crossfade and Filter.
</span><span class="lines">@@ -70,23 +69,8 @@
</span><span class="cx">     static bool subimageIsPending(const CSSValue&amp;);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    class CachedGeneratedImage {
-        WTF_MAKE_FAST_ALLOCATED;
-    public:
-        CachedGeneratedImage(CSSImageGeneratorValue&amp;, FloatSize, PassRefPtr&lt;GeneratedImage&gt;);
-        GeneratedImage* image() { return m_image.get(); }
-        void puntEvictionTimer() { m_evictionTimer.restart(); }
</del><ins>+    class CachedGeneratedImage;
</ins><span class="cx"> 
</span><del>-    private:
-        void evictionTimerFired();
-
-        CSSImageGeneratorValue&amp; m_owner;
-        FloatSize m_size;
-        RefPtr&lt;GeneratedImage&gt; m_image;
-        DeferrableOneShotTimer m_evictionTimer;
-    };
-
-    friend class CachedGeneratedImage;
</del><span class="cx">     void evictCachedGeneratedImage(FloatSize);
</span><span class="cx"> 
</span><span class="cx">     HashCountedSet&lt;RenderElement*&gt; m_clients;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValuePoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValuePool.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValuePool.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSValuePool.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     return *value;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;CSSValueList&gt; CSSValuePool::createFontFaceValue(const AtomicString&amp; string)
</del><ins>+RefPtr&lt;CSSValueList&gt; CSSValuePool::createFontFaceValue(const AtomicString&amp; string)
</ins><span class="cx"> {
</span><span class="cx">     // Remove one entry at random if the cache grows too large.
</span><span class="cx">     const int maximumFontFaceCacheSize = 128;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValuePoolh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValuePool.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValuePool.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/CSSValuePool.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static CSSValuePool&amp; singleton();
</span><span class="cx"> 
</span><del>-    PassRefPtr&lt;CSSValueList&gt; createFontFaceValue(const AtomicString&amp;);
</del><ins>+    RefPtr&lt;CSSValueList&gt; createFontFaceValue(const AtomicString&amp;);
</ins><span class="cx">     Ref&lt;CSSPrimitiveValue&gt; createFontFamilyValue(const String&amp;, FromSystemFontID = FromSystemFontID::No);
</span><span class="cx">     Ref&lt;CSSInheritedValue&gt; createInheritedValue() { return m_inheritedValue.get(); }
</span><span class="cx">     Ref&lt;CSSInitialValue&gt; createImplicitInitialValue() { return m_implicitInitialValue.get(); }
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -62,18 +62,18 @@
</span><span class="cx">     static Length convertLengthOrAuto(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static Length convertLengthSizing(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static Length convertLengthMaxSizing(StyleResolver&amp;, const CSSValue&amp;);
</span><del>-    template &lt;typename T&gt; static T convertComputedLength(StyleResolver&amp;, const CSSValue&amp;);
-    template &lt;typename T&gt; static T convertLineWidth(StyleResolver&amp;, const CSSValue&amp;);
</del><ins>+    template&lt;typename T&gt; static T convertComputedLength(StyleResolver&amp;, const CSSValue&amp;);
+    template&lt;typename T&gt; static T convertLineWidth(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx">     static float convertSpacing(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static LengthSize convertRadius(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static LengthPoint convertObjectPosition(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static TextDecoration convertTextDecoration(StyleResolver&amp;, const CSSValue&amp;);
</span><del>-    template &lt;typename T&gt; static T convertNumber(StyleResolver&amp;, const CSSValue&amp;);
-    template &lt;typename T&gt; static T convertNumberOrAuto(StyleResolver&amp;, const CSSValue&amp;);
</del><ins>+    template&lt;typename T&gt; static T convertNumber(StyleResolver&amp;, const CSSValue&amp;);
+    template&lt;typename T&gt; static T convertNumberOrAuto(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx">     static short convertWebkitHyphenateLimitLines(StyleResolver&amp;, const CSSValue&amp;);
</span><del>-    template &lt;CSSPropertyID property&gt; static NinePieceImage convertBorderImage(StyleResolver&amp;, CSSValue&amp;);
-    template &lt;CSSPropertyID property&gt; static NinePieceImage convertBorderMask(StyleResolver&amp;, CSSValue&amp;);
-    template &lt;CSSPropertyID property&gt; static PassRefPtr&lt;StyleImage&gt; convertStyleImage(StyleResolver&amp;, CSSValue&amp;);
</del><ins>+    template&lt;CSSPropertyID&gt; static NinePieceImage convertBorderImage(StyleResolver&amp;, CSSValue&amp;);
+    template&lt;CSSPropertyID&gt; static NinePieceImage convertBorderMask(StyleResolver&amp;, CSSValue&amp;);
+    template&lt;CSSPropertyID&gt; static RefPtr&lt;StyleImage&gt; convertStyleImage(StyleResolver&amp;, CSSValue&amp;);
</ins><span class="cx">     static TransformOperations convertTransform(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static String convertString(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static String convertStringOrAuto(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">     static float convertTextStrokeWidth(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static LineBoxContain convertLineBoxContain(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static TextDecorationSkip convertTextDecorationSkip(StyleResolver&amp;, const CSSValue&amp;);
</span><del>-    static PassRefPtr&lt;ShapeValue&gt; convertShapeValue(StyleResolver&amp;, CSSValue&amp;);
</del><ins>+    static RefPtr&lt;ShapeValue&gt; convertShapeValue(StyleResolver&amp;, CSSValue&amp;);
</ins><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     static ScrollSnapType convertScrollSnapType(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static ScrollSnapAlign convertScrollSnapAlign(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="lines">@@ -234,13 +234,13 @@
</span><span class="cx">     return convertLengthSizing(styleResolver, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename T&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> inline T StyleBuilderConverter::convertComputedLength(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     return downcast&lt;CSSPrimitiveValue&gt;(value).computeLength&lt;T&gt;(styleResolver.state().cssToLengthConversionData());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename T&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> inline T StyleBuilderConverter::convertLineWidth(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
</span><span class="lines">@@ -333,7 +333,7 @@
</span><span class="cx">     return convertPositionComponent&lt;CSSValueTop, CSSValueBottom&gt;(styleResolver, downcast&lt;CSSPrimitiveValue&gt;(value));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;CSSValueID cssValueFor0, CSSValueID cssValueFor100&gt;
</del><ins>+template&lt;CSSValueID cssValueFor0, CSSValueID cssValueFor100&gt;
</ins><span class="cx"> inline Length StyleBuilderConverter::convertPositionComponent(StyleResolver&amp; styleResolver, const CSSPrimitiveValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     Length length;
</span><span class="lines">@@ -392,13 +392,13 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename T&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> inline T StyleBuilderConverter::convertNumber(StyleResolver&amp;, const CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     return downcast&lt;CSSPrimitiveValue&gt;(value).value&lt;T&gt;(CSSPrimitiveValue::CSS_NUMBER);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename T&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> inline T StyleBuilderConverter::convertNumberOrAuto(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     if (downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueAuto)
</span><span class="lines">@@ -414,7 +414,7 @@
</span><span class="cx">     return primitiveValue.value&lt;short&gt;(CSSPrimitiveValue::CSS_NUMBER);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;CSSPropertyID property&gt;
</del><ins>+template&lt;CSSPropertyID property&gt;
</ins><span class="cx"> inline NinePieceImage StyleBuilderConverter::convertBorderImage(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     NinePieceImage image;
</span><span class="lines">@@ -422,7 +422,7 @@
</span><span class="cx">     return image;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;CSSPropertyID property&gt;
</del><ins>+template&lt;CSSPropertyID property&gt;
</ins><span class="cx"> inline NinePieceImage StyleBuilderConverter::convertBorderMask(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     NinePieceImage image;
</span><span class="lines">@@ -431,8 +431,8 @@
</span><span class="cx">     return image;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;CSSPropertyID property&gt;
-inline PassRefPtr&lt;StyleImage&gt; StyleBuilderConverter::convertStyleImage(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</del><ins>+template&lt;CSSPropertyID&gt;
+inline RefPtr&lt;StyleImage&gt; StyleBuilderConverter::convertStyleImage(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     return styleResolver.styleImage(value);
</span><span class="cx"> }
</span><span class="lines">@@ -758,7 +758,7 @@
</span><span class="cx">     return is&lt;CSSImageValue&gt;(value) || is&lt;CSSImageSetValue&gt;(value) || is&lt;CSSImageGeneratorValue&gt;(value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline PassRefPtr&lt;ShapeValue&gt; StyleBuilderConverter::convertShapeValue(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</del><ins>+inline RefPtr&lt;ShapeValue&gt; StyleBuilderConverter::convertShapeValue(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     if (is&lt;CSSPrimitiveValue&gt;(value)) {
</span><span class="cx">         ASSERT(downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueNone);
</span><span class="lines">@@ -771,7 +771,7 @@
</span><span class="cx">     RefPtr&lt;BasicShape&gt; shape;
</span><span class="cx">     CSSBoxType referenceBox = BoxMissing;
</span><span class="cx">     for (auto&amp; currentValue : downcast&lt;CSSValueList&gt;(value)) {
</span><del>-        CSSPrimitiveValue&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(currentValue.get());
</del><ins>+        auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(currentValue.get());
</ins><span class="cx">         if (primitiveValue.isShape())
</span><span class="cx">             shape = basicShapeForValue(styleResolver.state().cssToLengthConversionData(), *primitiveValue.shapeValue());
</span><span class="cx">         else if (primitiveValue.valueID() == CSSValueContentBox
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -1361,7 +1361,7 @@
</span><span class="cx">     for (auto&amp; item : downcast&lt;CSSValueList&gt;(value)) {
</span><span class="cx">         if (is&lt;CSSImageGeneratorValue&gt;(item.get())) {
</span><span class="cx">             if (is&lt;CSSGradientValue&gt;(item.get()))
</span><del>-                styleResolver.style()-&gt;setContent(StyleGeneratedImage::create(*downcast&lt;CSSGradientValue&gt;(item.get()).gradientWithStylesResolved(&amp;styleResolver)), didSet);
</del><ins>+                styleResolver.style()-&gt;setContent(StyleGeneratedImage::create(downcast&lt;CSSGradientValue&gt;(item.get()).gradientWithStylesResolved(styleResolver)), didSet);
</ins><span class="cx">             else
</span><span class="cx">                 styleResolver.style()-&gt;setContent(StyleGeneratedImage::create(downcast&lt;CSSImageGeneratorValue&gt;(item.get())), didSet);
</span><span class="cx">             didSet = true;
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/css/StyleResolver.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -1689,7 +1689,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (is&lt;CSSImageGeneratorValue&gt;(value)) {
</span><span class="cx">         if (is&lt;CSSGradientValue&gt;(value))
</span><del>-            return StyleGeneratedImage::create(*downcast&lt;CSSGradientValue&gt;(value).gradientWithStylesResolved(this));
</del><ins>+            return StyleGeneratedImage::create(downcast&lt;CSSGradientValue&gt;(value).gradientWithStylesResolved(*this));
</ins><span class="cx"> 
</span><span class="cx">         if (is&lt;CSSFilterImageValue&gt;(value)) {
</span><span class="cx">             // FilterImage needs to calculate FilterOperations.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGradientImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GradientImage.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GradientImage.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/platform/graphics/GradientImage.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -26,15 +26,12 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;GradientImage.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;FloatRect.h&quot;
</del><span class="cx"> #include &quot;GraphicsContext.h&quot;
</span><span class="cx"> #include &quot;ImageBuffer.h&quot;
</span><del>-#include &quot;Length.h&quot;
-#include &quot;TextStream.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-GradientImage::GradientImage(PassRefPtr&lt;Gradient&gt; generator, const FloatSize&amp; size)
</del><ins>+GradientImage::GradientImage(Gradient&amp; generator, const FloatSize&amp; size)
</ins><span class="cx">     : m_gradient(generator)
</span><span class="cx"> {
</span><span class="cx">     setContainerSize(size);
</span><span class="lines">@@ -53,7 +50,7 @@
</span><span class="cx">     if (destRect.size() != srcRect.size())
</span><span class="cx">         destContext.scale(FloatSize(destRect.width() / srcRect.width(), destRect.height() / srcRect.height()));
</span><span class="cx">     destContext.translate(-srcRect.x(), -srcRect.y());
</span><del>-    destContext.fillRect(FloatRect(FloatPoint(), size()), *m_gradient.get());
</del><ins>+    destContext.fillRect(FloatRect(FloatPoint(), size()), m_gradient.get());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void GradientImage::drawPattern(GraphicsContext&amp; destContext, const FloatRect&amp; destRect, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
</span><span class="lines">@@ -80,7 +77,7 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         // Fill with the generated image.
</span><del>-        m_cachedImageBuffer-&gt;context().fillRect(FloatRect(FloatPoint(), adjustedSize), *m_gradient);
</del><ins>+        m_cachedImageBuffer-&gt;context().fillRect(FloatRect(FloatPoint(), adjustedSize), m_gradient.get());
</ins><span class="cx"> 
</span><span class="cx">         m_cachedGeneratorHash = generatorHash;
</span><span class="cx">         m_cachedAdjustedSize = adjustedSize;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGradientImageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GradientImage.h (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GradientImage.h        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/platform/graphics/GradientImage.h        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008, 2012, 2013 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2008-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -23,40 +23,33 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef GradientImage_h
-#define GradientImage_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><del>-#include &quot;FloatSize.h&quot;
</del><span class="cx"> #include &quot;GeneratedImage.h&quot;
</span><del>-#include &quot;Gradient.h&quot;
-#include &quot;Image.h&quot;
-#include &lt;wtf/RefPtr.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class Gradient;
</ins><span class="cx"> class ImageBuffer;
</span><span class="cx"> 
</span><span class="cx"> class GradientImage final : public GeneratedImage {
</span><span class="cx"> public:
</span><del>-    static PassRefPtr&lt;GradientImage&gt; create(PassRefPtr&lt;Gradient&gt; generator, const FloatSize&amp; size)
</del><ins>+    static Ref&lt;GradientImage&gt; create(Gradient&amp; generator, const FloatSize&amp; size)
</ins><span class="cx">     {
</span><del>-        return adoptRef(new GradientImage(generator, size));
</del><ins>+        return adoptRef(*new GradientImage(generator, size));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     virtual ~GradientImage();
</span><span class="cx"> 
</span><del>-protected:
-    void draw(GraphicsContext&amp;, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, CompositeOperator, BlendMode, ImageOrientationDescription) override;
-    void drawPattern(GraphicsContext&amp;, const FloatRect&amp; destRect, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform,
-        const FloatPoint&amp; phase, const FloatSize&amp; spacing, CompositeOperator, BlendMode) override;
</del><ins>+private:
+    GradientImage(Gradient&amp;, const FloatSize&amp;);
</ins><span class="cx"> 
</span><del>-    GradientImage(PassRefPtr&lt;Gradient&gt;, const FloatSize&amp;);
-
-private:
-    bool isGradientImage() const override { return true; }
-    void dump(TextStream&amp;) const override;
</del><ins>+    void draw(GraphicsContext&amp;, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect, CompositeOperator, BlendMode, ImageOrientationDescription) final;
+    void drawPattern(GraphicsContext&amp;, const FloatRect&amp; destRect, const FloatRect&amp; srcRect, const AffineTransform&amp; patternTransform, const FloatPoint&amp; phase, const FloatSize&amp; spacing, CompositeOperator, BlendMode) final;
+    bool isGradientImage() const final { return true; }
+    void dump(TextStream&amp;) const final;
</ins><span class="cx">     
</span><del>-    RefPtr&lt;Gradient&gt; m_gradient;
</del><ins>+    Ref&lt;Gradient&gt; m_gradient;
</ins><span class="cx">     std::unique_ptr&lt;ImageBuffer&gt; m_cachedImageBuffer;
</span><span class="cx">     FloatSize m_cachedAdjustedSize;
</span><span class="cx">     unsigned m_cachedGeneratorHash;
</span><span class="lines">@@ -63,5 +56,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif
</del></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleGeneratedImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp (210214 => 210215)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp        2016-12-31 01:28:36 UTC (rev 210214)
+++ trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp        2016-12-31 09:17:36 UTC (rev 210215)
</span><span class="lines">@@ -54,8 +54,9 @@
</span><span class="cx"> 
</span><span class="cx"> FloatSize StyleGeneratedImage::imageSize(const RenderElement* renderer, float multiplier) const
</span><span class="cx"> {
</span><ins>+    ASSERT(renderer);
</ins><span class="cx">     if (m_fixedSize) {
</span><del>-        FloatSize fixedSize = const_cast&lt;CSSImageGeneratorValue&amp;&gt;(m_imageGeneratorValue.get()).fixedSize(renderer);
</del><ins>+        FloatSize fixedSize = const_cast&lt;CSSImageGeneratorValue&amp;&gt;(m_imageGeneratorValue.get()).fixedSize(*renderer);
</ins><span class="cx">         if (multiplier == 1.0f)
</span><span class="cx">             return fixedSize;
</span><span class="cx"> 
</span><span class="lines">@@ -87,22 +88,26 @@
</span><span class="cx"> 
</span><span class="cx"> void StyleGeneratedImage::addClient(RenderElement* renderer)
</span><span class="cx"> {
</span><del>-    m_imageGeneratorValue-&gt;addClient(renderer);
</del><ins>+    ASSERT(renderer);
+    m_imageGeneratorValue-&gt;addClient(*renderer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void StyleGeneratedImage::removeClient(RenderElement* renderer)
</span><span class="cx"> {
</span><del>-    m_imageGeneratorValue-&gt;removeClient(renderer);
</del><ins>+    ASSERT(renderer);
+    m_imageGeneratorValue-&gt;removeClient(*renderer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;Image&gt; StyleGeneratedImage::image(RenderElement* renderer, const FloatSize&amp; size) const
</span><span class="cx"> {
</span><del>-    return const_cast&lt;CSSImageGeneratorValue&amp;&gt;(m_imageGeneratorValue.get()).image(renderer, size);
</del><ins>+    ASSERT(renderer);
+    return const_cast&lt;CSSImageGeneratorValue&amp;&gt;(m_imageGeneratorValue.get()).image(*renderer, size);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool StyleGeneratedImage::knownToBeOpaque(const RenderElement* renderer) const
</span><span class="cx"> {
</span><del>-    return m_imageGeneratorValue-&gt;knownToBeOpaque(renderer);
</del><ins>+    ASSERT(renderer);
+    return m_imageGeneratorValue-&gt;knownToBeOpaque(*renderer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>