<!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>[168440] 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/168440">168440</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-05-07 14:49:10 -0700 (Wed, 07 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Acclerated overflow-scrolling broken in WK1
https://bugs.webkit.org/show_bug.cgi?id=132665
&lt;rdar://problem/16842909&gt;

Reviewed by Tim Horton.

<a href="http://trac.webkit.org/projects/webkit/changeset/168301">r168301</a> added a CALayer delegate to disable implicit animations,
but for some layers we wrap them in UIViews (which are themselves
layer delegates), so bad things happened.

Fix by falling back to setting the null actions dictionary for
layers with custom scrolling behavior.

* platform/graphics/GraphicsLayer.h:
* platform/graphics/ca/mac/PlatformCALayerMac.h:
* platform/graphics/ca/mac/PlatformCALayerMac.mm:
(PlatformCALayerMac::updateCustomBehavior):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateScrollingLayers):</pre>

<h3>Modified Paths</h3>
<ul>
<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="#trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMach">trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMacmm">trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168439 => 168440)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-07 21:19:03 UTC (rev 168439)
+++ trunk/Source/WebCore/ChangeLog        2014-05-07 21:49:10 UTC (rev 168440)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-05-07  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        [iOS] Acclerated overflow-scrolling broken in WK1
+        https://bugs.webkit.org/show_bug.cgi?id=132665
+        &lt;rdar://problem/16842909&gt;
+
+        Reviewed by Tim Horton.
+
+        r168301 added a CALayer delegate to disable implicit animations,
+        but for some layers we wrap them in UIViews (which are themselves
+        layer delegates), so bad things happened.
+        
+        Fix by falling back to setting the null actions dictionary for
+        layers with custom scrolling behavior.
+
+        * platform/graphics/GraphicsLayer.h:
+        * platform/graphics/ca/mac/PlatformCALayerMac.h:
+        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
+        (PlatformCALayerMac::updateCustomBehavior):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateScrollingLayers):
+
</ins><span class="cx"> 2014-05-07  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         HTMLMediaElement should exitFullscreen when view is removed from the window.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (168439 => 168440)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-05-07 21:19:03 UTC (rev 168439)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-05-07 21:49:10 UTC (rev 168440)
</span><span class="lines">@@ -446,7 +446,7 @@
</span><span class="cx">     virtual void setCustomAppearance(CustomAppearance customAppearance) { m_customAppearance = customAppearance; }
</span><span class="cx">     CustomAppearance customAppearance() const { return m_customAppearance; }
</span><span class="cx"> 
</span><del>-    enum CustomBehavior { NoCustomBehavior, CustomScrollingBehavior };
</del><ins>+    enum CustomBehavior { NoCustomBehavior, CustomScrollingBehavior, CustomScrolledContentsBehavior };
</ins><span class="cx">     virtual void setCustomBehavior(CustomBehavior customBehavior) { m_customBehavior = customBehavior; }
</span><span class="cx">     CustomBehavior customBehavior() const { return m_customBehavior; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h (168439 => 168440)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h        2014-05-07 21:19:03 UTC (rev 168439)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h        2014-05-07 21:49:10 UTC (rev 168440)
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx">     virtual void updateCustomAppearance(GraphicsLayer::CustomAppearance) override;
</span><span class="cx"> 
</span><span class="cx">     virtual GraphicsLayer::CustomBehavior customBehavior() const override { return m_customBehavior; }
</span><del>-    virtual void updateCustomBehavior(GraphicsLayer::CustomBehavior customBehavior) override { m_customBehavior = customBehavior; }
</del><ins>+    virtual void updateCustomBehavior(GraphicsLayer::CustomBehavior) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual TiledBacking* tiledBacking() override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm (168439 => 168440)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm        2014-05-07 21:19:03 UTC (rev 168439)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm        2014-05-07 21:49:10 UTC (rev 168440)
</span><span class="lines">@@ -764,6 +764,19 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PlatformCALayerMac::updateCustomBehavior(GraphicsLayer::CustomBehavior customBehavior)
+{
+    m_customBehavior = customBehavior;
+
+    // Custom layers can get wrapped in UIViews (which clobbers the layer delegate),
+    // so fall back to the slower way of disabling implicit animations.
+    if (m_customBehavior != GraphicsLayer::NoCustomBehavior) {
+        if ([[m_layer delegate] isKindOfClass:[WebActionDisablingCALayerDelegate class]])
+            [m_layer setDelegate:nil];
+        [m_layer web_disableAllActions];
+    }
+}
+
</ins><span class="cx"> TiledBacking* PlatformCALayerMac::tiledBacking()
</span><span class="cx"> {
</span><span class="cx">     if (!usesTiledBackingLayer())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (168439 => 168440)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-05-07 21:19:03 UTC (rev 168439)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-05-07 21:49:10 UTC (rev 168440)
</span><span class="lines">@@ -1427,6 +1427,9 @@
</span><span class="cx">         // Inner layer which renders the content that scrolls.
</span><span class="cx">         m_scrollingContentsLayer = createGraphicsLayer(&quot;Scrolled Contents&quot;);
</span><span class="cx">         m_scrollingContentsLayer-&gt;setDrawsContent(true);
</span><ins>+#if PLATFORM(IOS)
+        m_scrollingContentsLayer-&gt;setCustomBehavior(GraphicsLayer::CustomScrolledContentsBehavior);
+#endif
</ins><span class="cx">         GraphicsLayerPaintingPhase paintPhase = GraphicsLayerPaintOverflowContents | GraphicsLayerPaintCompositedScroll;
</span><span class="cx">         if (!m_foregroundLayer)
</span><span class="cx">             paintPhase |= GraphicsLayerPaintForeground;
</span></span></pre>
</div>
</div>

</body>
</html>