<!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>[246407] 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/246407">246407</a></dd>
<dt>Author</dt> <dd>antti@apple.com</dd>
<dt>Date</dt> <dd>2019-06-13 11:36:03 -0700 (Thu, 13 Jun 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>twitch.tv: embedded video hovers down the screen when scrolling on iPad
https://bugs.webkit.org/show_bug.cgi?id=198832
<rdar://problem/51541439>

Reviewed by Simon Fraser.

Source/WebCore:

Test: compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::scrollTo):

Overflow scroll layer may have composited descendants that are its paint order siblings. We need to invalidate
the tree of the paint order parent for compositing update (instead of just the tree of the overflow scroll layer).

This matches what RenderLayer::updateLayerPosition() does.

LayoutTests:

* compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html: Added.
* compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.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="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingscrollingasyncoverflowscrollingoverflowscrollpaintordersiblingexpectedhtml">trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingscrollingasyncoverflowscrollingoverflowscrollpaintordersiblinghtml">trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (246406 => 246407)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2019-06-13 18:35:26 UTC (rev 246406)
+++ trunk/LayoutTests/ChangeLog 2019-06-13 18:36:03 UTC (rev 246407)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2019-06-13  Antti Koivisto  <antti@apple.com>
+
+        twitch.tv: embedded video hovers down the screen when scrolling on iPad
+        https://bugs.webkit.org/show_bug.cgi?id=198832
+        <rdar://problem/51541439>
+
+        Reviewed by Simon Fraser.
+
+        * compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html: Added.
+        * compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html: Added.
+
</ins><span class="cx"> 2019-06-13  Youenn Fablet  <youenn@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Import WPT websockets tests
</span></span></pre></div>
<a id="trunkLayoutTestscompositingscrollingasyncoverflowscrollingoverflowscrollpaintordersiblingexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html (0 => 246407)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html                               (rev 0)
+++ trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling-expected.html  2019-06-13 18:36:03 UTC (rev 246407)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<style>
+.scroll {
+    overflow:scroll;
+    width: 500px;
+    height: 500px;
+    border: 2px solid yellow;
+}
+.content {
+    overflow:hidden;
+    width: 500px;
+    height: 1500px;
+    border: 10px solid green;
+}
+.stuff {
+    position:relative;
+    top: 200px;
+    width: 50px;
+    height: 50px;
+    background: red;
+}
+</style>
+<div class="scroll" id="scroller">
+    <div class="content">
+        <div class="stuff">
+        </div>
+    </div>
+</div>
+<script>
+scroller.scrollTo(0, 100);
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestscompositingscrollingasyncoverflowscrollingoverflowscrollpaintordersiblinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html (0 => 246407)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html                                (rev 0)
+++ trunk/LayoutTests/compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html   2019-06-13 18:36:03 UTC (rev 246407)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<style>
+.scroll {
+    overflow:scroll;
+    width: 500px;
+    height: 500px;
+    border: 2px solid yellow;
+}
+.content {
+    overflow:hidden;
+    width: 500px;
+    height: 1500px;
+    border: 10px solid green;
+}
+.stuff {
+    position:relative;
+    top: 200px;
+    width: 50px;
+    height: 50px;
+    background: red;
+    will-change:transform;
+}
+</style>
+<div class="scroll" id="scroller">
+    <div class="content">
+        <div class="stuff">
+        </div>
+    </div>
+</div>
+<script>
+scroller.scrollTo(0, 100);
+</script>
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (246406 => 246407)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-06-13 18:35:26 UTC (rev 246406)
+++ trunk/Source/WebCore/ChangeLog      2019-06-13 18:36:03 UTC (rev 246407)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2019-06-13  Antti Koivisto  <antti@apple.com>
+
+        twitch.tv: embedded video hovers down the screen when scrolling on iPad
+        https://bugs.webkit.org/show_bug.cgi?id=198832
+        <rdar://problem/51541439>
+
+        Reviewed by Simon Fraser.
+
+        Test: compositing/scrolling/async-overflow-scrolling/overflow-scroll-paint-order-sibling.html
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::scrollTo):
+
+        Overflow scroll layer may have composited descendants that are its paint order siblings. We need to invalidate
+        the tree of the paint order parent for compositing update (instead of just the tree of the overflow scroll layer).
+
+        This matches what RenderLayer::updateLayerPosition() does.
+
</ins><span class="cx"> 2019-06-13  Youenn Fablet  <youenn@apple.com>
</span><span class="cx"> 
</span><span class="cx">         SocketStreamHandle should not be destroyed in a background thread
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (246406 => 246407)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp   2019-06-13 18:35:26 UTC (rev 246406)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp      2019-06-13 18:36:03 UTC (rev 246407)
</span><span class="lines">@@ -2515,7 +2515,11 @@
</span><span class="cx">             // when that completes.
</span><span class="cx">             if (usesCompositedScrolling()) {
</span><span class="cx">                 setNeedsCompositingGeometryUpdate();
</span><del>-                setDescendantsNeedUpdateBackingAndHierarchyTraversal();
</del><ins>+
+                // Scroll position can affect the location of a composited descendant (which may be a sibling in z-order),
+                // so trigger a descendant walk from the paint-order parent.
+                if (auto* paintParent = paintOrderParent())
+                    paintParent->setDescendantsNeedUpdateBackingAndHierarchyTraversal();
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             updateCompositingLayersAfterScroll();
</span></span></pre>
</div>
</div>

</body>
</html>