Changeset 143655 in webkit
- Timestamp:
- Feb 21, 2013, 3:29:17 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/css3/filters/filter-with-opacity-and-children-expected.txt (added)
-
LayoutTests/css3/filters/filter-with-opacity-and-children.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayer.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r143651 r143655 1 2013-02-21 Simon Fraser <simon.fraser@apple.com> 2 3 [Safari] Crash with opacity + drop shadow filter + child element extending beyond filter outsets 4 https://bugs.webkit.org/show_bug.cgi?id=107467 5 6 Reviewed by Dean Jackson. 7 8 Testcase with filtered element with opacity, and layer child. 9 10 * css3/filters/filter-with-opacity-and-children-expected.txt: Added. 11 * css3/filters/filter-with-opacity-and-children.html: Added. 12 1 13 2013-02-21 Philip Rogers <pdr@google.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r143652 r143655 1 2013-02-21 Simon Fraser <simon.fraser@apple.com> 2 3 [Safari] Crash with opacity + drop shadow filter + child element extending beyond filter outsets 4 https://bugs.webkit.org/show_bug.cgi?id=107467 5 6 Reviewed by Dean Jackson. 7 8 The filter code plays games with the current GraphicsContext, replacing the current 9 context with one which will get filtered. 10 11 This doesn't play nicely with the RenderLayer code which lazily starts transparency 12 layers. If we don't start a transparency layer until painting a child of the filtered 13 layer, then the transparency layer is started using the wrong context. 14 15 Fix by eagerly starting transparency layers if we have both a filter and opacity. 16 17 Test: css3/filters/filter-with-opacity-and-children.html 18 19 * rendering/RenderLayer.cpp: 20 (WebCore::RenderLayer::paintLayerContents): 21 1 22 2013-02-21 Tony Chang <tony@chromium.org> 2 23 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r143626 r143655 3725 3725 if (this != localPaintingInfo.rootLayer || !(localPaintFlags & PaintLayerPaintingOverflowContents)) 3726 3726 shouldPaintContent &= intersectsDamageRect(layerBounds, damageRect.rect(), localPaintingInfo.rootLayer, &offsetFromRoot); 3727 3727 3728 #if ENABLE(CSS_FILTERS) 3729 if (filterPainter.hasStartedFilterEffect() && haveTransparency) { 3730 // If we have a filter and transparency, we have to eagerly start a transparency layer here, rather than risk a child layer lazily starts one with the wrong context. 3731 beginTransparencyLayers(transparencyLayerContext, localPaintingInfo.rootLayer, paintingInfo.paintDirtyRect, localPaintingInfo.paintBehavior); 3732 } 3733 #endif 3734 3728 3735 if (localPaintFlags & PaintLayerPaintingCompositingBackgroundPhase) { 3729 3736 if (shouldPaintContent && !selectionOnly) {
Note:
See TracChangeset
for help on using the changeset viewer.