summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorMangesh Ghiware <mghiware@google.com>2012-04-25 13:12:41 -0700
committerMangesh Ghiware <mghiware@google.com>2012-04-25 13:12:41 -0700
commit87431609180dfb277a94cb8b81554e8bd2ef355d (patch)
tree5f209ee289b45c771101065684b5a27de698b9d0 /Source
parent2ad54828a335c8e7337ab1f1077253689630a6d2 (diff)
downloadexternal_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.zip
external_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.tar.gz
external_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.tar.bz2
Fix crash in RenderLayerCompositor::updateCompositingLayers
Don't enable composited layers for fixed elements with a width or height of 1 or less. This duplicates the check used for deciding if layers following fixed layers are composited or not. This fixes the scenario where updateBacking() switches composited mode on (by calling enableCompositingMode()) because a layer is fixed, while computeCompositingRequirements() will disable it, and results in a segfault in updateCompositingLayers() Bug: 6324603 Change-Id: I034f2bd2f1a84fc24de6ab359c07f4895e2c7121
Diffstat (limited to 'Source')
-rw-r--r--Source/WebCore/rendering/RenderLayerCompositor.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index 6b669e8..7d70533 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -1425,8 +1425,13 @@ bool RenderLayerCompositor::requiresCompositingForAndroidLayers(const RenderLaye
#if ENABLE(COMPOSITED_FIXED_ELEMENTS)
// Enable composited layers (for fixed elements)
- if (layer->isFixed())
- return true;
+ if (layer->isFixed()) {
+ // Skip fixed layers with a width or height of 1 or less...
+ IntRect bounds = layer->renderer()->localToAbsoluteQuad(
+ FloatRect(layer->localBoundingBox())).enclosingBoundingBox();
+ if (bounds.width() > 1 && bounds.height() > 1)
+ return true;
+ }
#endif
if (layer->renderer()->isCanvas())