Title: [153681] trunk
Revision
153681
Author
d...@apple.com
Date
2013-08-02 17:06:31 -0700 (Fri, 02 Aug 2013)

Log Message

Force elements with perspective or preserve-3d to disallow direct composited backgrounds
https://bugs.webkit.org/show_bug.cgi?id=119462
<rdar://problem/14607548>

Reviewed by Simon Fraser.

Source/WebCore:

Bug 119461 (http://wkb.ug/119461) describes how a directly composited
background color can intersect with its children. It's not clear exactly
what the best way to fix that is, but for the moment we should disallow
any element that has perspective or a preserve-3d transform style from
getting a directly composited background.

Test: compositing/background-color/no-composited-background-color-when-perspective.html

* rendering/RenderLayerBacking.cpp:
(WebCore::hasPerspectiveOrPreserves3D): New static helper.
(WebCore::supportsDirectBoxDecorationsComposition): Return false if the above function is true.

LayoutTests:

* compositing/background-color/no-composited-background-color-when-perspective-expected.html: Added.
* compositing/background-color/no-composited-background-color-when-perspective.html: Added.
* compositing/geometry/preserve-3d-switching-expected.txt: Rebaselined.
* compositing/overflow-trumps-transform-style-expected.txt: Rebaselined.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (153680 => 153681)


--- trunk/LayoutTests/ChangeLog	2013-08-03 00:05:05 UTC (rev 153680)
+++ trunk/LayoutTests/ChangeLog	2013-08-03 00:06:31 UTC (rev 153681)
@@ -1,3 +1,16 @@
+2013-08-02  Dean Jackson  <d...@apple.com>
+
+        Force elements with perspective or preserve-3d to disallow direct composited backgrounds
+        https://bugs.webkit.org/show_bug.cgi?id=119462
+        <rdar://problem/14607548>
+
+        Reviewed by Simon Fraser.
+
+        * compositing/background-color/no-composited-background-color-when-perspective-expected.html: Added.
+        * compositing/background-color/no-composited-background-color-when-perspective.html: Added.
+        * compositing/geometry/preserve-3d-switching-expected.txt: Rebaselined.
+        * compositing/overflow-trumps-transform-style-expected.txt: Rebaselined.
+
 2013-08-02  Chris Curtis  <chris_cur...@apple.com>
 
         Give the error object's stack property accessor attributes.

Added: trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective-expected.html (0 => 153681)


--- trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective-expected.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective-expected.html	2013-08-03 00:06:31 UTC (rev 153681)
@@ -0,0 +1,28 @@
+<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
+<style>
+body {
+    margin: 0;
+}
+
+div {
+    position: absolute;
+    height: 200px;
+    width: 200px;
+}
+
+#container {
+    /* Force box decorations so no direct composited background */
+    /* This is just a black image */
+    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAMAAAC6sdbXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFAAAA////pdmf3QAAAA5JREFUeNpiYMAHAAIMAAAeAAHMILKLAAAAAElFTkSuQmCC");
+    background-color: black;
+    -webkit-perspective: 400;
+}
+
+#face {
+    -webkit-transform: rotateX(45deg);
+    background-color: red;
+}
+</style>
+<div id="container">
+    <div id="face"></div>
+</div>
Property changes on: trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective-expected.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Added: trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective.html (0 => 153681)


--- trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective.html	2013-08-03 00:06:31 UTC (rev 153681)
@@ -0,0 +1,25 @@
+<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
+<style>
+body {
+    margin: 0;
+}
+
+div {
+    position: absolute;
+    height: 200px;
+    width: 200px;
+}
+
+#container {
+    background-color: black;
+    -webkit-perspective: 400;
+}
+
+#face {
+    -webkit-transform: rotateX(45deg);
+    background-color: red;
+}
+</style>
+<div id="container">
+    <div id="face"></div>
+</div>
Property changes on: trunk/LayoutTests/compositing/background-color/no-composited-background-color-when-perspective.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Modified: trunk/LayoutTests/compositing/geometry/preserve-3d-switching-expected.txt (153680 => 153681)


--- trunk/LayoutTests/compositing/geometry/preserve-3d-switching-expected.txt	2013-08-03 00:05:05 UTC (rev 153680)
+++ trunk/LayoutTests/compositing/geometry/preserve-3d-switching-expected.txt	2013-08-03 00:06:31 UTC (rev 153681)
@@ -19,6 +19,7 @@
               (opacity 0.80)
               (contentsOpaque 1)
               (preserves3D 1)
+              (drawsContent 1)
               (transform [0.77 -0.56 -0.32 0.00] [0.00 0.50 -0.87 0.00] [0.64 0.66 0.38 0.00] [0.00 0.00 0.00 1.00])
               (children 1
                 (GraphicsLayer

Modified: trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt (153680 => 153681)


--- trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt	2013-08-03 00:05:05 UTC (rev 153680)
+++ trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt	2013-08-03 00:06:31 UTC (rev 153681)
@@ -12,6 +12,7 @@
           (bounds 100.00 100.00)
           (contentsOpaque 1)
           (preserves3D 1)
+          (drawsContent 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
         )
         (GraphicsLayer

Modified: trunk/Source/WebCore/ChangeLog (153680 => 153681)


--- trunk/Source/WebCore/ChangeLog	2013-08-03 00:05:05 UTC (rev 153680)
+++ trunk/Source/WebCore/ChangeLog	2013-08-03 00:06:31 UTC (rev 153681)
@@ -1,3 +1,23 @@
+2013-08-02  Dean Jackson  <d...@apple.com>
+
+        Force elements with perspective or preserve-3d to disallow direct composited backgrounds
+        https://bugs.webkit.org/show_bug.cgi?id=119462
+        <rdar://problem/14607548>
+
+        Reviewed by Simon Fraser.
+
+        Bug 119461 (http://wkb.ug/119461) describes how a directly composited
+        background color can intersect with its children. It's not clear exactly
+        what the best way to fix that is, but for the moment we should disallow
+        any element that has perspective or a preserve-3d transform style from
+        getting a directly composited background.
+
+        Test: compositing/background-color/no-composited-background-color-when-perspective.html
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::hasPerspectiveOrPreserves3D): New static helper.
+        (WebCore::supportsDirectBoxDecorationsComposition): Return false if the above function is true.
+
 2013-08-02  Oliver Hunt  <oli...@apple.com>
 
         Update binding test results

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (153680 => 153681)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2013-08-03 00:05:05 UTC (rev 153680)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2013-08-03 00:06:31 UTC (rev 153681)
@@ -1389,6 +1389,11 @@
     return !GraphicsLayer::supportsContentsTiling() || !canCreateTiledImage(style);
 }
 
+static bool hasPerspectiveOrPreserves3D(const RenderStyle* style)
+{
+    return style->hasPerspective() || style->preserves3D();
+}
+
 Color RenderLayerBacking::rendererBackgroundColor() const
 {
     RenderObject* backgroundRenderer = renderer();
@@ -1504,6 +1509,14 @@
     if (hasBoxDecorationsOrBackgroundImage(renderer->style()))
         return false;
 
+    // FIXME: We can't create a directly composited background if this
+    // layer will have children that intersect with the background layer.
+    // A better solution might be to introduce a flattening layer if
+    // we do direct box decoration composition.
+    // https://bugs.webkit.org/show_bug.cgi?id=119461
+    if (hasPerspectiveOrPreserves3D(renderer->style()))
+        return false;
+
     // FIXME: we should be able to allow backgroundComposite; However since this is not a common use case it has been deferred for now.
     if (renderer->style()->backgroundComposite() != CompositeSourceOver)
         return false;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to