Title: [91597] trunk
Revision
91597
Author
e...@google.com
Date
2011-07-22 12:52:52 -0700 (Fri, 22 Jul 2011)

Log Message

Fix repainting of composited fixed position elements in iframes
https://bugs.webkit.org/show_bug.cgi?id=64010

Reviewed by Simon Fraser.

Source/WebCore:

In cases where an iframe's contents have their own graphics layer, the
invalidation during scrolling was being sent to the wrong render
layer. Fixed by checking if such a layer exists and routing scrolling
invalidations there first.

* page/FrameView.cpp:
(WebCore::FrameView::scrollContentsSlowPath):

LayoutTests:

* compositing/iframes/fixed-position-iframe-expected.png: Added.
* compositing/iframes/fixed-position-iframe-expected.txt: Added.
* compositing/iframes/fixed-position-iframe.html: Added.
* compositing/iframes/resources/fixed-position-subframe.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (91596 => 91597)


--- trunk/LayoutTests/ChangeLog	2011-07-22 19:47:58 UTC (rev 91596)
+++ trunk/LayoutTests/ChangeLog	2011-07-22 19:52:52 UTC (rev 91597)
@@ -1,3 +1,15 @@
+2011-07-21  Adrienne Walker  <e...@google.com>
+
+        Fix repainting of composited fixed position elements in iframes
+        https://bugs.webkit.org/show_bug.cgi?id=64010
+
+        Reviewed by Simon Fraser.
+
+        * compositing/iframes/fixed-position-iframe-expected.png: Added.
+        * compositing/iframes/fixed-position-iframe-expected.txt: Added.
+        * compositing/iframes/fixed-position-iframe.html: Added.
+        * compositing/iframes/resources/fixed-position-subframe.html: Added.
+
 2011-07-22  Sam Weinig  <s...@webkit.org>
 
         Update results after change to make columns and column-span establish

Added: trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.png


(Binary files differ)
Property changes on: trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.png ___________________________________________________________________

Added: svn:mime-type

Added: trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.txt (0 => 91597)


--- trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.txt	2011-07-22 19:52:52 UTC (rev 91597)
@@ -0,0 +1 @@
+
Property changes on: trunk/LayoutTests/compositing/iframes/fixed-position-iframe-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/compositing/iframes/fixed-position-iframe.html (0 => 91597)


--- trunk/LayoutTests/compositing/iframes/fixed-position-iframe.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/iframes/fixed-position-iframe.html	2011-07-22 19:52:52 UTC (rev 91597)
@@ -0,0 +1,18 @@
+<html>
+<head>
+<style>
+  iframe {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    top: 0px;
+    left: 0px;
+    border-width: 0px;
+  }
+</style>
+</head>
+<body>
+  <!-- this test should only show green -->
+  <iframe id="iframe" src=""
+</body>
+</html>
Property changes on: trunk/LayoutTests/compositing/iframes/fixed-position-iframe.html
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/compositing/iframes/resources/fixed-position-subframe.html (0 => 91597)


--- trunk/LayoutTests/compositing/iframes/resources/fixed-position-subframe.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/iframes/resources/fixed-position-subframe.html	2011-07-22 19:52:52 UTC (rev 91597)
@@ -0,0 +1,39 @@
+<html>
+<head>
+<style>
+    body {
+        height: 5000px;
+        background-color: red;
+        overflow: hidden;
+    }
+
+    #trigger {
+        -webkit-transform:translateZ(0);
+    }
+
+    #overlap {
+        width: 1000px;
+        height: 1000px;
+        background-color: green;
+        position: fixed;
+        left: 0px;
+        top: 0px;
+    }
+</style>
+</head>
+<script>
+    function doTest() {
+        if (window.layoutTestController)
+            layoutTestController.dumpAsText(true);
+        window.scrollTo(0, 2000);
+        if (window.layoutTestController)
+            layoutTestController.display();
+        window.scrollTo(0, 1800);
+    }
+    window.addEventListener("load", doTest, false);
+</script>
+<body>
+    <div id="trigger"></div>
+    <div id="overlap"></div>
+</body>
+</html>
Property changes on: trunk/LayoutTests/compositing/iframes/resources/fixed-position-subframe.html
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (91596 => 91597)


--- trunk/Source/WebCore/ChangeLog	2011-07-22 19:47:58 UTC (rev 91596)
+++ trunk/Source/WebCore/ChangeLog	2011-07-22 19:52:52 UTC (rev 91597)
@@ -1,3 +1,18 @@
+2011-07-21  Adrienne Walker  <e...@google.com>
+
+        Fix repainting of composited fixed position elements in iframes
+        https://bugs.webkit.org/show_bug.cgi?id=64010
+
+        Reviewed by Simon Fraser.
+
+        In cases where an iframe's contents have their own graphics layer, the
+        invalidation during scrolling was being sent to the wrong render
+        layer. Fixed by checking if such a layer exists and routing scrolling
+        invalidations there first.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::scrollContentsSlowPath):
+
 2011-07-22  Viet-Trung Luu  <viettrung...@chromium.org>
 
         Improve (i.e., speed up) .gyp(i) files for Chromium

Modified: trunk/Source/WebCore/page/FrameView.cpp (91596 => 91597)


--- trunk/Source/WebCore/page/FrameView.cpp	2011-07-22 19:47:58 UTC (rev 91596)
+++ trunk/Source/WebCore/page/FrameView.cpp	2011-07-22 19:52:52 UTC (rev 91597)
@@ -1352,6 +1352,14 @@
 void FrameView::scrollContentsSlowPath(const IntRect& updateRect)
 {
 #if USE(ACCELERATED_COMPOSITING)
+    RenderView* root = m_frame->contentRenderer();
+    if (root && root->layer()->isComposited()) {
+        GraphicsLayer* layer = root->layer()->backing()->graphicsLayer();
+        if (layer && layer->drawsContent()) {
+            root->layer()->setBackingNeedsRepaintInRect(visibleContentRect());
+            return;
+        }
+    }
     if (RenderPart* frameRenderer = m_frame->ownerRenderer()) {
         if (frameRenderer->containerForRepaint()) {
             IntRect rect(frameRenderer->borderLeft() + frameRenderer->paddingLeft(),
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to