[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

simon.fraser at apple.com simon.fraser at apple.com
Wed Dec 22 15:24:39 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 3cf68b35ff07f3c4416fbe5baafe65c2b386a761
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 2 23:12:33 2010 +0000

    2010-11-02  Simon Fraser  <simon.fraser at apple.com>
    
            Reviewed by Dan Bernstein.
    
            Iframes nested inside a compositing layer don't repaint correctly
            https://bugs.webkit.org/show_bug.cgi?id=48880
            <rdar://problem/8194698>
    
            The isEnclosedInCompositingLayer() is used to modify the behavior of
            -[WebClipView visibleRect:] in WebKit, so that scrolling-related repaints
            are correct in composited iframes. Previously it only asked whether the
            frame's renderer was in a compositing layer, but we actually need to
            consult all ancestors.
    
            Test: compositing/iframes/nested-iframe-scrolling.html
    
            * page/FrameView.cpp:
            (WebCore::FrameView::isEnclosedInCompositingLayer):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71182 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 8345dfb..0c0be6d 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,20 @@
+2010-11-02  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Iframes nested inside a compositing layer don't repaint correctly
+        https://bugs.webkit.org/show_bug.cgi?id=48880
+        <rdar://problem/8194698>
+        
+        Test scrolling in a iframe in an iframe in a compositing layer.
+
+        * compositing/iframes/nested-iframe-scrolling-expected.checksum: Added.
+        * compositing/iframes/nested-iframe-scrolling-expected.png: Added.
+        * compositing/iframes/nested-iframe-scrolling-expected.txt: Added.
+        * compositing/iframes/nested-iframe-scrolling.html: Added.
+        * compositing/iframes/resources/nested-subframe.html: Added.
+        * compositing/iframes/resources/subsubframe.html: Added.
+
 2010-11-02  Dmitry Titov  <dimich at chromium.org>
 
         [Chromium] Unreviewed update of test expectations.
diff --git a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.checksum b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.checksum
new file mode 100644
index 0000000..8860c5c
--- /dev/null
+++ b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.checksum
@@ -0,0 +1 @@
+29a083f0933edd034a6320405824cd68
\ No newline at end of file
diff --git a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.png b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.png
new file mode 100644
index 0000000..dc07932
Binary files /dev/null and b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.png differ
diff --git a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.txt b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.txt
new file mode 100644
index 0000000..976886c
--- /dev/null
+++ b/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.txt
@@ -0,0 +1,23 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (0,0) size 800x600
+      RenderText {#text} at (0,0) size 0x0
+layer at (0,0) size 100x100
+  RenderBlock (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#FF0000]
+layer at (0,0) size 320x200
+  RenderPartObject {IFRAME} at (0,0) size 320x200
+    layer at (0,0) size 320x200
+      RenderView at (0,0) size 320x200
+    layer at (0,0) size 320x200
+      RenderBlock {HTML} at (0,0) size 320x200
+        RenderBody {BODY} at (0,0) size 320x200
+          RenderPartObject {IFRAME} at (0,0) size 300x150
+            layer at (0,0) size 300x1100
+              RenderView at (0,0) size 300x150
+            layer at (0,0) size 300x1100
+              RenderBlock {HTML} at (0,0) size 300x1100
+                RenderBody {BODY} at (0,100) size 300x1000
+                  RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#008000]
+          RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/compositing/iframes/nested-iframe-scrolling.html b/LayoutTests/compositing/iframes/nested-iframe-scrolling.html
new file mode 100644
index 0000000..941a232
--- /dev/null
+++ b/LayoutTests/compositing/iframes/nested-iframe-scrolling.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+  <style type="text/css">
+    body {
+        margin: 0;
+    }
+    iframe {
+        width: 320px;
+        height: 200px;
+        -webkit-transform: translateZ(0);
+        border: none;
+    }
+    
+    #indicator {
+        position: absolute;
+        top: 0px;
+        left: 0px;
+        height: 100px;
+        width: 100px;
+        background-color: red;
+    }
+  </style>
+  <script type="text/javascript" charset="utf-8">
+    
+    if (window.layoutTestController)
+        layoutTestController.waitUntilDone();
+
+    function runTest()
+    {
+        var frameDocument = document.getElementById('frame').contentWindow.document;
+        var subframeWindow = frameDocument.getElementById('subframe').contentWindow;
+        subframeWindow.scrollTo(0, 100);
+
+        if (window.layoutTestController)
+            layoutTestController.notifyDone();
+    }
+    
+    window.addEventListener('load', function() {
+        setTimeout(runTest, 10);
+    }, false);
+    
+  </script>
+</head>
+<body>
+
+<!-- In pixel results, you should see a single green square with no red. -->
+<div id="indicator"></div>
+<iframe id="frame" src="resources/nested-subframe.html"></iframe>
+
+</body>
+</html>
diff --git a/LayoutTests/compositing/iframes/resources/nested-subframe.html b/LayoutTests/compositing/iframes/resources/nested-subframe.html
new file mode 100644
index 0000000..0b37565
--- /dev/null
+++ b/LayoutTests/compositing/iframes/resources/nested-subframe.html
@@ -0,0 +1,17 @@
+<html>
+<head>
+  <style type="text/css">
+    body {
+        margin: 0;
+    }
+    iframe {
+      border: none;
+    }
+  </style>
+</head>
+<body>
+
+<iframe id="subframe" src="subsubframe.html" scrolling="no"></iframe>
+
+</body>
+</html>
diff --git a/LayoutTests/compositing/iframes/resources/subsubframe.html b/LayoutTests/compositing/iframes/resources/subsubframe.html
new file mode 100644
index 0000000..a1d11e3
--- /dev/null
+++ b/LayoutTests/compositing/iframes/resources/subsubframe.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+  <style type="text/css" media="screen">
+    body {
+      height: 1000px;
+      margin: 0;
+    }
+    
+    .box {
+        height: 100px;
+        width: 100px;
+        margin: 100px 0;
+        background-color: green;
+    }
+  </style>
+</head>
+<body>
+
+    <div class="box">
+    </div>
+    
+</body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 2d3ee3d..fc176f9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2010-11-02  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Iframes nested inside a compositing layer don't repaint correctly
+        https://bugs.webkit.org/show_bug.cgi?id=48880
+        <rdar://problem/8194698>
+        
+        The isEnclosedInCompositingLayer() is used to modify the behavior of
+        -[WebClipView visibleRect:] in WebKit, so that scrolling-related repaints
+        are correct in composited iframes. Previously it only asked whether the
+        frame's renderer was in a compositing layer, but we actually need to
+        consult all ancestors.
+        
+        Test: compositing/iframes/nested-iframe-scrolling.html
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::isEnclosedInCompositingLayer):
+
 2010-11-02  David Hyatt  <hyatt at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index 2708ce5..3d93720 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -573,10 +573,15 @@ bool FrameView::isEnclosedInCompositingLayer() const
 {
 #if USE(ACCELERATED_COMPOSITING)
     RenderObject* frameOwnerRenderer = m_frame->ownerRenderer();
-    return frameOwnerRenderer && frameOwnerRenderer->containerForRepaint();
-#else
-    return false;
+    if (frameOwnerRenderer && frameOwnerRenderer->containerForRepaint())
+        return true;
+
+    if (Frame* parentFrame = m_frame->tree()->parent()) {
+        if (FrameView* parentView = parentFrame->view())
+            return parentView->isEnclosedInCompositingLayer();
+    }
 #endif
+    return false;
 }
 
 bool FrameView::syncCompositingStateRecursive()

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list