<!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>[187841] releases/WebKitGTK/webkit-2.8</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/187841">187841</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-08-04 04:27:05 -0700 (Tue, 04 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/186911">r186911</a> - Fix disappearing position:fixed elements in fixed layout mode
https://bugs.webkit.org/show_bug.cgi?id=147019

Reviewed by Tim Horton.
Source/WebCore:

Test: compositing/fixed-with-fixed-layout.html

When in fixed layout mode, and being scaled down, viewportConstrainedVisibleContentRect() is
the wrong thing to use to determine if position:fixed elements are clipped out. In this case,
use the simpler document bounds (before scaling).

In the long term,  there needs to be an equivalent of viewportConstrainedVisibleContentRect()
that gives an appropriate rect that can be used here.

* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::requiresCompositingForPosition):

LayoutTests:

Test with four fixed elements in fixed layout mode.

* compositing/fixed-with-fixed-layout-expected.txt: Added.
* compositing/fixed-with-fixed-layout.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorerenderingRenderLayerCompositorcpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestscompositingfixedwithfixedlayoutexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestscompositingfixedwithfixedlayouthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit28LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (187840 => 187841)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-08-04 11:19:37 UTC (rev 187840)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-08-04 11:27:05 UTC (rev 187841)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2015-07-16  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Fix disappearing position:fixed elements in fixed layout mode
+        https://bugs.webkit.org/show_bug.cgi?id=147019
+
+        Reviewed by Tim Horton.
+        
+        Test with four fixed elements in fixed layout mode.
+
+        * compositing/fixed-with-fixed-layout-expected.txt: Added.
+        * compositing/fixed-with-fixed-layout.html: Added.
+
</ins><span class="cx"> 2015-07-09  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fetching Content Security Policy report URL should respect same origin policy
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestscompositingfixedwithfixedlayoutexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout-expected.txt (0 => 187841)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout-expected.txt        2015-08-04 11:27:05 UTC (rev 187841)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+Top Left Right bottom
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 806.00 1616.00)
+  (children 1
+    (GraphicsLayer
+      (anchor 0.00 0.00)
+      (bounds 1008.00 2021.00)
+      (contentsOpaque 1)
+      (transform [0.80 0.00 0.00 0.00] [0.00 0.80 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
+      (children 4
+        (GraphicsLayer
+          (bounds 1000.00 100.00)
+          (drawsContent 1)
+        )
+        (GraphicsLayer
+          (position 0.00 200.00)
+          (bounds 100.00 100.00)
+          (drawsContent 1)
+        )
+        (GraphicsLayer
+          (position 900.00 200.00)
+          (bounds 100.00 100.00)
+          (drawsContent 1)
+        )
+        (GraphicsLayer
+          (position 0.00 1900.00)
+          (bounds 1000.00 100.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestscompositingfixedwithfixedlayouthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout.html (0 => 187841)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/fixed-with-fixed-layout.html        2015-08-04 11:27:05 UTC (rev 187841)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        body {
+            height: 2000px;
+            width: 1000px;
+        }
+        
+        .fixed {
+            position: fixed;
+            height: 100px;
+            width: 100px;
+            background-color: rgba(0, 0, 0, 0.5);
+        }
+        
+        .top, .bottom {
+            left: 0;
+            width: 100%;
+        }
+        
+        .left, .right {
+            top: 200px;
+        }
+        
+        .top {
+            top: 0;
+        }
+        
+        .bottom {
+            bottom: 0;
+        }
+        .left {
+            left: 0;
+        }
+        .right {
+            right: 0;
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+        
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        if (window.internals) {
+            internals.settings.setAcceleratedCompositingForFixedPositionEnabled(true);
+            internals.setUseFixedLayout(true);
+            internals.setFixedLayoutSize(1000, 2000);
+            var scale = 800 / 1000;
+            eventSender.scalePageBy(scale, scale);
+        }
+        
+        function doTest()
+        {
+            window.setTimeout(function() {
+                document.getElementById(&quot;layerTree&quot;).innerText = window.internals.layerTreeAsText(document);
+                testRunner.notifyDone();
+            }, 0);
+        }
+        
+        window.addEventListener('load', doTest, false);
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;div class=&quot;top fixed&quot;&gt;
+    Top
+&lt;/div&gt;
+
+&lt;div class=&quot;left fixed&quot;&gt;
+    Left
+&lt;/div&gt;
+
+&lt;div class=&quot;right fixed&quot;&gt;
+    Right
+&lt;/div&gt;
+
+&lt;div class=&quot;bottom fixed&quot;&gt;
+    bottom
+&lt;/div&gt;
+
+&lt;pre id=&quot;layerTree&quot;&gt;&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (187840 => 187841)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-08-04 11:19:37 UTC (rev 187840)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-08-04 11:27:05 UTC (rev 187841)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2015-07-16  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Fix disappearing position:fixed elements in fixed layout mode
+        https://bugs.webkit.org/show_bug.cgi?id=147019
+
+        Reviewed by Tim Horton.
+
+        Test: compositing/fixed-with-fixed-layout.html
+        
+        When in fixed layout mode, and being scaled down, viewportConstrainedVisibleContentRect() is
+        the wrong thing to use to determine if position:fixed elements are clipped out. In this case,
+        use the simpler document bounds (before scaling).
+        
+        In the long term,  there needs to be an equivalent of viewportConstrainedVisibleContentRect()
+        that gives an appropriate rect that can be used here.
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
+
</ins><span class="cx"> 2015-07-14  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Don't persist history item tree for subframes across reloads.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderLayerCompositor.cpp (187840 => 187841)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-08-04 11:19:37 UTC (rev 187840)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-08-04 11:27:05 UTC (rev 187841)
</span><span class="lines">@@ -2714,7 +2714,12 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Fixed position elements that are invisible in the current view don't get their own layer.
</span><del>-    LayoutRect viewBounds = m_renderView.frameView().viewportConstrainedVisibleContentRect();
</del><ins>+    // FIXME: We shouldn't have to check useFixedLayout() here; one of the viewport rects needs to give the correct answer.
+    LayoutRect viewBounds;
+    if (m_renderView.frameView().useFixedLayout())
+        viewBounds = m_renderView.unscaledDocumentRect();
+    else
+        viewBounds = m_renderView.frameView().viewportConstrainedVisibleContentRect();
</ins><span class="cx">     LayoutRect layerBounds = layer.calculateLayerBounds(&amp;layer, LayoutSize(), RenderLayer::UseLocalClipRectIfPossible | RenderLayer::IncludeLayerFilterOutsets | RenderLayer::UseFragmentBoxesExcludingCompositing
</span><span class="cx">         | RenderLayer::ExcludeHiddenDescendants | RenderLayer::DontConstrainForMask | RenderLayer::IncludeCompositedDescendants);
</span><span class="cx">     // Map to m_renderView to ignore page scale.
</span></span></pre>
</div>
</div>

</body>
</html>