[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.15.1-1414-gc69ee75

simon.fraser at apple.com simon.fraser at apple.com
Thu Oct 29 20:38:30 UTC 2009


The following commit has been merged in the webkit-1.1 branch:
commit f9b321bc5c73a03814902bbe3b67d3e18fa0dce1
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Oct 2 23:02:45 2009 +0000

    2009-10-02  Simon Fraser  <simon.fraser at apple.com>
    
            Reviewed by Dan Bernstein.
    
            Setting zero size on a container of a video element doesn't hide the controller
            https://bugs.webkit.org/show_bug.cgi?id=30031
    
            Fix a logic error in enclosingCompositingLayer() when mixing normal flow and
            positioned layers. This resulted in enclosingCompositingLayer() giving back a different
            answer to the logic used to actually parent compositing layers, so layer positions
            and layer hierarchy would be out of agreement.
    
            Test: compositing/geometry/clipped-video-controller.html
    
            * rendering/RenderLayer.cpp:
            (WebCore::compositingContainer):
            (WebCore::RenderLayer::enclosingCompositingLayer):
            * rendering/RenderLayerCompositor.cpp:
            (WebCore::RenderLayerCompositor::setCompositingParent):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@49052 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 9c8d471..36853b9 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,17 @@
+2009-10-02  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Setting zero size on a container of a video element doesn't hide the controller
+        https://bugs.webkit.org/show_bug.cgi?id=30031
+
+        Testcase with a video element inside a positioned div with overflow.
+        
+        * compositing/geometry/clipped-video-controller.html: Added.
+        * platform/mac/compositing/geometry/clipped-video-controller-expected.checksum: Added.
+        * platform/mac/compositing/geometry/clipped-video-controller-expected.png: Added.
+        * platform/mac/compositing/geometry/clipped-video-controller-expected.txt: Added.
+
 2009-10-02  Vitaly Repeshko  <vitalyr at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/LayoutTests/compositing/geometry/clipped-video-controller.html b/LayoutTests/compositing/geometry/clipped-video-controller.html
new file mode 100644
index 0000000..631bd4a
--- /dev/null
+++ b/LayoutTests/compositing/geometry/clipped-video-controller.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+
+<html lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Clipped Video</title>
+</head>
+  <style>
+    
+      #box {
+        position: absolute;
+        top: 50px;
+        left: 20px;
+        height: 50px;
+        width: 50px;
+        overflow: hidden;
+        border: 10px solid green;
+      }
+    
+  </style>
+  <script type="text/javascript" charset="utf-8">
+    if (window.layoutTestController)
+      layoutTestController.waitUntilDone();
+  </script>
+
+<body>
+    <p>The video controller should not be visible below</p>
+    <div id="box">
+      <video src="../resources/video.mp4" controls></video>
+    </div>
+    <script type="text/javascript" charset="utf-8">
+      var video = document.getElementsByTagName('video')[0];
+      video.addEventListener('canplaythrough', function() {
+        if (window.layoutTestController)
+          layoutTestController.notifyDone();
+      }, false);
+    </script>
+</body>
+</html>
diff --git a/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.checksum b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.checksum
new file mode 100644
index 0000000..c71a5b3
--- /dev/null
+++ b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.checksum
@@ -0,0 +1 @@
+df574acab02e4109732f1aede511167f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.png b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.png
new file mode 100644
index 0000000..fee3cf4
Binary files /dev/null and b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.png differ
diff --git a/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.txt b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.txt
new file mode 100644
index 0000000..3bbd831
--- /dev/null
+++ b/LayoutTests/platform/mac/compositing/geometry/clipped-video-controller-expected.txt
@@ -0,0 +1,15 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x50
+  RenderBlock {HTML} at (0,0) size 800x50
+    RenderBody {BODY} at (8,16) size 784x18
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 305x18
+          text run at (0,0) width 305: "The video controller should not be visible below"
+layer at (20,50) size 70x70 clip at (30,60) size 50x50 scrollWidth 352 scrollHeight 292
+  RenderBlock (positioned) {DIV} at (20,50) size 70x70 [border: (10px solid #008000)]
+    RenderText {#text} at (0,0) size 0x0
+layer at (30,60) size 352x288 backgroundClip at (30,60) size 50x50 clip at (30,60) size 50x50 outlineClip at (30,60) size 50x50
+  RenderVideo {VIDEO} at (10,10) size 352x288
+layer at (30,60) size 352x288 backgroundClip at (30,60) size 50x50 clip at (30,60) size 50x50 outlineClip at (30,60) size 50x50
+  RenderBlock (relative positioned) {DIV} at (0,0) size 352x288
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 94e6f6f..58f1918 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,23 @@
+2009-10-02  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Setting zero size on a container of a video element doesn't hide the controller
+        https://bugs.webkit.org/show_bug.cgi?id=30031
+        
+        Fix a logic error in enclosingCompositingLayer() when mixing normal flow and 
+        positioned layers. This resulted in enclosingCompositingLayer() giving back a different
+        answer to the logic used to actually parent compositing layers, so layer positions
+        and layer hierarchy would be out of agreement.
+        
+        Test: compositing/geometry/clipped-video-controller.html
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::compositingContainer):
+        (WebCore::RenderLayer::enclosingCompositingLayer):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::setCompositingParent):
+
 2009-10-02  Kent Tamura  <tkent at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 95db43a..9356c70 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -662,21 +662,20 @@ RenderLayer* RenderLayer::enclosingTransformedAncestor() const
     return curr;
 }
 
+static inline const RenderLayer* compositingContainer(const RenderLayer* layer)
+{
+    return layer->isNormalFlowOnly() ? layer->parent() : layer->stackingContext();
+}
+
 #if USE(ACCELERATED_COMPOSITING)
 RenderLayer* RenderLayer::enclosingCompositingLayer(bool includeSelf) const
 {
     if (includeSelf && isComposited())
         return const_cast<RenderLayer*>(this);
 
-    // Compositing layers are parented according to stacking order and overflow list,
-    // so we have to check whether the parent is a stacking context, or whether 
-    // the child is overflow-only.
-    bool inNormalFlowList = isNormalFlowOnly();
-    for (RenderLayer* curr = parent(); curr; curr = curr->parent()) {
-        if (curr->isComposited() && (inNormalFlowList || curr->isStackingContext()))
-            return curr;
-        
-        inNormalFlowList = curr->isNormalFlowOnly();
+    for (const RenderLayer* curr = compositingContainer(this); curr; curr = compositingContainer(curr)) {
+        if (curr->isComposited())
+            return const_cast<RenderLayer*>(curr);
     }
          
     return 0;
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index bcd1f08..5201287 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -535,6 +535,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* layer, O
 
 void RenderLayerCompositor::setCompositingParent(RenderLayer* childLayer, RenderLayer* parentLayer)
 {
+    ASSERT(!parentLayer || childLayer->ancestorCompositingLayer() == parentLayer);
     ASSERT(childLayer->isComposited());
 
     // It's possible to be called with a parent that isn't yet composited when we're doing

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list