<!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>[179369] trunk</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Border-radius clipping on a stacking context causes descendants to not render
https://bugs.webkit.org/show_bug.cgi?id=140536

Reviewed by Zalan Bujtas.

Source/WebCore:

Fix one of the issues introduced in <a href="http://trac.webkit.org/projects/webkit/changeset/178029">r178029</a>. The changes in GraphicsLayerCA
failed to adhere to the &quot;set a bit and flush later&quot; pattern that this class uses,
instead poking the platform layers directly. This caused an issue where the bounds
of the clipping layer would later be set to 0x0, causing content to disappear.

Fix by changing the &quot;applyClippingBorder&quot; function to &quot;setMasksToBoundsRect&quot;
and have it update via a new MasksToBoundsRectChanged dirty bit.

In order to avoid clobbering the mask layer used to clip contents, we need another
shape mask layer, so rename m_shapeMaskLayer to m_contentsShapeMaskLayer, then
introduce a new m_shapeMaskLayer which is used for masks-to-bounds clipping. Update
the reflection cloning code to correctly clone this layer.

Test: compositing/clipping/border-radius-stacking-context-clip.html

* WebCore.exp.in:
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::maskToBoundsRect):
(WebCore::GraphicsLayer::setMasksToBoundsRect):
(WebCore::GraphicsLayer::applyClippingBorder): Deleted.
(WebCore::GraphicsLayer::clearClippingBorder): Deleted.
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::willBeDestroyed):
(WebCore::GraphicsLayerCA::setMasksToBoundsRect):
(WebCore::GraphicsLayerCA::setContentsToSolidColor):
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
(WebCore::GraphicsLayerCA::updateContentsImage):
(WebCore::GraphicsLayerCA::updateContentsRects):
(WebCore::GraphicsLayerCA::updateMasksToBoundsRect):
(WebCore::GraphicsLayerCA::dumpAdditionalProperties):
(WebCore::GraphicsLayerCA::applyClippingBorder): Deleted.
(WebCore::GraphicsLayerCA::clearClippingBorder): Deleted.
* platform/graphics/ca/GraphicsLayerCA.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateChildClippingStrategy): Add a FIXME since
this code is trying to access geometry and we may not have done layout yet.
Also, to clear the rounded rect, just set a non-rounded rect the size of the layer.

LayoutTests:

Ref test that clips out the middle of a composited rounded-rect overflow element,
and also tests reflections.

* compositing/clipping/border-radius-stacking-context-clip-expected.html: Added.
* compositing/clipping/border-radius-stacking-context-clip.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingclippingborderradiusstackingcontextclipexpectedhtml">trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingclippingborderradiusstackingcontextcliphtml">trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/LayoutTests/ChangeLog        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2015-01-29  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Border-radius clipping on a stacking context causes descendants to not render
+        https://bugs.webkit.org/show_bug.cgi?id=140536
+
+        Reviewed by Zalan Bujtas.
+        
+        Ref test that clips out the middle of a composited rounded-rect overflow element,
+        and also tests reflections.
+
+        * compositing/clipping/border-radius-stacking-context-clip-expected.html: Added.
+        * compositing/clipping/border-radius-stacking-context-clip.html: Added.
+
</ins><span class="cx"> 2015-01-29  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove support for screen font substitution
</span></span></pre></div>
<a id="trunkLayoutTestscompositingclippingborderradiusstackingcontextclipexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip-expected.html (0 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip-expected.html        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        .clipper {
+            position: absolute;
+            width: 300px;
+            height: 200px;
+            clip: rect(50px, 250px, 150px, 50px);
+            -webkit-box-reflect: below 10px;
+        }
+
+        .container {
+            width: 400px;
+            height: 300px;
+            border: 2px solid black;
+            overflow: hidden;
+            position: relative;
+            z-index: 0;
+        }
+        
+        .child {
+            height: 100%;
+            width: 100%;
+            background-color: blue;
+        }
+        
+        .composited {
+            -webkit-transform: translateZ(0);
+        }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div class=&quot;clipper&quot;&gt;
+        &lt;div class=&quot;container&quot;&gt;
+            &lt;div class=&quot;composited child&quot;&gt;
+            &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+
</ins></span></pre></div>
<a id="trunkLayoutTestscompositingclippingborderradiusstackingcontextcliphtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip.html (0 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip.html                                (rev 0)
+++ trunk/LayoutTests/compositing/clipping/border-radius-stacking-context-clip.html        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        .clipper {
+            position: absolute;
+            width: 300px;
+            height: 200px;
+            clip: rect(50px, 250px, 150px, 50px);
+            -webkit-box-reflect: below 10px;
+        }
+
+        .container {
+            width: 400px;
+            height: 300px;
+            border: 2px solid black;
+            border-radius: 30%;
+            overflow: hidden;
+            position: relative;
+            z-index: 0;
+        }
+        
+        .child {
+            height: 100%;
+            width: 100%;
+            background-color: blue;
+        }
+        
+        .composited {
+            -webkit-transform: translateZ(0);
+        }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div class=&quot;clipper&quot;&gt;
+        &lt;div class=&quot;container&quot;&gt;
+            &lt;div class=&quot;composited child&quot;&gt;
+            &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/ChangeLog        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -1,3 +1,48 @@
</span><ins>+2015-01-29  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Border-radius clipping on a stacking context causes descendants to not render
+        https://bugs.webkit.org/show_bug.cgi?id=140536
+
+        Reviewed by Zalan Bujtas.
+        
+        Fix one of the issues introduced in r178029. The changes in GraphicsLayerCA
+        failed to adhere to the &quot;set a bit and flush later&quot; pattern that this class uses,
+        instead poking the platform layers directly. This caused an issue where the bounds
+        of the clipping layer would later be set to 0x0, causing content to disappear.
+        
+        Fix by changing the &quot;applyClippingBorder&quot; function to &quot;setMasksToBoundsRect&quot;
+        and have it update via a new MasksToBoundsRectChanged dirty bit.
+
+        In order to avoid clobbering the mask layer used to clip contents, we need another
+        shape mask layer, so rename m_shapeMaskLayer to m_contentsShapeMaskLayer, then
+        introduce a new m_shapeMaskLayer which is used for masks-to-bounds clipping. Update
+        the reflection cloning code to correctly clone this layer.
+
+        Test: compositing/clipping/border-radius-stacking-context-clip.html
+
+        * WebCore.exp.in:
+        * platform/graphics/GraphicsLayer.h:
+        (WebCore::GraphicsLayer::maskToBoundsRect):
+        (WebCore::GraphicsLayer::setMasksToBoundsRect):
+        (WebCore::GraphicsLayer::applyClippingBorder): Deleted.
+        (WebCore::GraphicsLayer::clearClippingBorder): Deleted.
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::willBeDestroyed):
+        (WebCore::GraphicsLayerCA::setMasksToBoundsRect):
+        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
+        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
+        (WebCore::GraphicsLayerCA::updateContentsImage):
+        (WebCore::GraphicsLayerCA::updateContentsRects):
+        (WebCore::GraphicsLayerCA::updateMasksToBoundsRect):
+        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
+        (WebCore::GraphicsLayerCA::applyClippingBorder): Deleted.
+        (WebCore::GraphicsLayerCA::clearClippingBorder): Deleted.
+        * platform/graphics/ca/GraphicsLayerCA.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateChildClippingStrategy): Add a FIXME since
+        this code is trying to access geometry and we may not have done layout yet.
+        Also, to clear the rounded rect, just set a non-rounded rect the size of the layer.
+
</ins><span class="cx"> 2015-01-29  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove support for screen font substitution
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/WebCore.exp.in        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -598,10 +598,9 @@
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA18setOpacityInternalEf
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA18setReplicatedLayerEPNS_13GraphicsLayerE
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA18setShowDebugBorderEb
</span><del>-__ZN7WebCore15GraphicsLayerCA19applyClippingBorderERKNS_16FloatRoundedRectE
-__ZN7WebCore15GraphicsLayerCA19clearClippingBorderEv
</del><span class="cx"> __ZN7WebCore15GraphicsLayerCA19setCustomAppearanceENS_13GraphicsLayer16CustomAppearanceE
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA20setChildrenTransformERKNS_20TransformationMatrixE
</span><ins>+__ZN7WebCore15GraphicsLayerCA20setMasksToBoundsRectERKNS_16FloatRoundedRectE
</ins><span class="cx"> __ZN7WebCore15GraphicsLayerCA20setReplicatedByLayerEPNS_13GraphicsLayerE
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA21flushCompositingStateERKNS_9FloatRectE
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA21setAcceleratesDrawingEb
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -365,11 +365,14 @@
</span><span class="cx">     FloatRect contentsRect() const { return m_contentsRect; }
</span><span class="cx">     virtual void setContentsRect(const FloatRect&amp; r) { m_contentsRect = r; }
</span><span class="cx"> 
</span><ins>+    // Set a rounded rect that will be used to clip the layer contents.
</ins><span class="cx">     FloatRoundedRect contentsClippingRect() const { return m_contentsClippingRect; }
</span><span class="cx">     virtual void setContentsClippingRect(const FloatRoundedRect&amp; roundedRect) { m_contentsClippingRect = roundedRect; }
</span><span class="cx"> 
</span><del>-    virtual bool applyClippingBorder(const FloatRoundedRect&amp;) { return false; }
-    virtual void clearClippingBorder() { return; }
</del><ins>+    // Set a rounded rect that is used to clip this layer and its descendants (implies setting masksToBounds).
+    // Returns false if the platform can't support this rounded clip, and we should fall back to painting a mask.
+    FloatRoundedRect maskToBoundsRect() const { return m_masksToBoundsRect; };
+    virtual bool setMasksToBoundsRect(const FloatRoundedRect&amp; roundedRect) { m_masksToBoundsRect = roundedRect; return false; }
</ins><span class="cx"> 
</span><span class="cx">     // Transitions are identified by a special animation name that cannot clash with a keyframe identifier.
</span><span class="cx">     static String animationNameForTransition(AnimatedPropertyID);
</span><span class="lines">@@ -592,6 +595,7 @@
</span><span class="cx"> 
</span><span class="cx">     FloatRect m_contentsRect;
</span><span class="cx">     FloatRoundedRect m_contentsClippingRect;
</span><ins>+    FloatRoundedRect m_masksToBoundsRect;
</ins><span class="cx">     FloatPoint m_contentsTilePhase;
</span><span class="cx">     FloatSize m_contentsTileSize;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -368,7 +368,13 @@
</span><span class="cx"> 
</span><span class="cx">     if (m_contentsClippingLayer)
</span><span class="cx">         m_contentsClippingLayer-&gt;setOwner(nullptr);
</span><del>-        
</del><ins>+
+    if (m_contentsShapeMaskLayer)
+        m_contentsShapeMaskLayer-&gt;setOwner(nullptr);
+
+    if (m_shapeMaskLayer)
+        m_shapeMaskLayer-&gt;setOwner(nullptr);
+    
</ins><span class="cx">     if (m_structuralLayer)
</span><span class="cx">         m_structuralLayer-&gt;setOwner(nullptr);
</span><span class="cx"> 
</span><span class="lines">@@ -782,6 +788,16 @@
</span><span class="cx">     noteLayerPropertyChanged(ContentsRectsChanged);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool GraphicsLayerCA::setMasksToBoundsRect(const FloatRoundedRect&amp; roundedRect)
+{
+    if (roundedRect == m_masksToBoundsRect)
+        return true;
+
+    GraphicsLayer::setMasksToBoundsRect(roundedRect);
+    noteLayerPropertyChanged(MasksToBoundsRectChanged);
+    return true;
+}
+
</ins><span class="cx"> bool GraphicsLayerCA::shouldRepaintOnSizeChange() const
</span><span class="cx"> {
</span><span class="cx">     return drawsContent() &amp;&amp; !tiledBacking();
</span><span class="lines">@@ -871,7 +887,7 @@
</span><span class="cx">             m_contentsLayerPurpose = ContentsLayerForBackgroundColor;
</span><span class="cx">             m_contentsLayer = createPlatformCALayer(PlatformCALayer::LayerTypeLayer, this);
</span><span class="cx"> #ifndef NDEBUG
</span><del>-            m_contentsLayer-&gt;setName(&quot;Background Color Layer&quot;);
</del><ins>+            m_contentsLayer-&gt;setName(String::format(&quot;Background Color Layer %llu&quot;, m_contentsLayer-&gt;layerID()));
</ins><span class="cx"> #endif
</span><span class="cx">             contentsLayerChanged = true;
</span><span class="cx">         }
</span><span class="lines">@@ -1366,6 +1382,9 @@
</span><span class="cx">     if (m_uncommittedChanges &amp; ContentsRectsChanged) // Needs to happen before ChildrenChanged
</span><span class="cx">         updateContentsRects();
</span><span class="cx"> 
</span><ins>+    if (m_uncommittedChanges &amp; MasksToBoundsRectChanged) // Needs to happen before ChildrenChanged
+        updateMasksToBoundsRect();
+
</ins><span class="cx">     if (m_uncommittedChanges &amp; MaskLayerChanged) {
</span><span class="cx">         updateMaskLayer();
</span><span class="cx">         // If the mask layer becomes tiled it can set this flag again. Clear the flag so that
</span><span class="lines">@@ -1968,7 +1987,7 @@
</span><span class="cx">         if (!m_contentsLayer.get()) {
</span><span class="cx">             m_contentsLayer = createPlatformCALayer(PlatformCALayer::LayerTypeLayer, this);
</span><span class="cx"> #ifndef NDEBUG
</span><del>-            m_contentsLayer-&gt;setName(&quot;Image Layer&quot;);
</del><ins>+            m_contentsLayer-&gt;setName(String::format(&quot;Image Layer %llu&quot;, m_contentsLayer-&gt;layerID()));
</ins><span class="cx"> #endif
</span><span class="cx">             setupContentsLayer(m_contentsLayer.get());
</span><span class="cx">             // m_contentsLayer will be parented by updateSublayerList
</span><span class="lines">@@ -2026,38 +2045,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool GraphicsLayerCA::applyClippingBorder(const FloatRoundedRect&amp; roundedRect)
-{
-    if (roundedRect.radii().isUniformCornerRadius()) {
-        m_layer-&gt;setMask(nullptr);
-        m_layer-&gt;setMasksToBounds(true);
-        m_layer-&gt;setCornerRadius(roundedRect.radii().topLeft().width());
-    } else {
-        if (!m_shapeMaskLayer) {
-            m_shapeMaskLayer = createPlatformCALayer(PlatformCALayer::LayerTypeShapeLayer, this);
-            m_shapeMaskLayer-&gt;setAnchorPoint(FloatPoint3D());
-        }
-
-        m_shapeMaskLayer-&gt;setPosition(FloatPoint());
-        m_shapeMaskLayer-&gt;setBounds(m_layer-&gt;bounds());
-    
-        m_layer-&gt;setCornerRadius(0);
-        m_layer-&gt;setMask(m_shapeMaskLayer.get());
-
-        FloatRoundedRect offsetClippingRoundedRect(m_layer-&gt;bounds(), roundedRect.radii());
-        m_shapeMaskLayer-&gt;setShapeRoundedRect(offsetClippingRoundedRect);
-    }
-
-    return true;
-}
-
-void GraphicsLayerCA::clearClippingBorder()
-{
-    m_layer-&gt;setCornerRadius(0);
-    m_layer-&gt;setMasksToBounds(false);
-    m_layer-&gt;setMask(nullptr);
-}
-
</del><span class="cx"> // The clipping strategy depends on whether the rounded rect has equal corner radii.
</span><span class="cx"> void GraphicsLayerCA::updateClippingStrategy(PlatformCALayer&amp; clippingLayer, RefPtr&lt;PlatformCALayer&gt;&amp; shapeMaskLayer, const FloatRoundedRect&amp; roundedRect)
</span><span class="cx"> {
</span><span class="lines">@@ -2105,7 +2092,7 @@
</span><span class="cx">             m_contentsClippingLayer = createPlatformCALayer(PlatformCALayer::LayerTypeLayer, this);
</span><span class="cx">             m_contentsClippingLayer-&gt;setAnchorPoint(FloatPoint());
</span><span class="cx"> #ifndef NDEBUG
</span><del>-            m_contentsClippingLayer-&gt;setName(&quot;Contents Clipping&quot;);
</del><ins>+            m_contentsClippingLayer-&gt;setName(String::format(&quot;Contents Clipping Layer %llu&quot;, m_contentsClippingLayer-&gt;layerID()));
</ins><span class="cx"> #endif
</span><span class="cx">             gainedOrLostClippingLayer = true;
</span><span class="cx">         }
</span><span class="lines">@@ -2113,7 +2100,7 @@
</span><span class="cx">         m_contentsClippingLayer-&gt;setPosition(clippingOrigin);
</span><span class="cx">         m_contentsClippingLayer-&gt;setBounds(clippingBounds);
</span><span class="cx"> 
</span><del>-        updateClippingStrategy(*m_contentsClippingLayer, m_shapeMaskLayer, m_contentsClippingRect);
</del><ins>+        updateClippingStrategy(*m_contentsClippingLayer, m_contentsShapeMaskLayer, m_contentsClippingRect);
</ins><span class="cx"> 
</span><span class="cx">         if (gainedOrLostClippingLayer) {
</span><span class="cx">             m_contentsLayer-&gt;removeFromSuperlayer();
</span><span class="lines">@@ -2132,9 +2119,9 @@
</span><span class="cx">             gainedOrLostClippingLayer = true;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (m_shapeMaskLayer) {
-            m_shapeMaskLayer-&gt;setOwner(nullptr);
-            m_shapeMaskLayer = nullptr;
</del><ins>+        if (m_contentsShapeMaskLayer) {
+            m_contentsShapeMaskLayer-&gt;setOwner(nullptr);
+            m_contentsShapeMaskLayer = nullptr;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         contentOrigin = m_contentsRect.location();
</span><span class="lines">@@ -2154,17 +2141,39 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_contentsClippingLayerClones) {
</span><del>-        if (!m_shapeMaskLayerClones &amp;&amp; m_shapeMaskLayer)
-            m_shapeMaskLayerClones = std::make_unique&lt;LayerMap&gt;();
</del><ins>+        if (!m_contentsShapeMaskLayerClones &amp;&amp; m_contentsShapeMaskLayer)
+            m_contentsShapeMaskLayerClones = std::make_unique&lt;LayerMap&gt;();
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; clone : *m_contentsClippingLayerClones) {
</span><span class="cx">             CloneID cloneID = clone.key;
</span><span class="cx">             RefPtr&lt;PlatformCALayer&gt; shapeMaskLayerClone;
</span><ins>+            if (m_contentsShapeMaskLayerClones)
+                shapeMaskLayerClone = m_contentsShapeMaskLayerClones-&gt;get(cloneID);
+
+            bool hadShapeMask = shapeMaskLayerClone;
+            updateClippingStrategy(*clone.value, shapeMaskLayerClone, m_contentsClippingRect);
+
+            if (!shapeMaskLayerClone &amp;&amp; m_contentsShapeMaskLayerClones)
+                m_contentsShapeMaskLayerClones-&gt;remove(cloneID);
+            else if (shapeMaskLayerClone &amp;&amp; !hadShapeMask)
+                m_contentsShapeMaskLayerClones-&gt;add(cloneID, shapeMaskLayerClone);
+        }
+    }
+}
+
+void GraphicsLayerCA::updateMasksToBoundsRect()
+{
+    updateClippingStrategy(*m_layer, m_shapeMaskLayer, m_masksToBoundsRect);
+
+    if (m_layerClones) {
+        for (auto&amp; clone : *m_layerClones) {
+            CloneID cloneID = clone.key;
+            RefPtr&lt;PlatformCALayer&gt; shapeMaskLayerClone;
</ins><span class="cx">             if (m_shapeMaskLayerClones)
</span><span class="cx">                 shapeMaskLayerClone = m_shapeMaskLayerClones-&gt;get(cloneID);
</span><span class="cx"> 
</span><span class="cx">             bool hadShapeMask = shapeMaskLayerClone;
</span><del>-            updateClippingStrategy(*clone.value, shapeMaskLayerClone, m_contentsClippingRect);
</del><ins>+            updateClippingStrategy(*clone.value, shapeMaskLayerClone, m_masksToBoundsRect);
</ins><span class="cx"> 
</span><span class="cx">             if (!shapeMaskLayerClone &amp;&amp; m_shapeMaskLayerClones)
</span><span class="cx">                 m_shapeMaskLayerClones-&gt;remove(cloneID);
</span><span class="lines">@@ -3082,6 +3091,7 @@
</span><span class="cx">         dumpInnerLayer(textStream, &quot;contents clipping layer&quot;, m_contentsClippingLayer.get(), indent, behavior);
</span><span class="cx">         dumpInnerLayer(textStream, &quot;shape mask layer&quot;, m_shapeMaskLayer.get(), indent, behavior);
</span><span class="cx">         dumpInnerLayer(textStream, &quot;contents layer&quot;, m_contentsLayer.get(), indent, behavior);
</span><ins>+        dumpInnerLayer(textStream, &quot;contents shape mask layer&quot;, m_contentsShapeMaskLayer.get(), indent, behavior);
</ins><span class="cx">         dumpInnerLayer(textStream, &quot;backdrop layer&quot;, m_backdropLayer.get(), indent, behavior);
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -3239,7 +3249,7 @@
</span><span class="cx"> }   
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::ensureCloneLayers(CloneID cloneID, RefPtr&lt;PlatformCALayer&gt;&amp; primaryLayer, RefPtr&lt;PlatformCALayer&gt;&amp; structuralLayer,
</span><del>-    RefPtr&lt;PlatformCALayer&gt;&amp; contentsLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsClippingLayer, RefPtr&lt;PlatformCALayer&gt;&amp; shapeMaskLayer, CloneLevel cloneLevel)
</del><ins>+    RefPtr&lt;PlatformCALayer&gt;&amp; contentsLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsClippingLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsShapeMaskLayer, RefPtr&lt;PlatformCALayer&gt;&amp; shapeMaskLayer, CloneLevel cloneLevel)
</ins><span class="cx"> {
</span><span class="cx">     structuralLayer = nullptr;
</span><span class="cx">     contentsLayer = nullptr;
</span><span class="lines">@@ -3256,6 +3266,9 @@
</span><span class="cx">     if (!m_contentsClippingLayerClones &amp;&amp; m_contentsClippingLayer)
</span><span class="cx">         m_contentsClippingLayerClones = std::make_unique&lt;LayerMap&gt;();
</span><span class="cx"> 
</span><ins>+    if (!m_contentsShapeMaskLayerClones &amp;&amp; m_contentsShapeMaskLayer)
+        m_contentsShapeMaskLayerClones = std::make_unique&lt;LayerMap&gt;();
+
</ins><span class="cx">     if (!m_shapeMaskLayerClones &amp;&amp; m_shapeMaskLayer)
</span><span class="cx">         m_shapeMaskLayerClones = std::make_unique&lt;LayerMap&gt;();
</span><span class="cx"> 
</span><span class="lines">@@ -3263,6 +3276,7 @@
</span><span class="cx">     structuralLayer = findOrMakeClone(cloneID, m_structuralLayer.get(), m_structuralLayerClones.get(), cloneLevel);
</span><span class="cx">     contentsLayer = findOrMakeClone(cloneID, m_contentsLayer.get(), m_contentsLayerClones.get(), cloneLevel);
</span><span class="cx">     contentsClippingLayer = findOrMakeClone(cloneID, m_contentsClippingLayer.get(), m_contentsClippingLayerClones.get(), cloneLevel);
</span><ins>+    contentsShapeMaskLayer = findOrMakeClone(cloneID, m_contentsShapeMaskLayer.get(), m_contentsShapeMaskLayerClones.get(), cloneLevel);
</ins><span class="cx">     shapeMaskLayer = findOrMakeClone(cloneID, m_shapeMaskLayer.get(), m_shapeMaskLayerClones.get(), cloneLevel);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -3272,6 +3286,8 @@
</span><span class="cx">     m_structuralLayerClones = nullptr;
</span><span class="cx">     m_contentsLayerClones = nullptr;
</span><span class="cx">     m_contentsClippingLayerClones = nullptr;
</span><ins>+    m_contentsShapeMaskLayerClones = nullptr;
+    m_shapeMaskLayerClones = nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FloatPoint GraphicsLayerCA::positionForCloneRootLayer() const
</span><span class="lines">@@ -3303,8 +3319,9 @@
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; structuralLayer;
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; contentsLayer;
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; contentsClippingLayer;
</span><ins>+    RefPtr&lt;PlatformCALayer&gt; contentsShapeMaskLayer;
</ins><span class="cx">     RefPtr&lt;PlatformCALayer&gt; shapeMaskLayer;
</span><del>-    ensureCloneLayers(replicaState.cloneID(), primaryLayer, structuralLayer, contentsLayer, contentsClippingLayer, shapeMaskLayer, cloneLevel);
</del><ins>+    ensureCloneLayers(replicaState.cloneID(), primaryLayer, structuralLayer, contentsLayer, contentsClippingLayer, contentsShapeMaskLayer, shapeMaskLayer, cloneLevel);
</ins><span class="cx"> 
</span><span class="cx">     if (m_maskLayer) {
</span><span class="cx">         RefPtr&lt;PlatformCALayer&gt; maskClone = downcast&lt;GraphicsLayerCA&gt;(*m_maskLayer).fetchCloneLayers(replicaRoot, replicaState, IntermediateCloneLevel);
</span><span class="lines">@@ -3343,8 +3360,11 @@
</span><span class="cx">         contentsClippingLayer-&gt;appendSublayer(*contentsLayer);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (contentsShapeMaskLayer)
+        contentsClippingLayer-&gt;setMask(contentsShapeMaskLayer.get());
+
</ins><span class="cx">     if (shapeMaskLayer)
</span><del>-        contentsClippingLayer-&gt;setMask(shapeMaskLayer.get());
</del><ins>+        primaryLayer-&gt;setMask(shapeMaskLayer.get());
</ins><span class="cx">     
</span><span class="cx">     if (replicaLayer || structuralLayer || contentsLayer || contentsClippingLayer || childLayers.size() &gt; 0) {
</span><span class="cx">         if (structuralLayer) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -118,7 +118,8 @@
</span><span class="cx">     
</span><span class="cx">     WEBCORE_EXPORT virtual void setContentsRect(const FloatRect&amp;) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setContentsClippingRect(const FloatRoundedRect&amp;) override;
</span><del>-    
</del><ins>+    WEBCORE_EXPORT virtual bool setMasksToBoundsRect(const FloatRoundedRect&amp;);
+
</ins><span class="cx">     WEBCORE_EXPORT virtual void suspendAnimations(double time) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void resumeAnimations() override;
</span><span class="cx"> 
</span><span class="lines">@@ -173,9 +174,6 @@
</span><span class="cx"> private:
</span><span class="cx">     virtual bool isGraphicsLayerCA() const override { return true; }
</span><span class="cx"> 
</span><del>-    virtual bool applyClippingBorder(const FloatRoundedRect&amp;) override;
-    virtual void clearClippingBorder() override;
-
</del><span class="cx">     WEBCORE_EXPORT virtual void willBeDestroyed() override;
</span><span class="cx"> 
</span><span class="cx">     // PlatformCALayerClient overrides
</span><span class="lines">@@ -350,7 +348,7 @@
</span><span class="cx">     PassRefPtr&lt;PlatformCALayer&gt; findOrMakeClone(CloneID, PlatformCALayer *, LayerMap*, CloneLevel);
</span><span class="cx"> 
</span><span class="cx">     void ensureCloneLayers(CloneID, RefPtr&lt;PlatformCALayer&gt;&amp; primaryLayer, RefPtr&lt;PlatformCALayer&gt;&amp; structuralLayer,
</span><del>-        RefPtr&lt;PlatformCALayer&gt;&amp; contentsLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsClippingLayer, RefPtr&lt;PlatformCALayer&gt;&amp; shapeMaskLayer, CloneLevel);
</del><ins>+        RefPtr&lt;PlatformCALayer&gt;&amp; contentsLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsClippingLayer, RefPtr&lt;PlatformCALayer&gt;&amp; contentsShapeMaskLayer, RefPtr&lt;PlatformCALayer&gt;&amp; shapeMaskLayer, CloneLevel);
</ins><span class="cx"> 
</span><span class="cx">     bool hasCloneLayers() const { return !!m_layerClones; }
</span><span class="cx">     void removeCloneLayers();
</span><span class="lines">@@ -374,6 +372,7 @@
</span><span class="cx">     void updateContentsPlatformLayer();
</span><span class="cx">     void updateContentsColorLayer();
</span><span class="cx">     void updateContentsRects();
</span><ins>+    void updateMasksToBoundsRect();
</ins><span class="cx">     void updateMaskLayer();
</span><span class="cx">     void updateReplicatedLayers();
</span><span class="cx"> 
</span><span class="lines">@@ -427,21 +426,22 @@
</span><span class="cx">         ContentsPlatformLayerChanged =  1LLU &lt;&lt; 16,
</span><span class="cx">         ContentsColorLayerChanged =     1LLU &lt;&lt; 17,
</span><span class="cx">         ContentsRectsChanged =          1LLU &lt;&lt; 18,
</span><del>-        MaskLayerChanged =              1LLU &lt;&lt; 19,
-        ReplicatedLayerChanged =        1LLU &lt;&lt; 20,
-        ContentsNeedsDisplay =          1LLU &lt;&lt; 21,
-        AcceleratesDrawingChanged =     1LLU &lt;&lt; 22,
-        ContentsScaleChanged =          1LLU &lt;&lt; 23,
-        ContentsVisibilityChanged =     1LLU &lt;&lt; 24,
-        VisibleRectChanged =            1LLU &lt;&lt; 25,
-        FiltersChanged =                1LLU &lt;&lt; 26,
-        BackdropFiltersChanged =        1LLU &lt;&lt; 27,
-        TilingAreaChanged =             1LLU &lt;&lt; 28,
-        TilesAdded =                    1LLU &lt;&lt; 29,
-        DebugIndicatorsChanged =        1LLU &lt;&lt; 30,
-        CustomAppearanceChanged =       1LLU &lt;&lt; 31,
-        CustomBehaviorChanged =         1LLU &lt;&lt; 32,
-        BlendModeChanged =              1LLU &lt;&lt; 33,
</del><ins>+        MasksToBoundsRectChanged =      1LLU &lt;&lt; 19,
+        MaskLayerChanged =              1LLU &lt;&lt; 20,
+        ReplicatedLayerChanged =        1LLU &lt;&lt; 21,
+        ContentsNeedsDisplay =          1LLU &lt;&lt; 22,
+        AcceleratesDrawingChanged =     1LLU &lt;&lt; 23,
+        ContentsScaleChanged =          1LLU &lt;&lt; 24,
+        ContentsVisibilityChanged =     1LLU &lt;&lt; 25,
+        VisibleRectChanged =            1LLU &lt;&lt; 26,
+        FiltersChanged =                1LLU &lt;&lt; 27,
+        BackdropFiltersChanged =        1LLU &lt;&lt; 28,
+        TilingAreaChanged =             1LLU &lt;&lt; 29,
+        TilesAdded =                    1LLU &lt;&lt; 30,
+        DebugIndicatorsChanged =        1LLU &lt;&lt; 31,
+        CustomAppearanceChanged =       1LLU &lt;&lt; 32,
+        CustomBehaviorChanged =         1LLU &lt;&lt; 33,
+        BlendModeChanged =              1LLU &lt;&lt; 34,
</ins><span class="cx">     };
</span><span class="cx">     typedef uint64_t LayerChangeFlags;
</span><span class="cx">     enum ScheduleFlushOrNot { ScheduleFlush, DontScheduleFlush };
</span><span class="lines">@@ -458,6 +458,7 @@
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_contentsClippingLayer; // A layer used to clip inner content
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_shapeMaskLayer; // Used to clip with non-trivial corner radii.
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_contentsLayer; // A layer used for inner content, like image and video
</span><ins>+    RefPtr&lt;PlatformCALayer&gt; m_contentsShapeMaskLayer; // Used to clip the content layer with non-trivial corner radii.
</ins><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_backdropLayer; // The layer used for backdrop rendering, if necessary.
</span><span class="cx"> 
</span><span class="cx">     // References to clones of our layers, for replicated layers.
</span><span class="lines">@@ -465,6 +466,7 @@
</span><span class="cx">     std::unique_ptr&lt;LayerMap&gt; m_structuralLayerClones;
</span><span class="cx">     std::unique_ptr&lt;LayerMap&gt; m_contentsLayerClones;
</span><span class="cx">     std::unique_ptr&lt;LayerMap&gt; m_contentsClippingLayerClones;
</span><ins>+    std::unique_ptr&lt;LayerMap&gt; m_contentsShapeMaskLayerClones;
</ins><span class="cx">     std::unique_ptr&lt;LayerMap&gt; m_shapeMaskLayerClones;
</span><span class="cx"> 
</span><span class="cx"> #ifdef VISIBLE_TILE_WASH
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (179368 => 179369)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-01-29 22:40:17 UTC (rev 179368)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-01-29 22:57:53 UTC (rev 179369)
</span><span class="lines">@@ -1449,10 +1449,11 @@
</span><span class="cx"> {
</span><span class="cx">     if (hasClippingLayer() &amp;&amp; needsDescendantsClippingLayer) {
</span><span class="cx">         if (is&lt;RenderBox&gt;(renderer()) &amp;&amp; (renderer().style().clipPath() || renderer().style().hasBorderRadius())) {
</span><ins>+            // FIXME: we shouldn't get geometry here as layout may not have been udpated.
</ins><span class="cx">             LayoutRect boxRect(LayoutPoint(), downcast&lt;RenderBox&gt;(renderer()).size());
</span><span class="cx">             FloatRoundedRect contentsClippingRect = renderer().style().getRoundedInnerBorderFor(boxRect).pixelSnappedRoundedRectForPainting(deviceScaleFactor());
</span><span class="cx">             contentsClippingRect.move(contentOffsetInCompostingLayer());
</span><del>-            if (clippingLayer()-&gt;applyClippingBorder(contentsClippingRect)) {
</del><ins>+            if (clippingLayer()-&gt;setMasksToBoundsRect(contentsClippingRect)) {
</ins><span class="cx">                 if (m_childClippingMaskLayer) 
</span><span class="cx">                     m_childClippingMaskLayer = nullptr;
</span><span class="cx">                 return;
</span><span class="lines">@@ -1472,7 +1473,7 @@
</span><span class="cx">                 clippingLayer()-&gt;setMaskLayer(nullptr);
</span><span class="cx">         } else 
</span><span class="cx">             if (hasClippingLayer())
</span><del>-                clippingLayer()-&gt;clearClippingBorder();
</del><ins>+                clippingLayer()-&gt;setMasksToBoundsRect(FloatRoundedRect(FloatRect(FloatPoint(), clippingLayer()-&gt;size())));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>