<!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>[185124] 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/185124">185124</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2015-06-02 14:35:24 -0700 (Tue, 02 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Backdrop filter is pulling in content from behind the window.
https://bugs.webkit.org/show_bug.cgi?id=145561
rdar://problem/20909309

Reviewed by Simon Fraser.

This patch ensures that the backdrop filter layer is positioned and sized properly.

The backdrop filter layer should take its size and position from its renderer and not
directly from the composited layer.
In certain cases the composited layer's size is expanded to cover items like box shadow or an absolute positioned descendant.
In such cases, we ended up applying the backdrop filter to those areas as well.

Source/WebCore:

Tests: css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html
       css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html

* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::setBackdropFiltersRect):
(WebCore::GraphicsLayer::backdropFiltersRect):
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::setBackdropFiltersRect):
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
(WebCore::GraphicsLayerCA::updateBackdropFilters):
(WebCore::GraphicsLayerCA::updateBackdropFiltersRect):
(WebCore::GraphicsLayerCA::updateContentsRects):
(WebCore::GraphicsLayerCA::updateGeometry): Deleted.
* platform/graphics/ca/GraphicsLayerCA.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
(WebCore::RenderLayerBacking::updateGeometry):
* rendering/RenderLayerBacking.h:

LayoutTests:

* css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt: Added.
* css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html: Added.
* css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt: Added.
* css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.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="#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>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingh">trunk/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyabsoluteexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyabsolutehtml">trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyborderandpaddingexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyborderandpaddinghtml">trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/LayoutTests/ChangeLog        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2015-06-02  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Backdrop filter is pulling in content from behind the window.
+        https://bugs.webkit.org/show_bug.cgi?id=145561
+        rdar://problem/20909309
+
+        Reviewed by Simon Fraser.
+
+        This patch ensures that the backdrop filter layer is positioned and sized properly.
+
+        The backdrop filter layer should take its size and position from its renderer and not
+        directly from the composited layer.
+        In certain cases the composited layer's size is expanded to cover items like box shadow or an absolute positioned descendant.
+        In such cases, we ended up applying the backdrop filter to those areas as well.
+
+        * css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt: Added.
+        * css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html: Added.
+        * css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt: Added.
+        * css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html: Added.
+
</ins><span class="cx"> 2015-06-02  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix Mac Mavericks layout test failure following &lt;http://trac.webkit.org/changeset/185096&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyabsoluteexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt (0 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute-expected.txt        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+foofoobar
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 342.00 318.00)
+          (drawsContent 1)
+          (structural layer 179.00, 167.00 342.00 x 318.00)
+          (backdrop layer 0.00, 0.00 100.00 x 200.00)
+        )
+      )
+    )
+  )
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyabsolutehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html (0 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html                                (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that backdrop filter is sized properly when the compositing layer bounds is different from its renderer's bounds.&lt;/title&gt;
+&lt;style&gt;
+    .outer {
+        height: 100px;
+        width: 200px;
+        background-color: rgba(0, 0, 255, 1);
+    }
+
+    .container-background {
+        position: relative;
+        -webkit-backdrop-filter: invert(1);
+        height: 200px;
+        width: 100px;
+    }
+
+    .child {
+            position: absolute;
+            left: 300px;
+            top: 300px;
+    }
+&lt;/style&gt;
+&lt;script&gt;
+    if (window.testRunner)
+        testRunner.dumpAsText();
+
+    function dumpLayers() {
+        if (window.internals)
+            document.getElementById('result').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_CONTENT_LAYERS)
+    }
+    window.addEventListener('load', dumpLayers, false);
+&lt;/script&gt;
+&lt;body&gt;
+&lt;div class=outer&gt;
+  &lt;div class=container-background&gt;foo
+    &lt;div class=child&gt;foobar&lt;/div&gt;
+  &lt;/div&gt;
+&lt;/div&gt;
+&lt;pre id=result&gt;&lt;/pre&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyborderandpaddingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt (0 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding-expected.txt        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+foo
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 180.00 280.00)
+          (drawsContent 1)
+          (structural layer 98.00, 148.00 180.00 x 280.00)
+          (backdrop layer 40.00, 40.00 100.00 x 200.00)
+        )
+      )
+    )
+  )
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterdoesnotsizeproperlyborderandpaddinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html (0 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html                                (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that backdrop filter is sized properly when the compositing layer bounds is different from its renderer's bounds.&lt;/title&gt;
+&lt;style&gt;
+    .outer {
+        height: 100px;
+        width: 200px;
+        background-color: rgba(0, 0, 255, 1);
+    }
+
+    .container-background {
+        position: relative;
+        -webkit-backdrop-filter: invert(1);
+        height: 200px;
+        width: 100px;
+        border: 20px solid transparent;
+        padding: 20px;
+    }
+
+&lt;/style&gt;
+&lt;script&gt;
+    if (window.testRunner)
+        testRunner.dumpAsText();
+
+    function dumpLayers() {
+        if (window.internals)
+            document.getElementById('result').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_CONTENT_LAYERS)
+    }
+    window.addEventListener('load', dumpLayers, false);
+&lt;/script&gt;
+&lt;body&gt;
+&lt;div class=outer&gt;
+  &lt;div class=container-background&gt;foo
+  &lt;/div&gt;
+&lt;/div&gt;
+&lt;pre id=result&gt;&lt;/pre&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/ChangeLog        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2015-06-02  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Backdrop filter is pulling in content from behind the window.
+        https://bugs.webkit.org/show_bug.cgi?id=145561
+        rdar://problem/20909309
+
+        Reviewed by Simon Fraser.
+
+        This patch ensures that the backdrop filter layer is positioned and sized properly.
+
+        The backdrop filter layer should take its size and position from its renderer and not
+        directly from the composited layer.
+        In certain cases the composited layer's size is expanded to cover items like box shadow or an absolute positioned descendant.
+        In such cases, we ended up applying the backdrop filter to those areas as well.
+
+        Tests: css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html
+               css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html
+
+        * platform/graphics/GraphicsLayer.h:
+        (WebCore::GraphicsLayer::setBackdropFiltersRect):
+        (WebCore::GraphicsLayer::backdropFiltersRect):
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::setBackdropFiltersRect):
+        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
+        (WebCore::GraphicsLayerCA::updateBackdropFilters):
+        (WebCore::GraphicsLayerCA::updateBackdropFiltersRect):
+        (WebCore::GraphicsLayerCA::updateContentsRects):
+        (WebCore::GraphicsLayerCA::updateGeometry): Deleted.
+        * platform/graphics/ca/GraphicsLayerCA.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
+        (WebCore::RenderLayerBacking::updateGeometry):
+        * rendering/RenderLayerBacking.h:
+
</ins><span class="cx"> 2015-06-02  Eric Carlson  &lt;eric.carlson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac] occasional crash in Document::playbackTargetAvailabilityDidChange
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -371,6 +371,9 @@
</span><span class="cx">     const FilterOperations&amp; backdropFilters() const { return m_backdropFilters; }
</span><span class="cx">     virtual bool setBackdropFilters(const FilterOperations&amp; filters) { m_backdropFilters = filters; return true; }
</span><span class="cx"> 
</span><ins>+    virtual void setBackdropFiltersRect(const FloatRect&amp; backdropFiltersRect) { m_backdropFiltersRect = backdropFiltersRect; }
+    FloatRect backdropFiltersRect() const { return m_backdropFiltersRect; }
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     BlendMode blendMode() const { return m_blendMode; }
</span><span class="cx">     virtual void setBlendMode(BlendMode blendMode) { m_blendMode = blendMode; }
</span><span class="lines">@@ -627,6 +630,7 @@
</span><span class="cx">     FloatRoundedRect m_masksToBoundsRect;
</span><span class="cx">     FloatSize m_contentsTilePhase;
</span><span class="cx">     FloatSize m_contentsTileSize;
</span><ins>+    FloatRect m_backdropFiltersRect;
</ins><span class="cx"> 
</span><span class="cx">     int m_repaintCount;
</span><span class="cx">     CustomAppearance m_customAppearance;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -745,6 +745,15 @@
</span><span class="cx">     return canCompositeFilters;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void GraphicsLayerCA::setBackdropFiltersRect(const FloatRect&amp; backdropFiltersRect)
+{
+    if (backdropFiltersRect == m_backdropFiltersRect)
+        return;
+
+    GraphicsLayer::setBackdropFiltersRect(backdropFiltersRect);
+    noteLayerPropertyChanged(BackdropFiltersRectChanged);
+}
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void GraphicsLayerCA::setBlendMode(BlendMode blendMode)
</span><span class="cx"> {
</span><span class="lines">@@ -1518,6 +1527,9 @@
</span><span class="cx">     if (m_uncommittedChanges &amp; BackdropFiltersChanged)
</span><span class="cx">         updateBackdropFilters();
</span><span class="cx"> 
</span><ins>+    if (m_uncommittedChanges &amp; BackdropFiltersRectChanged)
+        updateBackdropFiltersRect();
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     if (m_uncommittedChanges &amp; BlendModeChanged)
</span><span class="cx">         updateBlendMode();
</span><span class="lines">@@ -1725,12 +1737,6 @@
</span><span class="cx">     m_layer-&gt;setBounds(adjustedBounds);
</span><span class="cx">     m_layer-&gt;setAnchorPoint(scaledAnchorPoint);
</span><span class="cx"> 
</span><del>-    if (m_backdropLayer) {
-        m_backdropLayer-&gt;setPosition(adjustedPosition);
-        m_backdropLayer-&gt;setBounds(adjustedBounds);
-        m_backdropLayer-&gt;setAnchorPoint(scaledAnchorPoint);
-    }
-
</del><span class="cx">     if (LayerMap* layerCloneMap = m_layerClones.get()) {
</span><span class="cx">         for (auto&amp; clone : *layerCloneMap) {
</span><span class="cx">             PlatformCALayer* cloneLayer = clone.value.get();
</span><span class="lines">@@ -1865,14 +1871,21 @@
</span><span class="cx"> 
</span><span class="cx">     if (!m_backdropLayer) {
</span><span class="cx">         m_backdropLayer = createPlatformCALayer(PlatformCALayer::LayerTypeBackdropLayer, this);
</span><del>-        m_backdropLayer-&gt;setPosition(m_layer-&gt;position());
-        m_backdropLayer-&gt;setBounds(m_layer-&gt;bounds());
-        m_backdropLayer-&gt;setAnchorPoint(m_layer-&gt;anchorPoint());
</del><ins>+        m_backdropLayer-&gt;setAnchorPoint(FloatPoint3D());
</ins><span class="cx">         m_backdropLayer-&gt;setMasksToBounds(true);
</span><span class="cx">     }
</span><span class="cx">     m_backdropLayer-&gt;setFilters(m_backdropFilters);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void GraphicsLayerCA::updateBackdropFiltersRect()
+{
+    if (!m_backdropLayer)
+        return;
+    FloatRect contentBounds(0, 0, m_backdropFiltersRect.width(), m_backdropFiltersRect.height());
+    m_backdropLayer-&gt;setBounds(contentBounds);
+    m_backdropLayer-&gt;setPosition(m_backdropFiltersRect.location());
+}
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void GraphicsLayerCA::updateBlendMode()
</span><span class="cx"> {
</span><span class="lines">@@ -2259,7 +2272,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     FloatPoint contentOrigin;
</span><del>-    FloatRect contentBounds(0, 0, m_contentsRect.width(), m_contentsRect.height());
</del><ins>+    const FloatRect contentBounds(0, 0, m_contentsRect.width(), m_contentsRect.height());
</ins><span class="cx"> 
</span><span class="cx">     FloatPoint clippingOrigin(m_contentsClippingRect.rect().location());
</span><span class="cx">     FloatRect clippingBounds(FloatPoint(), m_contentsClippingRect.rect().size());
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -103,6 +103,7 @@
</span><span class="cx">     virtual bool filtersCanBeComposited(const FilterOperations&amp;);
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT virtual bool setBackdropFilters(const FilterOperations&amp;) override;
</span><ins>+    WEBCORE_EXPORT virtual void setBackdropFiltersRect(const FloatRect&amp;) override;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     WEBCORE_EXPORT virtual void setBlendMode(BlendMode) override;
</span><span class="lines">@@ -398,6 +399,7 @@
</span><span class="cx">     void updateOpacityOnLayer();
</span><span class="cx">     void updateFilters();
</span><span class="cx">     void updateBackdropFilters();
</span><ins>+    void updateBackdropFiltersRect();
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     void updateBlendMode();
</span><span class="lines">@@ -465,13 +467,14 @@
</span><span class="cx">         CoverageRectChanged =           1LLU &lt;&lt; 26,
</span><span class="cx">         FiltersChanged =                1LLU &lt;&lt; 27,
</span><span class="cx">         BackdropFiltersChanged =        1LLU &lt;&lt; 28,
</span><del>-        TilingAreaChanged =             1LLU &lt;&lt; 29,
-        TilesAdded =                    1LLU &lt;&lt; 30,
-        DebugIndicatorsChanged =        1LLU &lt;&lt; 31,
-        CustomAppearanceChanged =       1LLU &lt;&lt; 32,
-        BlendModeChanged =              1LLU &lt;&lt; 33,
-        ShapeChanged =                  1LLU &lt;&lt; 34,
-        WindRuleChanged =               1LLU &lt;&lt; 35,
</del><ins>+        BackdropFiltersRectChanged =    1LLU &lt;&lt; 29,
+        TilingAreaChanged =             1LLU &lt;&lt; 30,
+        TilesAdded =                    1LLU &lt;&lt; 31,
+        DebugIndicatorsChanged =        1LLU &lt;&lt; 32,
+        CustomAppearanceChanged =       1LLU &lt;&lt; 33,
+        BlendModeChanged =              1LLU &lt;&lt; 34,
+        ShapeChanged =                  1LLU &lt;&lt; 35,
+        WindRuleChanged =               1LLU &lt;&lt; 36,
</ins><span class="cx">     };
</span><span class="cx">     typedef uint64_t LayerChangeFlags;
</span><span class="cx">     enum ScheduleFlushOrNot { ScheduleFlush, DontScheduleFlush };
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -390,6 +390,13 @@
</span><span class="cx"> {
</span><span class="cx">     m_canCompositeBackdropFilters = m_graphicsLayer-&gt;setBackdropFilters(style.backdropFilter());
</span><span class="cx"> }
</span><ins>+
+void RenderLayerBacking::updateBackdropFiltersGeometry()
+{
+    if (!m_canCompositeBackdropFilters)
+        return;
+    m_graphicsLayer-&gt;setBackdropFiltersRect(snapRectToDevicePixels(contentsBox(), deviceScaleFactor()));
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="lines">@@ -990,7 +997,9 @@
</span><span class="cx"> 
</span><span class="cx">     // If this layer was created just for clipping or to apply perspective, it doesn't need its own backing store.
</span><span class="cx">     setRequiresOwnBackingStore(compositor().requiresOwnBackingStore(m_owningLayer, compAncestor, enclosingRelativeCompositingBounds, ancestorCompositingBounds));
</span><del>-
</del><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    updateBackdropFiltersGeometry();
+#endif
</ins><span class="cx">     updateAfterWidgetResize();
</span><span class="cx"> 
</span><span class="cx">     compositor().updateScrollCoordinatedStatus(m_owningLayer);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.h (185123 => 185124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.h        2015-06-02 21:30:27 UTC (rev 185123)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.h        2015-06-02 21:35:24 UTC (rev 185124)
</span><span class="lines">@@ -288,6 +288,7 @@
</span><span class="cx">     void updateFilters(const RenderStyle&amp;);
</span><span class="cx"> #if ENABLE(FILTERS_LEVEL_2)
</span><span class="cx">     void updateBackdropFilters(const RenderStyle&amp;);
</span><ins>+    void updateBackdropFiltersGeometry();
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     void updateBlendMode(const RenderStyle&amp;);
</span></span></pre>
</div>
</div>

</body>
</html>